katax-cli 1.4.2 → 1.4.4

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.
Files changed (36) hide show
  1. package/README.md +28 -1
  2. package/dist/commands/add-endpoint.d.ts +29 -0
  3. package/dist/commands/add-endpoint.d.ts.map +1 -1
  4. package/dist/commands/add-endpoint.js +154 -51
  5. package/dist/commands/add-endpoint.js.map +1 -1
  6. package/dist/commands/generate-crud.d.ts +29 -0
  7. package/dist/commands/generate-crud.d.ts.map +1 -1
  8. package/dist/commands/generate-crud.js +157 -50
  9. package/dist/commands/generate-crud.js.map +1 -1
  10. package/dist/commands/generate-repository.d.ts +42 -0
  11. package/dist/commands/generate-repository.d.ts.map +1 -0
  12. package/dist/commands/generate-repository.js +451 -0
  13. package/dist/commands/generate-repository.js.map +1 -0
  14. package/dist/commands/init.d.ts +17 -0
  15. package/dist/commands/init.d.ts.map +1 -1
  16. package/dist/commands/init.js +456 -114
  17. package/dist/commands/init.js.map +1 -1
  18. package/dist/generators/validator-generator.d.ts.map +1 -1
  19. package/dist/generators/validator-generator.improved.d.ts +1 -1
  20. package/dist/generators/validator-generator.improved.js +55 -55
  21. package/dist/generators/validator-generator.improved.js.map +1 -1
  22. package/dist/generators/validator-generator.js +8 -31
  23. package/dist/generators/validator-generator.js.map +1 -1
  24. package/dist/index.js +11 -0
  25. package/dist/index.js.map +1 -1
  26. package/dist/services/project-structure-generator.js +1 -1
  27. package/dist/services/project-structure-generator.js.map +1 -1
  28. package/dist/templates/generators/auth-utils-template.d.ts.map +1 -1
  29. package/dist/templates/generators/auth-utils-template.js +3 -10
  30. package/dist/templates/generators/auth-utils-template.js.map +1 -1
  31. package/dist/templates/generators/stream-utils-template.d.ts.map +1 -1
  32. package/dist/templates/generators/stream-utils-template.js +4 -5
  33. package/dist/templates/generators/stream-utils-template.js.map +1 -1
  34. package/dist/types/index.d.ts +6 -1
  35. package/dist/types/index.d.ts.map +1 -1
  36. package/package.json +4 -2
@@ -5,7 +5,41 @@ import fs from "fs/promises";
5
5
  import { success, error, warning, gray, title, info } from "../utils/logger.js";
6
6
  import { fileExists, writeFile, ensureDir, toPascalCase, toCamelCase, } from "../utils/file-utils.js";
7
7
  import { autoRegenerateDocs } from "./generate-docs.js";
8
+ function getSrcRelativePrefix(resource) {
9
+ return "../".repeat(resource.segments.length + 1);
10
+ }
11
+ function getSharedImportPath(resource) {
12
+ return `${getSrcRelativePrefix(resource)}shared/api.utils.js`;
13
+ }
14
+ function getMiddlewareImportPath(resource) {
15
+ return `${getSrcRelativePrefix(resource)}middleware/rate-limit.middleware.js`;
16
+ }
17
+ function resolveResourceNaming(input) {
18
+ const segments = input
19
+ .split("/")
20
+ .map((segment) => segment.trim().toLowerCase())
21
+ .filter(Boolean);
22
+ if (segments.length === 0) {
23
+ throw new Error("Resource name is required");
24
+ }
25
+ const lowerName = segments[segments.length - 1];
26
+ const joinedForCase = segments.join("-");
27
+ const camelName = toCamelCase(joinedForCase);
28
+ const pascalName = toPascalCase(joinedForCase);
29
+ const routerIdentifier = `${camelName}Router`;
30
+ return {
31
+ segments,
32
+ basePath: path.join(process.cwd(), "src", "api", ...segments),
33
+ lowerName,
34
+ camelName,
35
+ pascalName,
36
+ routePath: segments.join("/"),
37
+ importPath: `./${segments.join("/")}/${lowerName}.routes.js`,
38
+ routerIdentifier,
39
+ };
40
+ }
8
41
  export async function generateCrudCommand(resourceName, options = {}) {
42
+ const resource = resolveResourceNaming(resourceName);
9
43
  title(`šŸ”§ Generate CRUD: ${resourceName}`);
10
44
  if (!fileExists(path.join(process.cwd(), "package.json"))) {
11
45
  error("Not in a project directory!");
@@ -56,6 +90,28 @@ export async function generateCrudCommand(resourceName, options = {}) {
56
90
  default: options.auth !== false,
57
91
  },
58
92
  ]);
93
+ const { addLimiter } = await inquirer.prompt([
94
+ {
95
+ type: "confirm",
96
+ name: "addLimiter",
97
+ message: "Add rate limiter to generated routes?",
98
+ default: options.limiter ?? false,
99
+ },
100
+ ]);
101
+ if (addLimiter) {
102
+ const packageJsonPath = path.join(process.cwd(), "package.json");
103
+ const packageJson = JSON.parse(await fs.readFile(packageJsonPath, "utf-8"));
104
+ const hasRateLimit = packageJson.dependencies?.["express-rate-limit"] ||
105
+ packageJson.devDependencies?.["express-rate-limit"];
106
+ if (!hasRateLimit) {
107
+ const installSpinner = ora("Installing express-rate-limit...").start();
108
+ const { execa } = await import("execa");
109
+ await execa("npm", ["install", "express-rate-limit"], {
110
+ cwd: process.cwd(),
111
+ });
112
+ installSpinner.succeed("express-rate-limit installed");
113
+ }
114
+ }
59
115
  info("\nDefine fields for the resource:");
60
116
  const fields = [];
61
117
  let addingFields = true;
@@ -110,29 +166,29 @@ export async function generateCrudCommand(resourceName, options = {}) {
110
166
  }
111
167
  const spinner = ora("Generating CRUD endpoints...").start();
112
168
  try {
113
- await generateCRUDFiles(resourceName, selectedMethods, fields, addAuth);
169
+ await generateCRUDFiles(resource, selectedMethods, fields, addAuth, addLimiter);
114
170
  spinner.succeed("CRUD endpoints generated");
115
171
  success(`\n✨ CRUD for "${resourceName}" created successfully!\n`);
116
172
  info("Generated files:");
117
- gray(` src/api/${resourceName.toLowerCase()}/${resourceName.toLowerCase()}.validator.ts`);
118
- gray(` src/api/${resourceName.toLowerCase()}/${resourceName.toLowerCase()}.controller.ts`);
119
- gray(` src/api/${resourceName.toLowerCase()}/${resourceName.toLowerCase()}.handler.ts`);
120
- gray(` src/api/${resourceName.toLowerCase()}/${resourceName.toLowerCase()}.routes.ts`);
173
+ gray(` src/api/${resource.routePath}/${resource.lowerName}.validator.ts`);
174
+ gray(` src/api/${resource.routePath}/${resource.lowerName}.controller.ts`);
175
+ gray(` src/api/${resource.routePath}/${resource.lowerName}.handler.ts`);
176
+ gray(` src/api/${resource.routePath}/${resource.lowerName}.routes.ts`);
121
177
  gray(` Updated: src/api/routes.ts\n`);
122
178
  info("Generated endpoints:");
123
179
  selectedMethods.forEach((method) => {
124
180
  if (method === "GET") {
125
- gray(` GET /api/${resourceName.toLowerCase()} - List all`);
126
- gray(` GET /api/${resourceName.toLowerCase()}/:id - Get by ID`);
181
+ gray(` GET /api/${resource.routePath} - List all`);
182
+ gray(` GET /api/${resource.routePath}/:id - Get by ID`);
127
183
  }
128
184
  else if (method === "POST") {
129
- gray(` POST /api/${resourceName.toLowerCase()} - Create`);
185
+ gray(` POST /api/${resource.routePath} - Create`);
130
186
  }
131
187
  else if (method === "PUT" || method === "PATCH") {
132
- gray(` ${method.padEnd(6)} /api/${resourceName.toLowerCase()}/:id - Update`);
188
+ gray(` ${method.padEnd(6)} /api/${resource.routePath}/:id - Update`);
133
189
  }
134
190
  else if (method === "DELETE") {
135
- gray(` DELETE /api/${resourceName.toLowerCase()}/:id - Delete`);
191
+ gray(` DELETE /api/${resource.routePath}/:id - Delete`);
136
192
  }
137
193
  });
138
194
  console.log();
@@ -148,22 +204,25 @@ export async function generateCrudCommand(resourceName, options = {}) {
148
204
  process.exit(1);
149
205
  }
150
206
  }
151
- async function generateCRUDFiles(name, methods, fields, addAuth) {
152
- const basePath = path.join(process.cwd(), "src", "api", name.toLowerCase());
207
+ async function generateCRUDFiles(resource, methods, fields, addAuth, addLimiter) {
208
+ const basePath = resource.basePath;
153
209
  await ensureDir(basePath);
154
- const pascalName = toPascalCase(name);
155
- const camelName = toCamelCase(name);
156
- const lowerName = name.toLowerCase();
157
- await writeFile(path.join(basePath, `${lowerName}.validator.ts`), generateValidator(pascalName, camelName, methods, fields));
158
- await writeFile(path.join(basePath, `${lowerName}.controller.ts`), generateController(pascalName, camelName, methods, fields));
159
- await writeFile(path.join(basePath, `${lowerName}.handler.ts`), generateHandler(pascalName, camelName, lowerName, methods));
160
- await writeFile(path.join(basePath, `${lowerName}.routes.ts`), generateRoutes(pascalName, camelName, lowerName, methods, addAuth));
161
- await updateMainRouter(name);
210
+ const pascalName = resource.pascalName;
211
+ const camelName = resource.camelName;
212
+ const lowerName = resource.lowerName;
213
+ await writeFile(path.join(basePath, `${lowerName}.validator.ts`), generateValidator(pascalName, camelName, methods, fields, resource));
214
+ await writeFile(path.join(basePath, `${lowerName}.controller.ts`), generateController(pascalName, camelName, lowerName, methods, fields, resource));
215
+ await writeFile(path.join(basePath, `${lowerName}.handler.ts`), generateHandler(pascalName, camelName, lowerName, methods, resource));
216
+ await writeFile(path.join(basePath, `${lowerName}.routes.ts`), generateRoutes(pascalName, camelName, lowerName, resource.routePath, methods, addAuth, addLimiter, resource));
217
+ if (addLimiter) {
218
+ await ensureRateLimitMiddlewareFile();
219
+ }
220
+ await updateMainRouter(resource);
162
221
  }
163
- function generateValidator(pascalName, camelName, methods, fields) {
222
+ function generateValidator(pascalName, camelName, methods, fields, resource) {
164
223
  const lines = [
165
224
  "import { k, kataxInfer } from 'katax-core';",
166
- "import { validateSchema, ValidationResult } from '../../shared/api.utils.js';",
225
+ `import { validateSchema, ValidationResult } from '${getSharedImportPath(resource)}';`,
167
226
  "",
168
227
  "// ==================== SCHEMAS ====================",
169
228
  "",
@@ -187,7 +246,9 @@ function generateValidator(pascalName, camelName, methods, fields) {
187
246
  if (methods.some((m) => ["PUT", "PATCH"].includes(m))) {
188
247
  lines.push("/**", ` * Schema for updating ${camelName}`, " */", `export const update${pascalName}Schema = k.object({`);
189
248
  fields.forEach((field, i) => {
190
- const schema = field.type === "email" ? "k.string().email().optional()" : `k.${field.type}().optional()`;
249
+ const schema = field.type === "email"
250
+ ? "k.string().email().optional()"
251
+ : `k.${field.type}().optional()`;
191
252
  lines.push(` ${field.name}: ${schema}${i < fields.length - 1 ? "," : ""}`);
192
253
  });
193
254
  lines.push("});", "", `export type Update${pascalName}Data = kataxInfer<typeof update${pascalName}Schema>;`, "");
@@ -207,10 +268,9 @@ function generateValidator(pascalName, camelName, methods, fields) {
207
268
  }
208
269
  return lines.join("\n");
209
270
  }
210
- function generateController(pascalName, camelName, methods, fields) {
271
+ function generateController(pascalName, camelName, lowerName, methods, fields, resource) {
211
272
  const lines = [
212
- "import { ControllerResult, createSuccessResult, createErrorResult } from '../../shared/api.utils.js';",
213
- "import { logger } from '../../shared/logger.utils.js';",
273
+ `import { ControllerResult, createResponse } from '${getSharedImportPath(resource)}';`,
214
274
  ];
215
275
  const types = [];
216
276
  if (methods.includes("GET"))
@@ -226,28 +286,28 @@ function generateController(pascalName, camelName, methods, fields) {
226
286
  types.push(`${pascalName}IdParams`);
227
287
  }
228
288
  if (types.length > 0) {
229
- lines.push(`import { ${types.join(", ")} } from './${camelName}.validator.js';`);
289
+ lines.push(`import { ${types.join(", ")} } from './${lowerName}.validator.js';`);
230
290
  }
231
291
  lines.push("", "// ==================== CONTROLLERS ====================", "");
232
292
  if (methods.includes("GET")) {
233
- lines.push("/**", ` * List all ${camelName}s`, " */", `export async function list${pascalName}s(query: ${pascalName}Query): Promise<ControllerResult<any[]>> {`, " try {", ` logger.debug({ message: 'Listing ${camelName}s', query });`, "", " // 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({ message: 'Error listing ${camelName}s', err: error });`, ` return createErrorResult('Failed to list ${camelName}s', error instanceof Error ? error.message : 'Unknown error', 500);`, " }", "}", "");
234
- lines.push("/**", ` * Get ${camelName} by ID`, " */", `export async function get${pascalName}(params: ${pascalName}IdParams): Promise<ControllerResult<any>> {`, " try {", ` logger.debug({ message: 'Getting ${camelName}', id: params.id });`, "", " // 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({ message: 'Error getting ${camelName}', err: error });`, ` return createErrorResult('Failed to get ${camelName}', error instanceof Error ? error.message : 'Unknown error', 500);`, " }", "}", "");
293
+ lines.push("/**", ` * List all ${camelName}s`, " */", `export async function list${pascalName}s(query: ${pascalName}Query): Promise<ControllerResult<any[]>> {`, " try {", " // 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 createResponse.success('${pascalName}s retrieved', mock${pascalName}s);`, " } catch (error) {", ` return createResponse.error('Failed to list ${camelName}s', error instanceof Error ? error.message : 'Unknown error', 500);`, " }", "}", "");
294
+ lines.push("/**", ` * Get ${camelName} by ID`, " */", `export async function get${pascalName}(params: ${pascalName}IdParams): Promise<ControllerResult<any>> {`, " try {", " // TODO: Implement database query", ` const mock${pascalName} = { id: params.id, ${fields.length > 0 ? `${fields[0].name}: 'Sample',` : ""} createdAt: new Date().toISOString() };`, "", ` return createResponse.success('${pascalName} retrieved', mock${pascalName});`, " } catch (error) {", ` return createResponse.error('Failed to get ${camelName}', error instanceof Error ? error.message : 'Unknown error', 500);`, " }", "}", "");
235
295
  }
236
296
  if (methods.includes("POST")) {
237
- lines.push("/**", ` * Create ${camelName}`, " */", `export async function create${pascalName}(data: Create${pascalName}Data): Promise<ControllerResult<any>> {`, " try {", ` logger.debug({ message: 'Creating ${camelName}', data });`, "", " // 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({ message: 'Error creating ${camelName}', err: error });`, ` return createErrorResult('Failed to create ${camelName}', error instanceof Error ? error.message : 'Unknown error', 500);`, " }", "}", "");
297
+ lines.push("/**", ` * Create ${camelName}`, " */", `export async function create${pascalName}(data: Create${pascalName}Data): Promise<ControllerResult<any>> {`, " try {", " // TODO: Implement database insertion", ` const new${pascalName} = { id: Math.random().toString(36).slice(2, 11), ...data, createdAt: new Date().toISOString() };`, "", ` return createResponse.success('${pascalName} created', new${pascalName}, 201);`, " } catch (error) {", ` return createResponse.error('Failed to create ${camelName}', error instanceof Error ? error.message : 'Unknown error', 500);`, " }", "}", "");
238
298
  }
239
299
  if (methods.some((m) => ["PUT", "PATCH"].includes(m))) {
240
- lines.push("/**", ` * Update ${camelName}`, " */", `export async function update${pascalName}(params: ${pascalName}IdParams, data: Update${pascalName}Data): Promise<ControllerResult<any>> {`, " try {", ` logger.debug({ message: 'Updating ${camelName}', id: params.id, data });`, "", " // 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({ message: 'Error updating ${camelName}', err: error });`, ` return createErrorResult('Failed to update ${camelName}', error instanceof Error ? error.message : 'Unknown error', 500);`, " }", "}", "");
300
+ lines.push("/**", ` * Update ${camelName}`, " */", `export async function update${pascalName}(params: ${pascalName}IdParams, data: Update${pascalName}Data): Promise<ControllerResult<any>> {`, " try {", " // TODO: Implement database update", ` const updated${pascalName} = { id: params.id, ...data, updatedAt: new Date().toISOString() };`, "", ` return createResponse.success('${pascalName} updated', updated${pascalName});`, " } catch (error) {", ` return createResponse.error('Failed to update ${camelName}', error instanceof Error ? error.message : 'Unknown error', 500);`, " }", "}", "");
241
301
  }
242
302
  if (methods.includes("DELETE")) {
243
- lines.push("/**", ` * Delete ${camelName}`, " */", `export async function delete${pascalName}(params: ${pascalName}IdParams): Promise<ControllerResult<void>> {`, " try {", ` logger.debug({ message: 'Deleting ${camelName}', id: params.id });`, "", " // TODO: Implement database deletion", "", ` return createSuccessResult('${pascalName} deleted');`, " } catch (error) {", ` logger.error({ message: 'Error deleting ${camelName}', err: error });`, ` return createErrorResult('Failed to delete ${camelName}', error instanceof Error ? error.message : 'Unknown error', 500);`, " }", "}", "");
303
+ lines.push("/**", ` * Delete ${camelName}`, " */", `export async function delete${pascalName}(params: ${pascalName}IdParams): Promise<ControllerResult<void>> {`, " try {", " // TODO: Implement database deletion", "", ` return createResponse.success('${pascalName} deleted');`, " } catch (error) {", ` return createResponse.error('Failed to delete ${camelName}', error instanceof Error ? error.message : 'Unknown error', 500);`, " }", "}", "");
244
304
  }
245
305
  return lines.join("\n");
246
306
  }
247
- function generateHandler(pascalName, camelName, lowerName, methods) {
307
+ function generateHandler(pascalName, camelName, lowerName, methods, resource) {
248
308
  const lines = [
249
309
  "import { Request, Response } from 'express';",
250
- "import { sendResponse } from '../../shared/api.utils.js';",
310
+ `import { sendResponse } from '${getSharedImportPath(resource)}';`,
251
311
  ];
252
312
  const controllerImports = [];
253
313
  if (methods.includes("GET"))
@@ -269,7 +329,8 @@ function generateHandler(pascalName, camelName, lowerName, methods) {
269
329
  if (!validatorImports.includes(`validate${pascalName}Id`))
270
330
  validatorImports.push(`validate${pascalName}Id`);
271
331
  }
272
- if (methods.includes("DELETE") && !validatorImports.includes(`validate${pascalName}Id`)) {
332
+ if (methods.includes("DELETE") &&
333
+ !validatorImports.includes(`validate${pascalName}Id`)) {
273
334
  validatorImports.push(`validate${pascalName}Id`);
274
335
  }
275
336
  lines.push(`import { ${validatorImports.join(", ")} } from './${lowerName}.validator.js';`);
@@ -282,17 +343,18 @@ function generateHandler(pascalName, camelName, lowerName, methods) {
282
343
  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)`, " );", "}", "");
283
344
  }
284
345
  if (methods.some((m) => ["PUT", "PATCH"].includes(m))) {
285
- 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)`, " );", "}", "");
346
+ 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(422).json({", " success: false,", " message: 'Validation failed',", " error: 'VALIDATION_ERROR',", " details: paramsResult.errors", " });", " return;", " }", "", " // Then validate body and execute", " await sendResponse(", " req,", " res,", ` () => validate${pascalName}Update(req.body),`, ` (validData) => update${pascalName}(paramsResult.data!, validData)`, " );", "}", "");
286
347
  }
287
348
  if (methods.includes("DELETE")) {
288
349
  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)`, " );", "}", "");
289
350
  }
290
351
  return lines.join("\n");
291
352
  }
292
- function generateRoutes(pascalName, camelName, lowerName, methods, addAuth) {
293
- const lines = [
294
- "import { Router } from 'express';",
295
- ];
353
+ function generateRoutes(pascalName, camelName, lowerName, routePath, methods, addAuth, addLimiter, resource) {
354
+ const lines = ["import { Router } from 'express';"];
355
+ if (addLimiter) {
356
+ lines.push(`import { createEndpointLimiter } from '${getMiddlewareImportPath(resource)}';`);
357
+ }
296
358
  const handlerImports = [];
297
359
  if (methods.includes("GET"))
298
360
  handlerImports.push(`list${pascalName}sHandler`, `get${pascalName}Handler`);
@@ -306,32 +368,68 @@ function generateRoutes(pascalName, camelName, lowerName, methods, addAuth) {
306
368
  if (addAuth) {
307
369
  lines.push("// import { requireAuth } from '../../middleware/auth.middleware.js';");
308
370
  }
309
- lines.push("", "const router = Router();", "", "// ==================== ROUTES ====================", "");
371
+ lines.push("", "const router = Router();", ...(addLimiter
372
+ ? [
373
+ "const endpointLimiter = createEndpointLimiter({ windowMs: 15 * 60 * 1000, max: 60 });",
374
+ ]
375
+ : []), "", "// ==================== ROUTES ====================", "");
310
376
  const authMiddleware = addAuth ? "/* requireAuth, */ " : "";
377
+ const limiterMiddleware = addLimiter ? "endpointLimiter, " : "";
378
+ const routeMiddleware = `${limiterMiddleware}${authMiddleware}`;
311
379
  if (methods.includes("GET")) {
312
- lines.push("/**", ` * @route GET /api/${lowerName}`, ` * @desc List all ${lowerName}s`, " */", `router.get('/', ${authMiddleware}list${pascalName}sHandler);`, "", "/**", ` * @route GET /api/${lowerName}/:id`, ` * @desc Get ${lowerName} by ID`, " */", `router.get('/:id', ${authMiddleware}get${pascalName}Handler);`, "");
380
+ lines.push("/**", ` * @route GET /api/${routePath}`, ` * @desc List all ${lowerName}s`, " */", `router.get('/', ${routeMiddleware}list${pascalName}sHandler);`, "", "/**", ` * @route GET /api/${routePath}/:id`, ` * @desc Get ${lowerName} by ID`, " */", `router.get('/:id', ${routeMiddleware}get${pascalName}Handler);`, "");
313
381
  }
314
382
  if (methods.includes("POST")) {
315
- lines.push("/**", ` * @route POST /api/${lowerName}`, ` * @desc Create new ${lowerName}`, " */", `router.post('/', ${authMiddleware}create${pascalName}Handler);`, "");
383
+ lines.push("/**", ` * @route POST /api/${routePath}`, ` * @desc Create new ${lowerName}`, " */", `router.post('/', ${routeMiddleware}create${pascalName}Handler);`, "");
316
384
  }
317
385
  if (methods.includes("PUT")) {
318
- lines.push("/**", ` * @route PUT /api/${lowerName}/:id`, ` * @desc Update ${lowerName}`, " */", `router.put('/:id', ${authMiddleware}update${pascalName}Handler);`, "");
386
+ lines.push("/**", ` * @route PUT /api/${routePath}/:id`, ` * @desc Update ${lowerName}`, " */", `router.put('/:id', ${routeMiddleware}update${pascalName}Handler);`, "");
319
387
  }
320
388
  if (methods.includes("PATCH")) {
321
- lines.push("/**", ` * @route PATCH /api/${lowerName}/:id`, ` * @desc Partial update ${lowerName}`, " */", `router.patch('/:id', ${authMiddleware}update${pascalName}Handler);`, "");
389
+ lines.push("/**", ` * @route PATCH /api/${routePath}/:id`, ` * @desc Partial update ${lowerName}`, " */", `router.patch('/:id', ${routeMiddleware}update${pascalName}Handler);`, "");
322
390
  }
323
391
  if (methods.includes("DELETE")) {
324
- lines.push("/**", ` * @route DELETE /api/${lowerName}/:id`, ` * @desc Delete ${lowerName}`, " */", `router.delete('/:id', ${authMiddleware}delete${pascalName}Handler);`, "");
392
+ lines.push("/**", ` * @route DELETE /api/${routePath}/:id`, ` * @desc Delete ${lowerName}`, " */", `router.delete('/:id', ${routeMiddleware}delete${pascalName}Handler);`, "");
325
393
  }
326
394
  lines.push("export default router;");
327
395
  return lines.join("\n");
328
396
  }
329
- async function updateMainRouter(name) {
397
+ async function ensureRateLimitMiddlewareFile() {
398
+ const middlewarePath = path.join(process.cwd(), "src", "middleware", "rate-limit.middleware.ts");
399
+ if (fileExists(middlewarePath)) {
400
+ return;
401
+ }
402
+ const middlewareContent = `import { rateLimit } from 'express-rate-limit';
403
+
404
+ export interface EndpointLimiterOptions {
405
+ windowMs?: number;
406
+ max?: number;
407
+ }
408
+
409
+ export function createEndpointLimiter(options: EndpointLimiterOptions = {}) {
410
+ const windowMs = options.windowMs ?? 15 * 60 * 1000;
411
+ const max = options.max ?? 60;
412
+
413
+ return rateLimit({
414
+ windowMs,
415
+ max,
416
+ standardHeaders: true,
417
+ legacyHeaders: false,
418
+ message: {
419
+ success: false,
420
+ message: 'Too many requests, please try again later.',
421
+ error: 'RATE_LIMIT_EXCEEDED'
422
+ }
423
+ });
424
+ }
425
+ `;
426
+ await writeFile(middlewarePath, middlewareContent);
427
+ }
428
+ async function updateMainRouter(resource) {
330
429
  const routerPath = path.join(process.cwd(), "src", "api", "routes.ts");
331
- const lowerName = name.toLowerCase();
332
430
  try {
333
431
  let content = await fs.readFile(routerPath, "utf-8");
334
- const importLine = `import ${lowerName}Router from './${lowerName}/${lowerName}.routes.js';`;
432
+ const importLine = `import ${resource.routerIdentifier} from '${resource.importPath}';`;
335
433
  if (!content.includes(importLine)) {
336
434
  const importRegex = /^import\s+.+from\s+.+;$/gm;
337
435
  let lastImportMatch = null;
@@ -348,7 +446,7 @@ async function updateMainRouter(name) {
348
446
  content.slice(insertPos);
349
447
  }
350
448
  }
351
- const useLine = `router.use('/${lowerName}', ${lowerName}Router);`;
449
+ const useLine = `router.use('/${resource.routePath}', ${resource.routerIdentifier});`;
352
450
  if (!content.includes(useLine)) {
353
451
  const exportIndex = content.indexOf("export default router");
354
452
  if (exportIndex !== -1) {
@@ -364,4 +462,13 @@ async function updateMainRouter(name) {
364
462
  catch (err) {
365
463
  }
366
464
  }
465
+ export const __crudTestUtils = {
466
+ resolveResourceNaming,
467
+ generateValidator,
468
+ generateController,
469
+ generateHandler,
470
+ generateRoutes,
471
+ getSharedImportPath,
472
+ getMiddlewareImportPath,
473
+ };
367
474
  //# sourceMappingURL=generate-crud.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generate-crud.js","sourceRoot":"","sources":["../../src/commands/generate-crud.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate-crud.js","sourceRoot":"","sources":["../../src/commands/generate-crud.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ type SupportedDatabase = "postgresql" | "mysql" | "mongodb";
2
+ type IdType = "string" | "number";
3
+ interface GenerateRepositoryOptions {
4
+ database?: SupportedDatabase;
5
+ table?: string;
6
+ collection?: string;
7
+ dbName?: string;
8
+ idType?: IdType;
9
+ }
10
+ interface ResourceNaming {
11
+ segments: string[];
12
+ basePath: string;
13
+ lowerName: string;
14
+ camelName: string;
15
+ pascalName: string;
16
+ relativePath: string;
17
+ }
18
+ declare function resolveResourceNaming(input: string): ResourceNaming;
19
+ declare function detectDatabaseFromPackageJson(pkg: Record<string, unknown>): SupportedDatabase | null;
20
+ declare function generateSqlRepositoryTemplate(config: {
21
+ pascalName: string;
22
+ idType: IdType;
23
+ tableName: string;
24
+ dbName: string;
25
+ isPostgres: boolean;
26
+ }): string;
27
+ declare function generateMongoRepositoryTemplate(config: {
28
+ pascalName: string;
29
+ idType: IdType;
30
+ collectionName: string;
31
+ dbName: string;
32
+ mongoDatabaseName: string;
33
+ }): string;
34
+ export declare function generateRepositoryCommand(name: string, options?: GenerateRepositoryOptions): Promise<void>;
35
+ export declare const __repositoryTestUtils: {
36
+ resolveResourceNaming: typeof resolveResourceNaming;
37
+ detectDatabaseFromPackageJson: typeof detectDatabaseFromPackageJson;
38
+ generateSqlRepositoryTemplate: typeof generateSqlRepositoryTemplate;
39
+ generateMongoRepositoryTemplate: typeof generateMongoRepositoryTemplate;
40
+ };
41
+ export {};
42
+ //# sourceMappingURL=generate-repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-repository.d.ts","sourceRoot":"","sources":["../../src/commands/generate-repository.ts"],"names":[],"mappings":"AAaA,KAAK,iBAAiB,GAAG,YAAY,GAAG,OAAO,GAAG,SAAS,CAAC;AAC5D,KAAK,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAElC,UAAU,yBAAyB;IACjC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,cAAc;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,iBAAS,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CAqB5D;AAED,iBAAS,6BAA6B,CACpC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,iBAAiB,GAAG,IAAI,CAY1B;AAED,iBAAS,6BAA6B,CAAC,MAAM,EAAE;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;CACrB,GAAG,MAAM,CAwLT;AAED,iBAAS,+BAA+B,CAAC,MAAM,EAAE;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,MAAM,CAAC;CAC3B,GAAG,MAAM,CAqHT;AAED,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,yBAA8B,iBAuIxC;AAED,eAAO,MAAM,qBAAqB;;;;;CAKjC,CAAC"}