katax-cli 1.2.0 → 1.2.2

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.
@@ -1,7 +1,6 @@
1
- interface AddEndpointOptions {
2
- method?: string;
3
- path?: string;
1
+ interface EndpointOptions {
2
+ methods?: string[];
4
3
  }
5
- export declare function addEndpointCommand(name: string, options?: AddEndpointOptions): Promise<void>;
4
+ export declare function addEndpointCommand(name: string, options?: EndpointOptions): Promise<void>;
6
5
  export {};
7
6
  //# sourceMappingURL=add-endpoint.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"add-endpoint.d.ts","sourceRoot":"","sources":["../../src/commands/add-endpoint.ts"],"names":[],"mappings":"AAUA,UAAU,kBAAkB;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,kBAAuB,iBAkRjC"}
1
+ {"version":3,"file":"add-endpoint.d.ts","sourceRoot":"","sources":["../../src/commands/add-endpoint.ts"],"names":[],"mappings":"AAYA,UAAU,eAAe;IACvB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,eAAoB,iBAqL9B"}
@@ -1,9 +1,9 @@
1
1
  import inquirer from "inquirer";
2
2
  import ora from "ora";
3
3
  import path from "path";
4
+ import fs from "fs/promises";
4
5
  import { success, error, warning, gray, title, info } from "../utils/logger.js";
5
- import { fileExists } from "../utils/file-utils.js";
6
- import { codeGenerationService } from "../services/code-generation.service.js";
6
+ import { fileExists, writeFile, ensureDir, toPascalCase, toCamelCase } from "../utils/file-utils.js";
7
7
  import { autoRegenerateDocs } from "./generate-docs.js";
8
8
  export async function addEndpointCommand(name, options = {}) {
9
9
  title(`🎯 Add Endpoint: ${name}`);
@@ -13,7 +13,7 @@ export async function addEndpointCommand(name, options = {}) {
13
13
  process.exit(1);
14
14
  }
15
15
  const packageJsonPath = path.join(process.cwd(), "package.json");
16
- const packageJson = JSON.parse(await import("fs").then((fs) => fs.promises.readFile(packageJsonPath, "utf-8")));
16
+ const packageJson = JSON.parse(await fs.readFile(packageJsonPath, "utf-8"));
17
17
  const hasKataxCore = packageJson.dependencies?.["katax-core"];
18
18
  if (!hasKataxCore) {
19
19
  warning("katax-core is not installed in this project");
@@ -34,51 +34,49 @@ export async function addEndpointCommand(name, options = {}) {
34
34
  await execa("npm", ["install", "katax-core"], { cwd: process.cwd() });
35
35
  spinner.succeed("katax-core installed");
36
36
  }
37
- const answers = await inquirer.prompt([
37
+ const { methodChoice } = await inquirer.prompt([
38
38
  {
39
39
  type: "list",
40
- name: "method",
41
- message: "HTTP Method:",
42
- choices: ["GET", "POST", "PUT", "PATCH", "DELETE"],
43
- default: options.method?.toUpperCase() || "POST",
44
- when: !options.method,
45
- },
46
- {
47
- type: "input",
48
- name: "path",
49
- message: "Route path:",
50
- default: `/api/${name.toLowerCase()}`,
51
- when: !options.path,
52
- validate: (input) => {
53
- if (!input.startsWith("/")) {
54
- return "Path must start with /";
55
- }
56
- return true;
57
- },
58
- },
59
- {
60
- type: "confirm",
61
- name: "addValidation",
62
- message: "Add validation?",
63
- default: true,
40
+ name: "methodChoice",
41
+ message: "Which HTTP methods do you want to generate?",
42
+ choices: [
43
+ { name: "All (GET, POST, PUT, DELETE)", value: "all" },
44
+ { name: "Select specific methods", value: "select" },
45
+ ],
46
+ default: "all",
64
47
  },
65
48
  ]);
66
- const config = {
67
- name,
68
- method: (options.method?.toUpperCase() || answers.method),
69
- path: options.path || answers.path,
70
- addValidation: answers.addValidation,
71
- fields: [],
72
- addAsyncValidators: false,
73
- dbOperations: [],
74
- };
75
- if (config.addValidation &&
76
- config.method !== "GET" &&
77
- config.method !== "DELETE") {
49
+ let selectedMethods = ["GET", "POST", "PUT", "DELETE"];
50
+ if (methodChoice === "select") {
51
+ const { methods } = await inquirer.prompt([
52
+ {
53
+ type: "checkbox",
54
+ name: "methods",
55
+ message: "Select HTTP methods:",
56
+ choices: [
57
+ { name: "GET", value: "GET", checked: true },
58
+ { name: "POST", value: "POST", checked: true },
59
+ { name: "PUT", value: "PUT", checked: false },
60
+ { name: "PATCH", value: "PATCH", checked: false },
61
+ { name: "DELETE", value: "DELETE", checked: false },
62
+ ],
63
+ validate: (input) => {
64
+ if (input.length === 0) {
65
+ return "You must select at least one method";
66
+ }
67
+ return true;
68
+ },
69
+ },
70
+ ]);
71
+ selectedMethods = methods;
72
+ }
73
+ let fields = [];
74
+ const needsBody = selectedMethods.some((m) => ["POST", "PUT", "PATCH"].includes(m));
75
+ if (needsBody) {
78
76
  info("\nDefine request body fields:");
79
77
  let addingFields = true;
80
78
  while (addingFields) {
81
- const fieldAnswers = await inquirer.prompt([
79
+ const { fieldName } = await inquirer.prompt([
82
80
  {
83
81
  type: "input",
84
82
  name: "fieldName",
@@ -91,7 +89,7 @@ export async function addEndpointCommand(name, options = {}) {
91
89
  },
92
90
  },
93
91
  ]);
94
- if (!fieldAnswers.fieldName) {
92
+ if (!fieldName) {
95
93
  addingFields = false;
96
94
  break;
97
95
  }
@@ -99,16 +97,8 @@ export async function addEndpointCommand(name, options = {}) {
99
97
  {
100
98
  type: "list",
101
99
  name: "type",
102
- message: `Type for "${fieldAnswers.fieldName}":`,
103
- choices: [
104
- "string",
105
- "number",
106
- "boolean",
107
- "date",
108
- "email",
109
- "array",
110
- "object",
111
- ],
100
+ message: `Type for "${fieldName}":`,
101
+ choices: ["string", "number", "boolean", "date", "email"],
112
102
  },
113
103
  {
114
104
  type: "confirm",
@@ -117,99 +107,27 @@ export async function addEndpointCommand(name, options = {}) {
117
107
  default: true,
118
108
  },
119
109
  ]);
120
- const field = {
121
- name: fieldAnswers.fieldName,
110
+ fields.push({
111
+ name: fieldName,
122
112
  type: fieldConfig.type,
123
113
  required: fieldConfig.required,
124
114
  rules: [],
125
- };
126
- if (fieldConfig.type === "string" || fieldConfig.type === "email") {
127
- const stringRules = await inquirer.prompt([
128
- {
129
- type: "input",
130
- name: "minLength",
131
- message: "Minimum length (press Enter to skip):",
132
- validate: (input) => !input || !isNaN(parseInt(input)) || "Must be a number",
133
- },
134
- {
135
- type: "input",
136
- name: "maxLength",
137
- message: "Maximum length (press Enter to skip):",
138
- validate: (input) => !input || !isNaN(parseInt(input)) || "Must be a number",
139
- },
140
- ]);
141
- if (stringRules.minLength) {
142
- field.rules.push({
143
- type: "minLength",
144
- value: parseInt(stringRules.minLength),
145
- });
146
- }
147
- if (stringRules.maxLength) {
148
- field.rules.push({
149
- type: "maxLength",
150
- value: parseInt(stringRules.maxLength),
151
- });
152
- }
153
- }
154
- if (fieldConfig.type === "number") {
155
- const numberRules = await inquirer.prompt([
156
- {
157
- type: "input",
158
- name: "min",
159
- message: "Minimum value (press Enter to skip):",
160
- validate: (input) => !input || !isNaN(parseFloat(input)) || "Must be a number",
161
- },
162
- {
163
- type: "input",
164
- name: "max",
165
- message: "Maximum value (press Enter to skip):",
166
- validate: (input) => !input || !isNaN(parseFloat(input)) || "Must be a number",
167
- },
168
- ]);
169
- if (numberRules.min) {
170
- field.rules.push({
171
- type: "min",
172
- value: parseFloat(numberRules.min),
173
- });
174
- }
175
- if (numberRules.max) {
176
- field.rules.push({
177
- type: "max",
178
- value: parseFloat(numberRules.max),
179
- });
180
- }
181
- }
182
- config.fields.push(field);
183
- gray(` ✓ Added field: ${field.name} (${field.type})`);
115
+ });
116
+ gray(` ✓ Added field: ${fieldName} (${fieldConfig.type})`);
184
117
  }
185
- if (config.fields.length > 0) {
186
- const { addAsync } = await inquirer.prompt([
187
- {
188
- type: "confirm",
189
- name: "addAsync",
190
- message: "Add async validators (e.g., unique email)?",
191
- default: false,
192
- },
193
- ]);
194
- config.addAsyncValidators = addAsync;
118
+ if (fields.length === 0 && needsBody) {
119
+ warning("No fields defined. Adding default 'name' field.");
120
+ fields.push({
121
+ name: "name",
122
+ type: "string",
123
+ required: true,
124
+ rules: [],
125
+ });
195
126
  }
196
127
  }
197
128
  const spinner = ora("Generating endpoint files...").start();
198
129
  try {
199
- const packageJsonPath = path.join(process.cwd(), "package.json");
200
- let database;
201
- try {
202
- const packageJson = JSON.parse(await import("fs").then((fs) => fs.promises.readFile(packageJsonPath, "utf-8")));
203
- if (packageJson.dependencies?.pg)
204
- database = "postgresql";
205
- else if (packageJson.dependencies?.mysql2)
206
- database = "mysql";
207
- else if (packageJson.dependencies?.mongodb)
208
- database = "mongodb";
209
- }
210
- catch (err) {
211
- }
212
- const files = await codeGenerationService.generateEndpoint(config, process.cwd(), database);
130
+ await generateEndpointFiles(name, selectedMethods, fields);
213
131
  spinner.succeed("Endpoint files generated");
214
132
  success(`\n✨ Endpoint "${name}" created successfully!\n`);
215
133
  info("Generated files:");
@@ -218,15 +136,242 @@ export async function addEndpointCommand(name, options = {}) {
218
136
  gray(` src/api/${name.toLowerCase()}/${name.toLowerCase()}.handler.ts`);
219
137
  gray(` src/api/${name.toLowerCase()}/${name.toLowerCase()}.routes.ts`);
220
138
  gray(` Updated: src/api/routes.ts\n`);
221
- gray(` Updated: src/api/routes.ts\n`);
222
- info("Test your endpoint:");
223
- gray(` ${config.method} ${config.path}\n`);
139
+ info("Generated endpoints:");
140
+ selectedMethods.forEach((method) => {
141
+ if (method === "GET") {
142
+ gray(` GET /api/${name.toLowerCase()} - List all`);
143
+ gray(` GET /api/${name.toLowerCase()}/:id - Get by ID`);
144
+ }
145
+ else if (method === "POST") {
146
+ gray(` POST /api/${name.toLowerCase()} - Create`);
147
+ }
148
+ else if (method === "PUT" || method === "PATCH") {
149
+ gray(` ${method.padEnd(6)} /api/${name.toLowerCase()}/:id - Update`);
150
+ }
151
+ else if (method === "DELETE") {
152
+ gray(` DELETE /api/${name.toLowerCase()}/:id - Delete`);
153
+ }
154
+ });
155
+ console.log();
224
156
  await autoRegenerateDocs(process.cwd());
225
157
  }
226
158
  catch (err) {
227
- error("Failed to add endpoint");
159
+ spinner.fail("Failed to generate endpoint");
160
+ error(err instanceof Error ? err.message : "Unknown error");
228
161
  console.error(err);
229
162
  process.exit(1);
230
163
  }
231
164
  }
165
+ async function generateEndpointFiles(name, methods, fields) {
166
+ const basePath = path.join(process.cwd(), "src", "api", name.toLowerCase());
167
+ await ensureDir(basePath);
168
+ const pascalName = toPascalCase(name);
169
+ const camelName = toCamelCase(name);
170
+ const lowerName = name.toLowerCase();
171
+ await writeFile(path.join(basePath, `${lowerName}.validator.ts`), generateValidator(pascalName, camelName, methods, fields));
172
+ await writeFile(path.join(basePath, `${lowerName}.controller.ts`), generateController(pascalName, camelName, methods, fields));
173
+ await writeFile(path.join(basePath, `${lowerName}.handler.ts`), generateHandler(pascalName, camelName, lowerName, methods));
174
+ await writeFile(path.join(basePath, `${lowerName}.routes.ts`), generateRoutes(pascalName, camelName, lowerName, methods));
175
+ await updateMainRouter(name);
176
+ }
177
+ function generateValidator(pascalName, camelName, methods, fields) {
178
+ const lines = [
179
+ "import { k, kataxInfer } from 'katax-core';",
180
+ "import type { ValidationResult } from '../../shared/api.utils.js';",
181
+ "",
182
+ "// ==================== SCHEMAS ====================",
183
+ "",
184
+ ];
185
+ if (methods.some((m) => ["GET", "PUT", "PATCH", "DELETE"].includes(m))) {
186
+ lines.push("/**", ` * Schema for ${camelName} ID params`, " */", `export const ${camelName}IdSchema = k.object({`, " id: k.string().minLength(1)", "});", "", `export type ${pascalName}IdParams = kataxInfer<typeof ${camelName}IdSchema>;`, "");
187
+ }
188
+ if (methods.includes("GET")) {
189
+ lines.push("/**", ` * Schema for ${camelName} query params (list)`, " */", `export const ${camelName}QuerySchema = k.object({`, " page: k.number().optional(),", " limit: k.number().optional(),", " search: k.string().optional()", "});", "", `export type ${pascalName}Query = kataxInfer<typeof ${camelName}QuerySchema>;`, "");
190
+ }
191
+ if (methods.includes("POST")) {
192
+ lines.push("/**", ` * Schema for creating ${camelName}`, " */", `export const create${pascalName}Schema = k.object({`);
193
+ fields.forEach((field, i) => {
194
+ let schema = field.type === "email" ? "k.string().email()" : `k.${field.type}()`;
195
+ if (!field.required)
196
+ schema += ".optional()";
197
+ lines.push(` ${field.name}: ${schema}${i < fields.length - 1 ? "," : ""}`);
198
+ });
199
+ lines.push("});", "", `export type Create${pascalName}Data = kataxInfer<typeof create${pascalName}Schema>;`, "");
200
+ }
201
+ if (methods.some((m) => ["PUT", "PATCH"].includes(m))) {
202
+ lines.push("/**", ` * Schema for updating ${camelName}`, " */", `export const update${pascalName}Schema = k.object({`);
203
+ fields.forEach((field, i) => {
204
+ const schema = field.type === "email" ? "k.string().email().optional()" : `k.${field.type}().optional()`;
205
+ lines.push(` ${field.name}: ${schema}${i < fields.length - 1 ? "," : ""}`);
206
+ });
207
+ lines.push("});", "", `export type Update${pascalName}Data = kataxInfer<typeof update${pascalName}Schema>;`, "");
208
+ }
209
+ lines.push("// ==================== VALIDATORS ====================", "");
210
+ if (methods.some((m) => ["GET", "PUT", "PATCH", "DELETE"].includes(m))) {
211
+ lines.push(`export async function validate${pascalName}Id(data: unknown): Promise<ValidationResult<${pascalName}IdParams>> {`, ` const result = ${camelName}IdSchema.safeParse(data);`, " if (!result.success) {", " return {", " isValid: false,", " errors: result.issues.map(i => ({ field: i.path.join('.'), message: i.message }))", " };", " }", " return { isValid: true, data: result.data };", "}", "");
212
+ }
213
+ if (methods.includes("GET")) {
214
+ lines.push(`export async function validate${pascalName}Query(data: unknown): Promise<ValidationResult<${pascalName}Query>> {`, ` const result = ${camelName}QuerySchema.safeParse(data);`, " if (!result.success) {", " return {", " isValid: false,", " errors: result.issues.map(i => ({ field: i.path.join('.'), message: i.message }))", " };", " }", " return { isValid: true, data: result.data };", "}", "");
215
+ }
216
+ if (methods.includes("POST")) {
217
+ lines.push(`export async function validate${pascalName}Create(data: unknown): Promise<ValidationResult<Create${pascalName}Data>> {`, ` const result = create${pascalName}Schema.safeParse(data);`, " if (!result.success) {", " return {", " isValid: false,", " errors: result.issues.map(i => ({ field: i.path.join('.'), message: i.message }))", " };", " }", " return { isValid: true, data: result.data };", "}", "");
218
+ }
219
+ if (methods.some((m) => ["PUT", "PATCH"].includes(m))) {
220
+ lines.push(`export async function validate${pascalName}Update(data: unknown): Promise<ValidationResult<Update${pascalName}Data>> {`, ` const result = update${pascalName}Schema.safeParse(data);`, " if (!result.success) {", " return {", " isValid: false,", " errors: result.issues.map(i => ({ field: i.path.join('.'), message: i.message }))", " };", " }", " return { isValid: true, data: result.data };", "}", "");
221
+ }
222
+ return lines.join("\n");
223
+ }
224
+ function generateController(pascalName, camelName, methods, fields) {
225
+ const lines = [
226
+ "import { ControllerResult, createSuccessResult, createErrorResult } from '../../shared/api.utils.js';",
227
+ "import { logger } from '../../shared/logger.utils.js';",
228
+ ];
229
+ const types = [];
230
+ if (methods.includes("GET"))
231
+ types.push(`${pascalName}Query`, `${pascalName}IdParams`);
232
+ if (methods.includes("POST"))
233
+ types.push(`Create${pascalName}Data`);
234
+ if (methods.some((m) => ["PUT", "PATCH"].includes(m))) {
235
+ types.push(`Update${pascalName}Data`);
236
+ if (!types.includes(`${pascalName}IdParams`))
237
+ types.push(`${pascalName}IdParams`);
238
+ }
239
+ if (methods.includes("DELETE") && !types.includes(`${pascalName}IdParams`)) {
240
+ types.push(`${pascalName}IdParams`);
241
+ }
242
+ if (types.length > 0) {
243
+ lines.push(`import { ${types.join(", ")} } from './${camelName}.validator.js';`);
244
+ }
245
+ lines.push("", "// ==================== CONTROLLERS ====================", "");
246
+ if (methods.includes("GET")) {
247
+ lines.push("/**", ` * List all ${camelName}s`, " */", `export async function list${pascalName}s(query: ${pascalName}Query): Promise<ControllerResult<any[]>> {`, " try {", ` logger.debug({ query }, 'Listing ${camelName}s');`, "", " // TODO: Implement database query", ` const mock${pascalName}s = [`, ` { id: '1', ${fields.length > 0 ? `${fields[0].name}: 'Sample 1',` : ""} createdAt: new Date().toISOString() },`, ` { id: '2', ${fields.length > 0 ? `${fields[0].name}: 'Sample 2',` : ""} createdAt: new Date().toISOString() }`, " ];", "", ` return createSuccessResult('${pascalName}s retrieved', mock${pascalName}s);`, " } catch (error) {", ` logger.error({ err: error }, 'Error listing ${camelName}s');`, ` return createErrorResult('Failed to list ${camelName}s', error instanceof Error ? error.message : 'Unknown error', 500);`, " }", "}", "");
248
+ lines.push("/**", ` * Get ${camelName} by ID`, " */", `export async function get${pascalName}(params: ${pascalName}IdParams): Promise<ControllerResult<any>> {`, " try {", ` logger.debug({ id: params.id }, 'Getting ${camelName}');`, "", " // TODO: Implement database query", ` const mock${pascalName} = { id: params.id, ${fields.length > 0 ? `${fields[0].name}: 'Sample',` : ""} createdAt: new Date().toISOString() };`, "", ` return createSuccessResult('${pascalName} retrieved', mock${pascalName});`, " } catch (error) {", ` logger.error({ err: error }, 'Error getting ${camelName}');`, ` return createErrorResult('Failed to get ${camelName}', error instanceof Error ? error.message : 'Unknown error', 500);`, " }", "}", "");
249
+ }
250
+ if (methods.includes("POST")) {
251
+ lines.push("/**", ` * Create ${camelName}`, " */", `export async function create${pascalName}(data: Create${pascalName}Data): Promise<ControllerResult<any>> {`, " try {", ` logger.debug({ data }, 'Creating ${camelName}');`, "", " // TODO: Implement database insertion", ` const new${pascalName} = { id: Math.random().toString(36).substr(2, 9), ...data, createdAt: new Date().toISOString() };`, "", ` return createSuccessResult('${pascalName} created', new${pascalName}, undefined, 201);`, " } catch (error) {", ` logger.error({ err: error }, 'Error creating ${camelName}');`, ` return createErrorResult('Failed to create ${camelName}', error instanceof Error ? error.message : 'Unknown error', 500);`, " }", "}", "");
252
+ }
253
+ if (methods.some((m) => ["PUT", "PATCH"].includes(m))) {
254
+ lines.push("/**", ` * Update ${camelName}`, " */", `export async function update${pascalName}(params: ${pascalName}IdParams, data: Update${pascalName}Data): Promise<ControllerResult<any>> {`, " try {", ` logger.debug({ id: params.id, data }, 'Updating ${camelName}');`, "", " // TODO: Implement database update", ` const updated${pascalName} = { id: params.id, ...data, updatedAt: new Date().toISOString() };`, "", ` return createSuccessResult('${pascalName} updated', updated${pascalName});`, " } catch (error) {", ` logger.error({ err: error }, 'Error updating ${camelName}');`, ` return createErrorResult('Failed to update ${camelName}', error instanceof Error ? error.message : 'Unknown error', 500);`, " }", "}", "");
255
+ }
256
+ if (methods.includes("DELETE")) {
257
+ lines.push("/**", ` * Delete ${camelName}`, " */", `export async function delete${pascalName}(params: ${pascalName}IdParams): Promise<ControllerResult<void>> {`, " try {", ` logger.debug({ id: params.id }, 'Deleting ${camelName}');`, "", " // TODO: Implement database deletion", "", ` return createSuccessResult('${pascalName} deleted');`, " } catch (error) {", ` logger.error({ err: error }, 'Error deleting ${camelName}');`, ` return createErrorResult('Failed to delete ${camelName}', error instanceof Error ? error.message : 'Unknown error', 500);`, " }", "}", "");
258
+ }
259
+ return lines.join("\n");
260
+ }
261
+ function generateHandler(pascalName, camelName, lowerName, methods) {
262
+ const lines = [
263
+ "import { Request, Response } from 'express';",
264
+ "import { sendResponse } from '../../shared/api.utils.js';",
265
+ ];
266
+ const controllerImports = [];
267
+ if (methods.includes("GET"))
268
+ controllerImports.push(`list${pascalName}s`, `get${pascalName}`);
269
+ if (methods.includes("POST"))
270
+ controllerImports.push(`create${pascalName}`);
271
+ if (methods.some((m) => ["PUT", "PATCH"].includes(m)))
272
+ controllerImports.push(`update${pascalName}`);
273
+ if (methods.includes("DELETE"))
274
+ controllerImports.push(`delete${pascalName}`);
275
+ lines.push(`import { ${controllerImports.join(", ")} } from './${lowerName}.controller.js';`);
276
+ const validatorImports = [];
277
+ if (methods.includes("GET"))
278
+ validatorImports.push(`validate${pascalName}Query`, `validate${pascalName}Id`);
279
+ if (methods.includes("POST"))
280
+ validatorImports.push(`validate${pascalName}Create`);
281
+ if (methods.some((m) => ["PUT", "PATCH"].includes(m))) {
282
+ validatorImports.push(`validate${pascalName}Update`);
283
+ if (!validatorImports.includes(`validate${pascalName}Id`))
284
+ validatorImports.push(`validate${pascalName}Id`);
285
+ }
286
+ if (methods.includes("DELETE") && !validatorImports.includes(`validate${pascalName}Id`)) {
287
+ validatorImports.push(`validate${pascalName}Id`);
288
+ }
289
+ lines.push(`import { ${validatorImports.join(", ")} } from './${lowerName}.validator.js';`);
290
+ lines.push("", "// ==================== HANDLERS ====================", "");
291
+ if (methods.includes("GET")) {
292
+ lines.push("/**", ` * Handler for GET /api/${lowerName}`, " */", `export async function list${pascalName}sHandler(req: Request, res: Response): Promise<void> {`, " await sendResponse(", " req,", " res,", ` () => validate${pascalName}Query(req.query),`, ` (validData) => list${pascalName}s(validData)`, " );", "}", "");
293
+ lines.push("/**", ` * Handler for GET /api/${lowerName}/:id`, " */", `export async function get${pascalName}Handler(req: Request, res: Response): Promise<void> {`, " await sendResponse(", " req,", " res,", ` () => validate${pascalName}Id(req.params),`, ` (validData) => get${pascalName}(validData)`, " );", "}", "");
294
+ }
295
+ if (methods.includes("POST")) {
296
+ lines.push("/**", ` * Handler for POST /api/${lowerName}`, " */", `export async function create${pascalName}Handler(req: Request, res: Response): Promise<void> {`, " await sendResponse(", " req,", " res,", ` () => validate${pascalName}Create(req.body),`, ` (validData) => create${pascalName}(validData)`, " );", "}", "");
297
+ }
298
+ if (methods.some((m) => ["PUT", "PATCH"].includes(m))) {
299
+ lines.push("/**", ` * Handler for PUT/PATCH /api/${lowerName}/:id`, " */", `export async function update${pascalName}Handler(req: Request, res: Response): Promise<void> {`, " // First validate params", ` const paramsResult = await validate${pascalName}Id(req.params);`, " if (!paramsResult.isValid) {", " res.status(400).json({", " success: false,", " message: 'Invalid params',", " errors: paramsResult.errors", " });", " return;", " }", "", " // Then validate body and execute", " await sendResponse(", " req,", " res,", ` () => validate${pascalName}Update(req.body),`, ` (validData) => update${pascalName}(paramsResult.data!, validData)`, " );", "}", "");
300
+ }
301
+ if (methods.includes("DELETE")) {
302
+ lines.push("/**", ` * Handler for DELETE /api/${lowerName}/:id`, " */", `export async function delete${pascalName}Handler(req: Request, res: Response): Promise<void> {`, " await sendResponse(", " req,", " res,", ` () => validate${pascalName}Id(req.params),`, ` (validData) => delete${pascalName}(validData)`, " );", "}", "");
303
+ }
304
+ return lines.join("\n");
305
+ }
306
+ function generateRoutes(pascalName, camelName, lowerName, methods) {
307
+ const lines = [
308
+ "import { Router } from 'express';",
309
+ ];
310
+ const handlerImports = [];
311
+ if (methods.includes("GET"))
312
+ handlerImports.push(`list${pascalName}sHandler`, `get${pascalName}Handler`);
313
+ if (methods.includes("POST"))
314
+ handlerImports.push(`create${pascalName}Handler`);
315
+ if (methods.some((m) => ["PUT", "PATCH"].includes(m)))
316
+ handlerImports.push(`update${pascalName}Handler`);
317
+ if (methods.includes("DELETE"))
318
+ handlerImports.push(`delete${pascalName}Handler`);
319
+ lines.push(`import { ${handlerImports.join(", ")} } from './${lowerName}.handler.js';`);
320
+ lines.push("", "const router = Router();", "", "// ==================== ROUTES ====================", "");
321
+ if (methods.includes("GET")) {
322
+ lines.push("/**", ` * @route GET /api/${lowerName}`, ` * @desc List all ${lowerName}s`, " */", `router.get('/', list${pascalName}sHandler);`, "", "/**", ` * @route GET /api/${lowerName}/:id`, ` * @desc Get ${lowerName} by ID`, " */", `router.get('/:id', get${pascalName}Handler);`, "");
323
+ }
324
+ if (methods.includes("POST")) {
325
+ lines.push("/**", ` * @route POST /api/${lowerName}`, ` * @desc Create new ${lowerName}`, " */", `router.post('/', create${pascalName}Handler);`, "");
326
+ }
327
+ if (methods.includes("PUT")) {
328
+ lines.push("/**", ` * @route PUT /api/${lowerName}/:id`, ` * @desc Update ${lowerName}`, " */", `router.put('/:id', update${pascalName}Handler);`, "");
329
+ }
330
+ if (methods.includes("PATCH")) {
331
+ lines.push("/**", ` * @route PATCH /api/${lowerName}/:id`, ` * @desc Partial update ${lowerName}`, " */", `router.patch('/:id', update${pascalName}Handler);`, "");
332
+ }
333
+ if (methods.includes("DELETE")) {
334
+ lines.push("/**", ` * @route DELETE /api/${lowerName}/:id`, ` * @desc Delete ${lowerName}`, " */", `router.delete('/:id', delete${pascalName}Handler);`, "");
335
+ }
336
+ lines.push("export default router;");
337
+ return lines.join("\n");
338
+ }
339
+ async function updateMainRouter(name) {
340
+ const routerPath = path.join(process.cwd(), "src", "api", "routes.ts");
341
+ const lowerName = name.toLowerCase();
342
+ try {
343
+ let content = await fs.readFile(routerPath, "utf-8");
344
+ const importLine = `import ${lowerName}Router from './${lowerName}/${lowerName}.routes.js';`;
345
+ if (!content.includes(importLine)) {
346
+ const importRegex = /^import\s+.+from\s+.+;$/gm;
347
+ let lastImportMatch = null;
348
+ let match;
349
+ while ((match = importRegex.exec(content)) !== null) {
350
+ lastImportMatch = match;
351
+ }
352
+ if (lastImportMatch) {
353
+ const insertPos = lastImportMatch.index + lastImportMatch[0].length;
354
+ content =
355
+ content.slice(0, insertPos) +
356
+ "\n" +
357
+ importLine +
358
+ content.slice(insertPos);
359
+ }
360
+ }
361
+ const useLine = `router.use('/${lowerName}', ${lowerName}Router);`;
362
+ if (!content.includes(useLine)) {
363
+ const exportIndex = content.indexOf("export default router");
364
+ if (exportIndex !== -1) {
365
+ content =
366
+ content.slice(0, exportIndex) +
367
+ useLine +
368
+ "\n\n" +
369
+ content.slice(exportIndex);
370
+ }
371
+ }
372
+ await fs.writeFile(routerPath, content, "utf-8");
373
+ }
374
+ catch (err) {
375
+ }
376
+ }
232
377
  //# sourceMappingURL=add-endpoint.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"add-endpoint.js","sourceRoot":"","sources":["../../src/commands/add-endpoint.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"add-endpoint.js","sourceRoot":"","sources":["../../src/commands/add-endpoint.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"generate-crud.d.ts","sourceRoot":"","sources":["../../src/commands/generate-crud.ts"],"names":[],"mappings":"AAcA,UAAU,mBAAmB;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,mBAAwB,iBAkHlC"}
1
+ {"version":3,"file":"generate-crud.d.ts","sourceRoot":"","sources":["../../src/commands/generate-crud.ts"],"names":[],"mappings":"AAkBA,UAAU,mBAAmB;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,mBAAwB,iBAkKlC"}