katax-cli 1.4.3 → 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.
package/README.md CHANGED
@@ -117,6 +117,9 @@ Initialize a new Express API project.
117
117
 
118
118
  **Options:**
119
119
  - `-f, --force` - Overwrite existing directory
120
+ - `--pm <manager>` - Choose package manager (`pnpm` default, `npm` optional)
121
+ - `--ignore-scripts` - Install with lifecycle scripts disabled
122
+ - `--write-npmrc` - Write `.npmrc` with `ignore-scripts=true`
120
123
 
121
124
  **Example:**
122
125
  ```bash
@@ -148,6 +151,15 @@ Generate a complete CRUD resource.
148
151
  katax generate crud products
149
152
  ```
150
153
 
154
+ ### `katax generate repository <name>`
155
+
156
+ Generate a repository scaffold wired to `katax-service-manager` typed database access.
157
+
158
+ **Example:**
159
+ ```bash
160
+ katax generate repository products
161
+ ```
162
+
151
163
  ### `katax info`
152
164
 
153
165
  Show current project structure and routes.
@@ -357,7 +369,13 @@ Initialize a new Express API project.
357
369
 
358
370
  **Options:**
359
371
  - `-f, --force` - Overwrite existing directory
360
- katax init my-awesome-api
372
+ - `--pm <manager>` - Choose package manager (`pnpm` default, `npm` optional)
373
+ - `--ignore-scripts` - Install with lifecycle scripts disabled
374
+ - `--write-npmrc` - Write `.npmrc` with `ignore-scripts=true`
375
+
376
+ **Example:**
377
+ ```bash
378
+ katax init my-awesome-api --pm pnpm --ignore-scripts --write-npmrc
361
379
  ```
362
380
 
363
381
  ### `katax add endpoint <name>`
@@ -384,6 +402,15 @@ Generate a complete CRUD resource.
384
402
  katax generate crud products
385
403
  ```
386
404
 
405
+ ### `katax generate repository <name>`
406
+
407
+ Generate a repository scaffold wired to `katax-service-manager` typed database access.
408
+
409
+ **Example:**
410
+ ```bash
411
+ katax generate repository products
412
+ ```
413
+
387
414
  ### `katax info`
388
415
 
389
416
  Show current project structure and routes.
@@ -1,6 +1,35 @@
1
+ import { FieldConfig } from "../types/index.js";
2
+ type HttpMethod = "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
1
3
  interface EndpointOptions {
2
4
  methods?: string[];
5
+ limiter?: boolean;
3
6
  }
7
+ interface ResourceNaming {
8
+ segments: string[];
9
+ basePath: string;
10
+ lowerName: string;
11
+ camelName: string;
12
+ pascalName: string;
13
+ routePath: string;
14
+ importPath: string;
15
+ routerIdentifier: string;
16
+ }
17
+ declare function getSharedImportPath(resource: ResourceNaming): string;
18
+ declare function getMiddlewareImportPath(resource: ResourceNaming): string;
19
+ declare function resolveResourceNaming(input: string): ResourceNaming;
4
20
  export declare function addEndpointCommand(name: string, options?: EndpointOptions): Promise<void>;
21
+ declare function generateValidator(pascalName: string, camelName: string, methods: HttpMethod[], fields: FieldConfig[], resource: ResourceNaming): string;
22
+ declare function generateController(pascalName: string, camelName: string, lowerName: string, methods: HttpMethod[], fields: FieldConfig[], resource: ResourceNaming): string;
23
+ declare function generateHandler(pascalName: string, camelName: string, lowerName: string, methods: HttpMethod[], resource: ResourceNaming): string;
24
+ declare function generateRoutes(pascalName: string, camelName: string, lowerName: string, routePath: string, methods: HttpMethod[], addLimiter: boolean, resource: ResourceNaming): string;
25
+ export declare const __endpointTestUtils: {
26
+ resolveResourceNaming: typeof resolveResourceNaming;
27
+ generateValidator: typeof generateValidator;
28
+ generateController: typeof generateController;
29
+ generateHandler: typeof generateHandler;
30
+ generateRoutes: typeof generateRoutes;
31
+ getSharedImportPath: typeof getSharedImportPath;
32
+ getMiddlewareImportPath: typeof getMiddlewareImportPath;
33
+ };
5
34
  export {};
6
35
  //# 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":"AAkBA,UAAU,eAAe;IACvB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,eAAoB,iBAqL9B"}
1
+ {"version":3,"file":"add-endpoint.d.ts","sourceRoot":"","sources":["../../src/commands/add-endpoint.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,KAAK,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE9D,UAAU,eAAe;IACvB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;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,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAMD,iBAAS,mBAAmB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAE7D;AAED,iBAAS,uBAAuB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAEjE;AAED,iBAAS,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CA0B5D;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,eAAoB,iBA8M9B;AA2DD,iBAAS,iBAAiB,CACxB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,UAAU,EAAE,EACrB,MAAM,EAAE,WAAW,EAAE,EACrB,QAAQ,EAAE,cAAc,GACvB,MAAM,CAkIR;AAED,iBAAS,kBAAkB,CACzB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,UAAU,EAAE,EACrB,MAAM,EAAE,WAAW,EAAE,EACrB,QAAQ,EAAE,cAAc,GACvB,MAAM,CAoIR;AAED,iBAAS,eAAe,CACtB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,UAAU,EAAE,EACrB,QAAQ,EAAE,cAAc,GACvB,MAAM,CAoJR;AAED,iBAAS,cAAc,CACrB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,UAAU,EAAE,EACrB,UAAU,EAAE,OAAO,EACnB,QAAQ,EAAE,cAAc,GACvB,MAAM,CA0GR;AAwFD,eAAO,MAAM,mBAAmB;;;;;;;;CAQ/B,CAAC"}
@@ -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("Endpoint 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 addEndpointCommand(name, options = {}) {
42
+ const resource = resolveResourceNaming(name);
9
43
  title(`🎯 Add Endpoint: ${name}`);
10
44
  if (!fileExists(path.join(process.cwd(), "package.json"))) {
11
45
  error("Not in a project directory!");
@@ -70,6 +104,26 @@ export async function addEndpointCommand(name, options = {}) {
70
104
  ]);
71
105
  selectedMethods = methods;
72
106
  }
107
+ const { addLimiter } = await inquirer.prompt([
108
+ {
109
+ type: "confirm",
110
+ name: "addLimiter",
111
+ message: "Add rate limiter to generated routes?",
112
+ default: options.limiter ?? false,
113
+ },
114
+ ]);
115
+ if (addLimiter) {
116
+ const hasRateLimit = packageJson.dependencies?.["express-rate-limit"] ||
117
+ packageJson.devDependencies?.["express-rate-limit"];
118
+ if (!hasRateLimit) {
119
+ const spinner = ora("Installing express-rate-limit...").start();
120
+ const { execa } = await import("execa");
121
+ await execa("npm", ["install", "express-rate-limit"], {
122
+ cwd: process.cwd(),
123
+ });
124
+ spinner.succeed("express-rate-limit installed");
125
+ }
126
+ }
73
127
  let fields = [];
74
128
  const needsBody = selectedMethods.some((m) => ["POST", "PUT", "PATCH"].includes(m));
75
129
  if (needsBody) {
@@ -127,29 +181,29 @@ export async function addEndpointCommand(name, options = {}) {
127
181
  }
128
182
  const spinner = ora("Generating endpoint files...").start();
129
183
  try {
130
- await generateEndpointFiles(name, selectedMethods, fields);
184
+ await generateEndpointFiles(resource, selectedMethods, fields, addLimiter);
131
185
  spinner.succeed("Endpoint files generated");
132
186
  success(`\n✨ Endpoint "${name}" created successfully!\n`);
133
187
  info("Generated files:");
134
- gray(` src/api/${name.toLowerCase()}/${name.toLowerCase()}.validator.ts`);
135
- gray(` src/api/${name.toLowerCase()}/${name.toLowerCase()}.controller.ts`);
136
- gray(` src/api/${name.toLowerCase()}/${name.toLowerCase()}.handler.ts`);
137
- gray(` src/api/${name.toLowerCase()}/${name.toLowerCase()}.routes.ts`);
188
+ gray(` src/api/${resource.routePath}/${resource.lowerName}.validator.ts`);
189
+ gray(` src/api/${resource.routePath}/${resource.lowerName}.controller.ts`);
190
+ gray(` src/api/${resource.routePath}/${resource.lowerName}.handler.ts`);
191
+ gray(` src/api/${resource.routePath}/${resource.lowerName}.routes.ts`);
138
192
  gray(` Updated: src/api/routes.ts\n`);
139
193
  info("Generated endpoints:");
140
194
  selectedMethods.forEach((method) => {
141
195
  if (method === "GET") {
142
- gray(` GET /api/${name.toLowerCase()} - List all`);
143
- gray(` GET /api/${name.toLowerCase()}/:id - Get by ID`);
196
+ gray(` GET /api/${resource.routePath} - List all`);
197
+ gray(` GET /api/${resource.routePath}/:id - Get by ID`);
144
198
  }
145
199
  else if (method === "POST") {
146
- gray(` POST /api/${name.toLowerCase()} - Create`);
200
+ gray(` POST /api/${resource.routePath} - Create`);
147
201
  }
148
202
  else if (method === "PUT" || method === "PATCH") {
149
- gray(` ${method.padEnd(6)} /api/${name.toLowerCase()}/:id - Update`);
203
+ gray(` ${method.padEnd(6)} /api/${resource.routePath}/:id - Update`);
150
204
  }
151
205
  else if (method === "DELETE") {
152
- gray(` DELETE /api/${name.toLowerCase()}/:id - Delete`);
206
+ gray(` DELETE /api/${resource.routePath}/:id - Delete`);
153
207
  }
154
208
  });
155
209
  console.log();
@@ -162,22 +216,25 @@ export async function addEndpointCommand(name, options = {}) {
162
216
  process.exit(1);
163
217
  }
164
218
  }
165
- async function generateEndpointFiles(name, methods, fields) {
166
- const basePath = path.join(process.cwd(), "src", "api", name.toLowerCase());
219
+ async function generateEndpointFiles(resource, methods, fields, addLimiter) {
220
+ const basePath = resource.basePath;
167
221
  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);
222
+ const pascalName = resource.pascalName;
223
+ const camelName = resource.camelName;
224
+ const lowerName = resource.lowerName;
225
+ await writeFile(path.join(basePath, `${lowerName}.validator.ts`), generateValidator(pascalName, camelName, methods, fields, resource));
226
+ await writeFile(path.join(basePath, `${lowerName}.controller.ts`), generateController(pascalName, camelName, lowerName, methods, fields, resource));
227
+ await writeFile(path.join(basePath, `${lowerName}.handler.ts`), generateHandler(pascalName, camelName, lowerName, methods, resource));
228
+ await writeFile(path.join(basePath, `${lowerName}.routes.ts`), generateRoutes(pascalName, camelName, lowerName, resource.routePath, methods, addLimiter, resource));
229
+ if (addLimiter) {
230
+ await ensureRateLimitMiddlewareFile();
231
+ }
232
+ await updateMainRouter(resource);
176
233
  }
177
- function generateValidator(pascalName, camelName, methods, fields) {
234
+ function generateValidator(pascalName, camelName, methods, fields, resource) {
178
235
  const lines = [
179
236
  "import { k, kataxInfer } from 'katax-core';",
180
- "import { validateSchema, ValidationResult } from '../../shared/api.utils.js';",
237
+ `import { validateSchema, ValidationResult } from '${getSharedImportPath(resource)}';`,
181
238
  "",
182
239
  "// ==================== SCHEMAS ====================",
183
240
  "",
@@ -223,9 +280,9 @@ function generateValidator(pascalName, camelName, methods, fields) {
223
280
  }
224
281
  return lines.join("\n");
225
282
  }
226
- function generateController(pascalName, camelName, methods, fields) {
283
+ function generateController(pascalName, camelName, lowerName, methods, fields, resource) {
227
284
  const lines = [
228
- "import { ControllerResult, createSuccessResult, createErrorResult } from '../../shared/api.utils.js';",
285
+ `import { ControllerResult, createResponse } from '${getSharedImportPath(resource)}';`,
229
286
  ];
230
287
  const types = [];
231
288
  if (methods.includes("GET"))
@@ -241,28 +298,28 @@ function generateController(pascalName, camelName, methods, fields) {
241
298
  types.push(`${pascalName}IdParams`);
242
299
  }
243
300
  if (types.length > 0) {
244
- lines.push(`import { ${types.join(", ")} } from './${camelName}.validator.js';`);
301
+ lines.push(`import { ${types.join(", ")} } from './${lowerName}.validator.js';`);
245
302
  }
246
303
  lines.push("", "// ==================== CONTROLLERS ====================", "");
247
304
  if (methods.includes("GET")) {
248
- 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 createSuccessResult('${pascalName}s retrieved', mock${pascalName}s);`, " } catch (error) {", ` return createErrorResult('Failed to list ${camelName}s', error instanceof Error ? error.message : 'Unknown error', 500);`, " }", "}", "");
249
- 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 createSuccessResult('${pascalName} retrieved', mock${pascalName});`, " } catch (error) {", ` return createErrorResult('Failed to get ${camelName}', error instanceof Error ? error.message : 'Unknown error', 500);`, " }", "}", "");
305
+ 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);`, " }", "}", "");
306
+ 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);`, " }", "}", "");
250
307
  }
251
308
  if (methods.includes("POST")) {
252
- 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).substr(2, 9), ...data, createdAt: new Date().toISOString() };`, "", ` return createSuccessResult('${pascalName} created', new${pascalName}, undefined, 201);`, " } catch (error) {", ` return createErrorResult('Failed to create ${camelName}', error instanceof Error ? error.message : 'Unknown error', 500);`, " }", "}", "");
309
+ 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);`, " }", "}", "");
253
310
  }
254
311
  if (methods.some((m) => ["PUT", "PATCH"].includes(m))) {
255
- 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 createSuccessResult('${pascalName} updated', updated${pascalName});`, " } catch (error) {", ` return createErrorResult('Failed to update ${camelName}', error instanceof Error ? error.message : 'Unknown error', 500);`, " }", "}", "");
312
+ 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);`, " }", "}", "");
256
313
  }
257
314
  if (methods.includes("DELETE")) {
258
- lines.push("/**", ` * Delete ${camelName}`, " */", `export async function delete${pascalName}(params: ${pascalName}IdParams): Promise<ControllerResult<void>> {`, " try {", " // TODO: Implement database deletion", "", ` return createSuccessResult('${pascalName} deleted');`, " } catch (error) {", ` return createErrorResult('Failed to delete ${camelName}', error instanceof Error ? error.message : 'Unknown error', 500);`, " }", "}", "");
315
+ 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);`, " }", "}", "");
259
316
  }
260
317
  return lines.join("\n");
261
318
  }
262
- function generateHandler(pascalName, camelName, lowerName, methods) {
319
+ function generateHandler(pascalName, camelName, lowerName, methods, resource) {
263
320
  const lines = [
264
321
  "import { Request, Response } from 'express';",
265
- "import { sendResponse } from '../../shared/api.utils.js';",
322
+ `import { sendResponse } from '${getSharedImportPath(resource)}';`,
266
323
  ];
267
324
  const controllerImports = [];
268
325
  if (methods.includes("GET"))
@@ -298,15 +355,18 @@ function generateHandler(pascalName, camelName, lowerName, methods) {
298
355
  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)`, " );", "}", "");
299
356
  }
300
357
  if (methods.some((m) => ["PUT", "PATCH"].includes(m))) {
301
- 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)`, " );", "}", "");
358
+ 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)`, " );", "}", "");
302
359
  }
303
360
  if (methods.includes("DELETE")) {
304
361
  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)`, " );", "}", "");
305
362
  }
306
363
  return lines.join("\n");
307
364
  }
308
- function generateRoutes(pascalName, camelName, lowerName, methods) {
365
+ function generateRoutes(pascalName, camelName, lowerName, routePath, methods, addLimiter, resource) {
309
366
  const lines = ["import { Router } from 'express';"];
367
+ if (addLimiter) {
368
+ lines.push(`import { createEndpointLimiter } from '${getMiddlewareImportPath(resource)}';`);
369
+ }
310
370
  const handlerImports = [];
311
371
  if (methods.includes("GET"))
312
372
  handlerImports.push(`list${pascalName}sHandler`, `get${pascalName}Handler`);
@@ -317,31 +377,65 @@ function generateRoutes(pascalName, camelName, lowerName, methods) {
317
377
  if (methods.includes("DELETE"))
318
378
  handlerImports.push(`delete${pascalName}Handler`);
319
379
  lines.push(`import { ${handlerImports.join(", ")} } from './${lowerName}.handler.js';`);
320
- lines.push("", "const router = Router();", "", "// ==================== ROUTES ====================", "");
380
+ lines.push("", "const router = Router();", ...(addLimiter
381
+ ? [
382
+ "const endpointLimiter = createEndpointLimiter({ windowMs: 15 * 60 * 1000, max: 60 });",
383
+ ]
384
+ : []), "", "// ==================== ROUTES ====================", "");
321
385
  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);`, "");
386
+ lines.push("/**", ` * @route GET /api/${routePath}`, ` * @desc List all ${lowerName}s`, " */", `router.get('/', ${addLimiter ? "endpointLimiter, " : ""}list${pascalName}sHandler);`, "", "/**", ` * @route GET /api/${routePath}/:id`, ` * @desc Get ${lowerName} by ID`, " */", `router.get('/:id', ${addLimiter ? "endpointLimiter, " : ""}get${pascalName}Handler);`, "");
323
387
  }
324
388
  if (methods.includes("POST")) {
325
- lines.push("/**", ` * @route POST /api/${lowerName}`, ` * @desc Create new ${lowerName}`, " */", `router.post('/', create${pascalName}Handler);`, "");
389
+ lines.push("/**", ` * @route POST /api/${routePath}`, ` * @desc Create new ${lowerName}`, " */", `router.post('/', ${addLimiter ? "endpointLimiter, " : ""}create${pascalName}Handler);`, "");
326
390
  }
327
391
  if (methods.includes("PUT")) {
328
- lines.push("/**", ` * @route PUT /api/${lowerName}/:id`, ` * @desc Update ${lowerName}`, " */", `router.put('/:id', update${pascalName}Handler);`, "");
392
+ lines.push("/**", ` * @route PUT /api/${routePath}/:id`, ` * @desc Update ${lowerName}`, " */", `router.put('/:id', ${addLimiter ? "endpointLimiter, " : ""}update${pascalName}Handler);`, "");
329
393
  }
330
394
  if (methods.includes("PATCH")) {
331
- lines.push("/**", ` * @route PATCH /api/${lowerName}/:id`, ` * @desc Partial update ${lowerName}`, " */", `router.patch('/:id', update${pascalName}Handler);`, "");
395
+ lines.push("/**", ` * @route PATCH /api/${routePath}/:id`, ` * @desc Partial update ${lowerName}`, " */", `router.patch('/:id', ${addLimiter ? "endpointLimiter, " : ""}update${pascalName}Handler);`, "");
332
396
  }
333
397
  if (methods.includes("DELETE")) {
334
- lines.push("/**", ` * @route DELETE /api/${lowerName}/:id`, ` * @desc Delete ${lowerName}`, " */", `router.delete('/:id', delete${pascalName}Handler);`, "");
398
+ lines.push("/**", ` * @route DELETE /api/${routePath}/:id`, ` * @desc Delete ${lowerName}`, " */", `router.delete('/:id', ${addLimiter ? "endpointLimiter, " : ""}delete${pascalName}Handler);`, "");
335
399
  }
336
400
  lines.push("export default router;");
337
401
  return lines.join("\n");
338
402
  }
339
- async function updateMainRouter(name) {
403
+ async function ensureRateLimitMiddlewareFile() {
404
+ const middlewarePath = path.join(process.cwd(), "src", "middleware", "rate-limit.middleware.ts");
405
+ if (fileExists(middlewarePath)) {
406
+ return;
407
+ }
408
+ const middlewareContent = `import { rateLimit } from 'express-rate-limit';
409
+
410
+ export interface EndpointLimiterOptions {
411
+ windowMs?: number;
412
+ max?: number;
413
+ }
414
+
415
+ export function createEndpointLimiter(options: EndpointLimiterOptions = {}) {
416
+ const windowMs = options.windowMs ?? 15 * 60 * 1000;
417
+ const max = options.max ?? 60;
418
+
419
+ return rateLimit({
420
+ windowMs,
421
+ max,
422
+ standardHeaders: true,
423
+ legacyHeaders: false,
424
+ message: {
425
+ success: false,
426
+ message: 'Too many requests, please try again later.',
427
+ error: 'RATE_LIMIT_EXCEEDED'
428
+ }
429
+ });
430
+ }
431
+ `;
432
+ await writeFile(middlewarePath, middlewareContent);
433
+ }
434
+ async function updateMainRouter(resource) {
340
435
  const routerPath = path.join(process.cwd(), "src", "api", "routes.ts");
341
- const lowerName = name.toLowerCase();
342
436
  try {
343
437
  let content = await fs.readFile(routerPath, "utf-8");
344
- const importLine = `import ${lowerName}Router from './${lowerName}/${lowerName}.routes.js';`;
438
+ const importLine = `import ${resource.routerIdentifier} from '${resource.importPath}';`;
345
439
  if (!content.includes(importLine)) {
346
440
  const importRegex = /^import\s+.+from\s+.+;$/gm;
347
441
  let lastImportMatch = null;
@@ -358,7 +452,7 @@ async function updateMainRouter(name) {
358
452
  content.slice(insertPos);
359
453
  }
360
454
  }
361
- const useLine = `router.use('/${lowerName}', ${lowerName}Router);`;
455
+ const useLine = `router.use('/${resource.routePath}', ${resource.routerIdentifier});`;
362
456
  if (!content.includes(useLine)) {
363
457
  const exportIndex = content.indexOf("export default router");
364
458
  if (exportIndex !== -1) {
@@ -374,4 +468,13 @@ async function updateMainRouter(name) {
374
468
  catch (err) {
375
469
  }
376
470
  }
471
+ export const __endpointTestUtils = {
472
+ resolveResourceNaming,
473
+ generateValidator,
474
+ generateController,
475
+ generateHandler,
476
+ generateRoutes,
477
+ getSharedImportPath,
478
+ getMiddlewareImportPath,
479
+ };
377
480
  //# 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":"AACA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,EACL,UAAU,EACV,SAAS,EACT,SAAS,EACT,YAAY,EACZ,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAoBxD,SAAS,oBAAoB,CAAC,QAAwB;IACpD,OAAO,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAwB;IACnD,OAAO,GAAG,oBAAoB,CAAC,QAAQ,CAAC,qBAAqB,CAAC;AAChE,CAAC;AAED,SAAS,uBAAuB,CAAC,QAAwB;IACvD,OAAO,GAAG,oBAAoB,CAAC,QAAQ,CAAC,qCAAqC,CAAC;AAChF,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAa;IAC1C,MAAM,QAAQ,GAAG,KAAK;SACnB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;SAC9C,MAAM,CAAC,OAAO,CAAC,CAAC;IAEnB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAW,CAAC;IAC1D,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;IAC/C,MAAM,gBAAgB,GAAG,GAAG,SAAS,QAAQ,CAAC;IAE9C,OAAO;QACL,QAAQ;QACR,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC;QAC7D,SAAS;QACT,SAAS;QACT,UAAU;QACV,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;QAC7B,UAAU,EAAE,KAAK,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS,YAAY;QAC5D,gBAAgB;KACjB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAAY,EACZ,UAA2B,EAAE;IAE7B,MAAM,QAAQ,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC7C,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,EAAE,CAAC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5E,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;QAED,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,EAAE,YAAY,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QAC7C;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,6CAA6C;YACtD,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,8BAA8B,EAAE,KAAK,EAAE,KAAK,EAAE;gBACtD,EAAE,IAAI,EAAE,yBAAyB,EAAE,KAAK,EAAE,QAAQ,EAAE;aACrD;YACD,OAAO,EAAE,KAAK;SACf;KACF,CAAC,CAAC;IAEH,IAAI,eAAe,GAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAErE,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;YACxC;gBACE,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,sBAAsB;gBAC/B,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE;oBAC5C,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;oBAC9C,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;oBAC7C,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;oBACjD,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;iBACpD;gBACD,QAAQ,EAAE,CAAC,KAAe,EAAE,EAAE;oBAC5B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACvB,OAAO,qCAAqC,CAAC;oBAC/C,CAAC;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC;aACF;SACF,CAAC,CAAC;QACH,eAAe,GAAG,OAAO,CAAC;IAC5B,CAAC;IAED,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QAC3C;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,uCAAuC;YAChD,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK;SAClC;KACF,CAAC,CAAC;IAEH,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,YAAY,GAChB,WAAW,CAAC,YAAY,EAAE,CAAC,oBAAoB,CAAC;YAChD,WAAW,CAAC,eAAe,EAAE,CAAC,oBAAoB,CAAC,CAAC;QAEtD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,OAAO,GAAG,GAAG,CAAC,kCAAkC,CAAC,CAAC,KAAK,EAAE,CAAC;YAChE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;YACxC,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,oBAAoB,CAAC,EAAE;gBACpD,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;aACnB,CAAC,CAAC;YACH,OAAO,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAGD,IAAI,MAAM,GAAkB,EAAE,CAAC;IAC/B,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAC3C,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CACrC,CAAC;IAEF,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,CAAC,+BAA+B,CAAC,CAAC;QACtC,IAAI,YAAY,GAAG,IAAI,CAAC;QAExB,OAAO,YAAY,EAAE,CAAC;YACpB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBAC1C;oBACE,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,qCAAqC;oBAC9C,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;wBAC1B,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,SAAS,EAAE,CAAC;gBACf,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,SAAS,IAAI;oBACnC,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC;iBAC1D;gBACD;oBACE,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,WAAW;oBACpB,OAAO,EAAE,IAAI;iBACd;aACF,CAAC,CAAC;YAEH,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,QAAQ,EAAE,WAAW,CAAC,QAAQ;gBAC9B,KAAK,EAAE,EAAE;aACV,CAAC,CAAC;YAEH,IAAI,CAAC,oBAAoB,SAAS,KAAK,WAAW,CAAC,IAAI,GAAG,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC;YACrC,OAAO,CAAC,iDAAiD,CAAC,CAAC;YAC3D,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,EAAE;aACV,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,8BAA8B,CAAC,CAAC,KAAK,EAAE,CAAC;IAE5D,IAAI,CAAC;QACH,MAAM,qBAAqB,CAAC,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QAC3E,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,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,eAAe,CAAC,CAAC;QAC3E,IAAI,CAAC,aAAa,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,gBAAgB,CAAC,CAAC;QAC5E,IAAI,CAAC,aAAa,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,aAAa,CAAC,CAAC;QACzE,IAAI,CAAC,aAAa,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,YAAY,CAAC,CAAC;QACxE,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAEvC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAC7B,eAAe,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YACjC,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBACrB,IAAI,CAAC,iBAAiB,QAAQ,CAAC,SAAS,iBAAiB,CAAC,CAAC;gBAC3D,IAAI,CAAC,iBAAiB,QAAQ,CAAC,SAAS,kBAAkB,CAAC,CAAC;YAC9D,CAAC;iBAAM,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC7B,IAAI,CAAC,iBAAiB,QAAQ,CAAC,SAAS,eAAe,CAAC,CAAC;YAC3D,CAAC;iBAAM,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;gBAClD,IAAI,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,QAAQ,CAAC,SAAS,eAAe,CAAC,CAAC;YACxE,CAAC;iBAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,IAAI,CAAC,iBAAiB,QAAQ,CAAC,SAAS,eAAe,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,MAAM,kBAAkB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC5C,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;QAC5D,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,QAAwB,EACxB,OAAqB,EACrB,MAAqB,EACrB,UAAmB;IAEnB,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;IACnC,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC;IAE1B,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;IACvC,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;IACrC,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;IAGrC,MAAM,SAAS,CACb,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,SAAS,eAAe,CAAC,EAChD,iBAAiB,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CACpE,CAAC;IAEF,MAAM,SAAS,CACb,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,SAAS,gBAAgB,CAAC,EACjD,kBAAkB,CAChB,UAAU,EACV,SAAS,EACT,SAAS,EACT,OAAO,EACP,MAAM,EACN,QAAQ,CACT,CACF,CAAC;IAEF,MAAM,SAAS,CACb,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,SAAS,aAAa,CAAC,EAC9C,eAAe,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CACrE,CAAC;IAEF,MAAM,SAAS,CACb,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,SAAS,YAAY,CAAC,EAC7C,cAAc,CACZ,UAAU,EACV,SAAS,EACT,SAAS,EACT,QAAQ,CAAC,SAAS,EAClB,OAAO,EACP,UAAU,EACV,QAAQ,CACT,CACF,CAAC;IAEF,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,6BAA6B,EAAE,CAAC;IACxC,CAAC;IAGD,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,iBAAiB,CACxB,UAAkB,EAClB,SAAiB,EACjB,OAAqB,EACrB,MAAqB,EACrB,QAAwB;IAExB,MAAM,KAAK,GAAa;QACtB,6CAA6C;QAC7C,qDAAqD,mBAAmB,CAAC,QAAQ,CAAC,IAAI;QACtF,EAAE;QACF,sDAAsD;QACtD,EAAE;KACH,CAAC;IAGF,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,KAAK,CAAC,IAAI,CACR,KAAK,EACL,iBAAiB,SAAS,YAAY,EACtC,KAAK,EACL,gBAAgB,SAAS,uBAAuB,EAChD,+BAA+B,EAC/B,KAAK,EACL,EAAE,EACF,eAAe,UAAU,gCAAgC,SAAS,YAAY,EAC9E,EAAE,CACH,CAAC;IACJ,CAAC;IAGD,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CACR,KAAK,EACL,iBAAiB,SAAS,sBAAsB,EAChD,KAAK,EACL,gBAAgB,SAAS,0BAA0B,EACnD,gCAAgC,EAChC,iCAAiC,EACjC,iCAAiC,EACjC,KAAK,EACL,EAAE,EACF,eAAe,UAAU,6BAA6B,SAAS,eAAe,EAC9E,EAAE,CACH,CAAC;IACJ,CAAC;IAGD,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CACR,KAAK,EACL,0BAA0B,SAAS,EAAE,EACrC,KAAK,EACL,sBAAsB,UAAU,qBAAqB,CACtD,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YAC1B,IAAI,MAAM,GACR,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC;YACtE,IAAI,CAAC,KAAK,CAAC,QAAQ;gBAAE,MAAM,IAAI,aAAa,CAAC;YAC7C,KAAK,CAAC,IAAI,CACR,KAAK,KAAK,CAAC,IAAI,KAAK,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAChE,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CACR,KAAK,EACL,EAAE,EACF,qBAAqB,UAAU,kCAAkC,UAAU,UAAU,EACrF,EAAE,CACH,CAAC;IACJ,CAAC;IAGD,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,KAAK,CAAC,IAAI,CACR,KAAK,EACL,0BAA0B,SAAS,EAAE,EACrC,KAAK,EACL,sBAAsB,UAAU,qBAAqB,CACtD,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YAC1B,MAAM,MAAM,GACV,KAAK,CAAC,IAAI,KAAK,OAAO;gBACpB,CAAC,CAAC,+BAA+B;gBACjC,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,eAAe,CAAC;YACrC,KAAK,CAAC,IAAI,CACR,KAAK,KAAK,CAAC,IAAI,KAAK,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAChE,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CACR,KAAK,EACL,EAAE,EACF,qBAAqB,UAAU,kCAAkC,UAAU,UAAU,EACrF,EAAE,CACH,CAAC;IACJ,CAAC;IAGD,KAAK,CAAC,IAAI,CAAC,yDAAyD,EAAE,EAAE,CAAC,CAAC;IAE1E,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,KAAK,CAAC,IAAI,CACR,iCAAiC,UAAU,+CAA+C,UAAU,cAAc,EAClH,2BAA2B,UAAU,aAAa,SAAS,kBAAkB,EAC7E,GAAG,EACH,EAAE,CACH,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CACR,iCAAiC,UAAU,kDAAkD,UAAU,WAAW,EAClH,2BAA2B,UAAU,UAAU,SAAS,qBAAqB,EAC7E,GAAG,EACH,EAAE,CACH,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CACR,iCAAiC,UAAU,yDAAyD,UAAU,UAAU,EACxH,iCAAiC,UAAU,eAAe,UAAU,gBAAgB,EACpF,GAAG,EACH,EAAE,CACH,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,KAAK,CAAC,IAAI,CACR,iCAAiC,UAAU,yDAAyD,UAAU,UAAU,EACxH,iCAAiC,UAAU,eAAe,UAAU,gBAAgB,EACpF,GAAG,EACH,EAAE,CACH,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,kBAAkB,CACzB,UAAkB,EAClB,SAAiB,EACjB,SAAiB,EACjB,OAAqB,EACrB,MAAqB,EACrB,QAAwB;IAExB,MAAM,KAAK,GAAa;QACtB,qDAAqD,mBAAmB,CAAC,QAAQ,CAAC,IAAI;KACvF,CAAC;IAGF,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,OAAO,EAAE,GAAG,UAAU,UAAU,CAAC,CAAC;IAC5D,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,SAAS,UAAU,MAAM,CAAC,CAAC;IACpE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,KAAK,CAAC,IAAI,CAAC,SAAS,UAAU,MAAM,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,UAAU,UAAU,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,UAAU,CAAC,CAAC;IACxC,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,UAAU,UAAU,CAAC,EAAE,CAAC;QAC3E,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,UAAU,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CACR,YAAY,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,SAAS,iBAAiB,CACrE,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI,CACR,EAAE,EACF,0DAA0D,EAC1D,EAAE,CACH,CAAC;IAGF,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CACR,KAAK,EACL,eAAe,SAAS,GAAG,EAC3B,KAAK,EACL,6BAA6B,UAAU,YAAY,UAAU,4CAA4C,EACzG,SAAS,EACT,uCAAuC,EACvC,iBAAiB,UAAU,OAAO,EAClC,oBAAoB,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,EAAE,yCAAyC,EACtH,oBAAoB,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,EAAE,wCAAwC,EACrH,QAAQ,EACR,EAAE,EACF,sCAAsC,UAAU,qBAAqB,UAAU,KAAK,EACpF,qBAAqB,EACrB,mDAAmD,SAAS,qEAAqE,EACjI,KAAK,EACL,GAAG,EACH,EAAE,CACH,CAAC;QAGF,KAAK,CAAC,IAAI,CACR,KAAK,EACL,UAAU,SAAS,QAAQ,EAC3B,KAAK,EACL,4BAA4B,UAAU,YAAY,UAAU,6CAA6C,EACzG,SAAS,EACT,uCAAuC,EACvC,iBAAiB,UAAU,uBAAuB,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,yCAAyC,EAClJ,EAAE,EACF,sCAAsC,UAAU,oBAAoB,UAAU,IAAI,EAClF,qBAAqB,EACrB,kDAAkD,SAAS,oEAAoE,EAC/H,KAAK,EACL,GAAG,EACH,EAAE,CACH,CAAC;IACJ,CAAC;IAGD,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CACR,KAAK,EACL,aAAa,SAAS,EAAE,EACxB,KAAK,EACL,+BAA+B,UAAU,gBAAgB,UAAU,yCAAyC,EAC5G,SAAS,EACT,2CAA2C,EAC3C,gBAAgB,UAAU,mGAAmG,EAC7H,EAAE,EACF,sCAAsC,UAAU,iBAAiB,UAAU,SAAS,EACpF,qBAAqB,EACrB,qDAAqD,SAAS,oEAAoE,EAClI,KAAK,EACL,GAAG,EACH,EAAE,CACH,CAAC;IACJ,CAAC;IAGD,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,KAAK,CAAC,IAAI,CACR,KAAK,EACL,aAAa,SAAS,EAAE,EACxB,KAAK,EACL,+BAA+B,UAAU,YAAY,UAAU,yBAAyB,UAAU,yCAAyC,EAC3I,SAAS,EACT,wCAAwC,EACxC,oBAAoB,UAAU,qEAAqE,EACnG,EAAE,EACF,sCAAsC,UAAU,qBAAqB,UAAU,IAAI,EACnF,qBAAqB,EACrB,qDAAqD,SAAS,oEAAoE,EAClI,KAAK,EACL,GAAG,EACH,EAAE,CACH,CAAC;IACJ,CAAC;IAGD,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CACR,KAAK,EACL,aAAa,SAAS,EAAE,EACxB,KAAK,EACL,+BAA+B,UAAU,YAAY,UAAU,8CAA8C,EAC7G,SAAS,EACT,0CAA0C,EAC1C,EAAE,EACF,sCAAsC,UAAU,aAAa,EAC7D,qBAAqB,EACrB,qDAAqD,SAAS,oEAAoE,EAClI,KAAK,EACL,GAAG,EACH,EAAE,CACH,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,eAAe,CACtB,UAAkB,EAClB,SAAiB,EACjB,SAAiB,EACjB,OAAqB,EACrB,QAAwB;IAExB,MAAM,KAAK,GAAa;QACtB,8CAA8C;QAC9C,iCAAiC,mBAAmB,CAAC,QAAQ,CAAC,IAAI;KACnE,CAAC;IAGF,MAAM,iBAAiB,GAAa,EAAE,CAAC;IACvC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;QACzB,iBAAiB,CAAC,IAAI,CAAC,OAAO,UAAU,GAAG,EAAE,MAAM,UAAU,EAAE,CAAC,CAAC;IACnE,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,iBAAiB,CAAC,IAAI,CAAC,SAAS,UAAU,EAAE,CAAC,CAAC;IAC5E,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACnD,iBAAiB,CAAC,IAAI,CAAC,SAAS,UAAU,EAAE,CAAC,CAAC;IAChD,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,iBAAiB,CAAC,IAAI,CAAC,SAAS,UAAU,EAAE,CAAC,CAAC;IAE9E,KAAK,CAAC,IAAI,CACR,YAAY,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,SAAS,kBAAkB,CAClF,CAAC;IAGF,MAAM,gBAAgB,GAAa,EAAE,CAAC;IACtC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;QACzB,gBAAgB,CAAC,IAAI,CACnB,WAAW,UAAU,OAAO,EAC5B,WAAW,UAAU,IAAI,CAC1B,CAAC;IACJ,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC1B,gBAAgB,CAAC,IAAI,CAAC,WAAW,UAAU,QAAQ,CAAC,CAAC;IACvD,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,gBAAgB,CAAC,IAAI,CAAC,WAAW,UAAU,QAAQ,CAAC,CAAC;QACrD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,WAAW,UAAU,IAAI,CAAC;YACvD,gBAAgB,CAAC,IAAI,CAAC,WAAW,UAAU,IAAI,CAAC,CAAC;IACrD,CAAC;IACD,IACE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC1B,CAAC,gBAAgB,CAAC,QAAQ,CAAC,WAAW,UAAU,IAAI,CAAC,EACrD,CAAC;QACD,gBAAgB,CAAC,IAAI,CAAC,WAAW,UAAU,IAAI,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,IAAI,CACR,YAAY,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,SAAS,iBAAiB,CAChF,CAAC;IAEF,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,uDAAuD,EAAE,EAAE,CAAC,CAAC;IAG5E,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CACR,KAAK,EACL,2BAA2B,SAAS,EAAE,EACtC,KAAK,EACL,6BAA6B,UAAU,wDAAwD,EAC/F,uBAAuB,EACvB,UAAU,EACV,UAAU,EACV,qBAAqB,UAAU,mBAAmB,EAClD,0BAA0B,UAAU,cAAc,EAClD,MAAM,EACN,GAAG,EACH,EAAE,CACH,CAAC;QAGF,KAAK,CAAC,IAAI,CACR,KAAK,EACL,2BAA2B,SAAS,MAAM,EAC1C,KAAK,EACL,4BAA4B,UAAU,uDAAuD,EAC7F,uBAAuB,EACvB,UAAU,EACV,UAAU,EACV,qBAAqB,UAAU,iBAAiB,EAChD,yBAAyB,UAAU,aAAa,EAChD,MAAM,EACN,GAAG,EACH,EAAE,CACH,CAAC;IACJ,CAAC;IAGD,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CACR,KAAK,EACL,4BAA4B,SAAS,EAAE,EACvC,KAAK,EACL,+BAA+B,UAAU,uDAAuD,EAChG,uBAAuB,EACvB,UAAU,EACV,UAAU,EACV,qBAAqB,UAAU,mBAAmB,EAClD,4BAA4B,UAAU,aAAa,EACnD,MAAM,EACN,GAAG,EACH,EAAE,CACH,CAAC;IACJ,CAAC;IAGD,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,KAAK,CAAC,IAAI,CACR,KAAK,EACL,iCAAiC,SAAS,MAAM,EAChD,KAAK,EACL,+BAA+B,UAAU,uDAAuD,EAChG,4BAA4B,EAC5B,wCAAwC,UAAU,iBAAiB,EACnE,gCAAgC,EAChC,4BAA4B,EAC5B,uBAAuB,EACvB,qCAAqC,EACrC,kCAAkC,EAClC,oCAAoC,EACpC,SAAS,EACT,aAAa,EACb,KAAK,EACL,EAAE,EACF,qCAAqC,EACrC,uBAAuB,EACvB,UAAU,EACV,UAAU,EACV,qBAAqB,UAAU,mBAAmB,EAClD,4BAA4B,UAAU,iCAAiC,EACvE,MAAM,EACN,GAAG,EACH,EAAE,CACH,CAAC;IACJ,CAAC;IAGD,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CACR,KAAK,EACL,8BAA8B,SAAS,MAAM,EAC7C,KAAK,EACL,+BAA+B,UAAU,uDAAuD,EAChG,uBAAuB,EACvB,UAAU,EACV,UAAU,EACV,qBAAqB,UAAU,iBAAiB,EAChD,4BAA4B,UAAU,aAAa,EACnD,MAAM,EACN,GAAG,EACH,EAAE,CACH,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,cAAc,CACrB,UAAkB,EAClB,SAAiB,EACjB,SAAiB,EACjB,SAAiB,EACjB,OAAqB,EACrB,UAAmB,EACnB,QAAwB;IAExB,MAAM,KAAK,GAAa,CAAC,mCAAmC,CAAC,CAAC;IAE9D,IAAI,UAAU,EAAE,CAAC;QACf,KAAK,CAAC,IAAI,CACR,0CAA0C,uBAAuB,CAAC,QAAQ,CAAC,IAAI,CAChF,CAAC;IACJ,CAAC;IAGD,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;QACzB,cAAc,CAAC,IAAI,CAAC,OAAO,UAAU,UAAU,EAAE,MAAM,UAAU,SAAS,CAAC,CAAC;IAC9E,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC1B,cAAc,CAAC,IAAI,CAAC,SAAS,UAAU,SAAS,CAAC,CAAC;IACpD,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACnD,cAAc,CAAC,IAAI,CAAC,SAAS,UAAU,SAAS,CAAC,CAAC;IACpD,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC5B,cAAc,CAAC,IAAI,CAAC,SAAS,UAAU,SAAS,CAAC,CAAC;IAEpD,KAAK,CAAC,IAAI,CACR,YAAY,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,SAAS,eAAe,CAC5E,CAAC;IAEF,KAAK,CAAC,IAAI,CACR,EAAE,EACF,0BAA0B,EAC1B,GAAG,CAAC,UAAU;QACZ,CAAC,CAAC;YACE,uFAAuF;SACxF;QACH,CAAC,CAAC,EAAE,CAAC,EACP,EAAE,EACF,qDAAqD,EACrD,EAAE,CACH,CAAC;IAGF,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CACR,KAAK,EACL,sBAAsB,SAAS,EAAE,EACjC,qBAAqB,SAAS,GAAG,EACjC,KAAK,EACL,mBAAmB,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,OAAO,UAAU,YAAY,EACrF,EAAE,EACF,KAAK,EACL,sBAAsB,SAAS,MAAM,EACrC,gBAAgB,SAAS,QAAQ,EACjC,KAAK,EACL,sBAAsB,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,MAAM,UAAU,WAAW,EACtF,EAAE,CACH,CAAC;IACJ,CAAC;IAGD,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CACR,KAAK,EACL,uBAAuB,SAAS,EAAE,EAClC,uBAAuB,SAAS,EAAE,EAClC,KAAK,EACL,oBAAoB,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,SAAS,UAAU,WAAW,EACvF,EAAE,CACH,CAAC;IACJ,CAAC;IAGD,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CACR,KAAK,EACL,sBAAsB,SAAS,MAAM,EACrC,mBAAmB,SAAS,EAAE,EAC9B,KAAK,EACL,sBAAsB,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,SAAS,UAAU,WAAW,EACzF,EAAE,CACH,CAAC;IACJ,CAAC;IAGD,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CACR,KAAK,EACL,wBAAwB,SAAS,MAAM,EACvC,2BAA2B,SAAS,EAAE,EACtC,KAAK,EACL,wBAAwB,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,SAAS,UAAU,WAAW,EAC3F,EAAE,CACH,CAAC;IACJ,CAAC;IAGD,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CACR,KAAK,EACL,yBAAyB,SAAS,MAAM,EACxC,mBAAmB,SAAS,EAAE,EAC9B,KAAK,EACL,yBAAyB,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,SAAS,UAAU,WAAW,EAC5F,EAAE,CACH,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IAErC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,KAAK,UAAU,6BAA6B;IAC1C,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAC9B,OAAO,CAAC,GAAG,EAAE,EACb,KAAK,EACL,YAAY,EACZ,0BAA0B,CAC3B,CAAC;IAEF,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QAC/B,OAAO;IACT,CAAC;IAED,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;CAuB3B,CAAC;IAEA,MAAM,SAAS,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;AACrD,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,QAAwB;IACtD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;IAEvE,IAAI,CAAC;QACH,IAAI,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAGrD,MAAM,UAAU,GAAG,UAAU,QAAQ,CAAC,gBAAgB,UAAU,QAAQ,CAAC,UAAU,IAAI,CAAC;QACxF,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAElC,MAAM,WAAW,GAAG,2BAA2B,CAAC;YAChD,IAAI,eAAe,GAA2B,IAAI,CAAC;YACnD,IAAI,KAAK,CAAC;YACV,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACpD,eAAe,GAAG,KAAK,CAAC;YAC1B,CAAC;YAED,IAAI,eAAe,EAAE,CAAC;gBACpB,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBACpE,OAAO;oBACL,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC;wBAC3B,IAAI;wBACJ,UAAU;wBACV,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAGD,MAAM,OAAO,GAAG,gBAAgB,QAAQ,CAAC,SAAS,MAAM,QAAQ,CAAC,gBAAgB,IAAI,CAAC;QACtF,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/B,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;YAC7D,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC;gBACvB,OAAO;oBACL,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC;wBAC7B,OAAO;wBACP,MAAM;wBACN,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;IAEf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,qBAAqB;IACrB,iBAAiB;IACjB,kBAAkB;IAClB,eAAe;IACf,cAAc;IACd,mBAAmB;IACnB,uBAAuB;CACxB,CAAC"}
@@ -1,6 +1,35 @@
1
+ import { FieldConfig } from "../types/index.js";
2
+ type HttpMethod = "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
1
3
  interface GenerateCrudOptions {
2
4
  auth?: boolean;
5
+ limiter?: boolean;
3
6
  }
7
+ interface ResourceNaming {
8
+ segments: string[];
9
+ basePath: string;
10
+ lowerName: string;
11
+ camelName: string;
12
+ pascalName: string;
13
+ routePath: string;
14
+ importPath: string;
15
+ routerIdentifier: string;
16
+ }
17
+ declare function getSharedImportPath(resource: ResourceNaming): string;
18
+ declare function getMiddlewareImportPath(resource: ResourceNaming): string;
19
+ declare function resolveResourceNaming(input: string): ResourceNaming;
4
20
  export declare function generateCrudCommand(resourceName: string, options?: GenerateCrudOptions): Promise<void>;
21
+ declare function generateValidator(pascalName: string, camelName: string, methods: HttpMethod[], fields: FieldConfig[], resource: ResourceNaming): string;
22
+ declare function generateController(pascalName: string, camelName: string, lowerName: string, methods: HttpMethod[], fields: FieldConfig[], resource: ResourceNaming): string;
23
+ declare function generateHandler(pascalName: string, camelName: string, lowerName: string, methods: HttpMethod[], resource: ResourceNaming): string;
24
+ declare function generateRoutes(pascalName: string, camelName: string, lowerName: string, routePath: string, methods: HttpMethod[], addAuth: boolean, addLimiter: boolean, resource: ResourceNaming): string;
25
+ export declare const __crudTestUtils: {
26
+ resolveResourceNaming: typeof resolveResourceNaming;
27
+ generateValidator: typeof generateValidator;
28
+ generateController: typeof generateController;
29
+ generateHandler: typeof generateHandler;
30
+ generateRoutes: typeof generateRoutes;
31
+ getSharedImportPath: typeof getSharedImportPath;
32
+ getMiddlewareImportPath: typeof getMiddlewareImportPath;
33
+ };
5
34
  export {};
6
35
  //# sourceMappingURL=generate-crud.d.ts.map
@@ -1 +1 @@
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,iBA4KlC"}
1
+ {"version":3,"file":"generate-crud.d.ts","sourceRoot":"","sources":["../../src/commands/generate-crud.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,KAAK,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE9D,UAAU,mBAAmB;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;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,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAMD,iBAAS,mBAAmB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAE7D;AAED,iBAAS,uBAAuB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAEjE;AAED,iBAAS,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CA0B5D;AAED,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,mBAAwB,iBAmMlC;AA6DD,iBAAS,iBAAiB,CACxB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,UAAU,EAAE,EACrB,MAAM,EAAE,WAAW,EAAE,EACrB,QAAQ,EAAE,cAAc,GACvB,MAAM,CAkIR;AAED,iBAAS,kBAAkB,CACzB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,UAAU,EAAE,EACrB,MAAM,EAAE,WAAW,EAAE,EACrB,QAAQ,EAAE,cAAc,GACvB,MAAM,CAoIR;AAED,iBAAS,eAAe,CACtB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,UAAU,EAAE,EACrB,QAAQ,EAAE,cAAc,GACvB,MAAM,CAoJR;AAED,iBAAS,cAAc,CACrB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,UAAU,EAAE,EACrB,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,OAAO,EACnB,QAAQ,EAAE,cAAc,GACvB,MAAM,CAoHR;AAwFD,eAAO,MAAM,eAAe;;;;;;;;CAQ3B,CAAC"}