@edifice.io/edifice-nestjs-core 1.0.0 → 1.0.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.
Files changed (50) hide show
  1. package/README.md +41 -0
  2. package/dist/bin/generate-rest-clients.d.ts +2 -0
  3. package/dist/bin/generate-rest-clients.js +581 -0
  4. package/dist/bin/generate-rest-clients.js.map +1 -0
  5. package/dist/bin/generate-swagger-pdf.d.ts +1 -0
  6. package/dist/bin/generate-swagger-pdf.js +172 -0
  7. package/dist/bin/generate-swagger-pdf.js.map +1 -0
  8. package/dist/config/configuration.d.ts +6 -0
  9. package/dist/config/configuration.js +12 -0
  10. package/dist/config/configuration.js.map +1 -1
  11. package/dist/config/postgres.config.js +2 -0
  12. package/dist/config/postgres.config.js.map +1 -1
  13. package/dist/core.module.js +8 -0
  14. package/dist/core.module.js.map +1 -1
  15. package/dist/index.d.ts +1 -0
  16. package/dist/index.js +1 -0
  17. package/dist/index.js.map +1 -1
  18. package/dist/performance/copy-metadata.utils.d.ts +1 -0
  19. package/dist/performance/copy-metadata.utils.js +9 -0
  20. package/dist/performance/copy-metadata.utils.js.map +1 -0
  21. package/dist/performance/correlation.interceptor.d.ts +5 -0
  22. package/dist/performance/correlation.interceptor.js +28 -0
  23. package/dist/performance/correlation.interceptor.js.map +1 -0
  24. package/dist/performance/index.d.ts +4 -0
  25. package/dist/performance/index.js +16 -0
  26. package/dist/performance/index.js.map +1 -0
  27. package/dist/performance/performance-stats.d.ts +26 -0
  28. package/dist/performance/performance-stats.js +57 -0
  29. package/dist/performance/performance-stats.js.map +1 -0
  30. package/dist/performance/performance.decorator.d.ts +11 -0
  31. package/dist/performance/performance.decorator.js +56 -0
  32. package/dist/performance/performance.decorator.js.map +1 -0
  33. package/dist/performance/performance.module.d.ts +5 -0
  34. package/dist/performance/performance.module.js +38 -0
  35. package/dist/performance/performance.module.js.map +1 -0
  36. package/dist/session/query-param-token.middleware.d.ts +11 -0
  37. package/dist/session/query-param-token.middleware.js +68 -0
  38. package/dist/session/query-param-token.middleware.js.map +1 -0
  39. package/dist/session/session-middleware.utils.d.ts +17 -0
  40. package/dist/session/session-middleware.utils.js +82 -0
  41. package/dist/session/session-middleware.utils.js.map +1 -0
  42. package/dist/session/session.middleware.d.ts +0 -4
  43. package/dist/session/session.middleware.js +9 -45
  44. package/dist/session/session.middleware.js.map +1 -1
  45. package/dist/session/session.module.js +3 -2
  46. package/dist/session/session.module.js.map +1 -1
  47. package/dist/tsconfig.tsbuildinfo +1 -1
  48. package/dist/utils/static-assets.utils.js +1 -1
  49. package/dist/utils/static-assets.utils.js.map +1 -1
  50. package/package.json +13 -6
package/README.md CHANGED
@@ -1,3 +1,9 @@
1
+ # About edifice-nestjs-core
2
+
3
+ * Licence : Copyright Edifice
4
+ * Funder(s) : Edifice
5
+ * Developer(s) : Edifice
6
+
1
7
  # @edifice.io/edifice-nestjs-core
2
8
 
3
9
  Core NestJS modules and utilities for Edifice applications.
@@ -988,6 +994,7 @@ Each tool is available as a binary when you install `@edifice.io/edifice-nestjs-
988
994
  - **edifice-generate-entities**: Generate MikroORM entities from database schema
989
995
  - **edifice-generate-metadata**: Generate application metadata file
990
996
  - **edifice-k6-sync-dto**: Synchronize DTOs for K6 Testing
997
+ - **generate-swagger-pdf**: Generate a PDF from your NestJS API Swagger documentation
991
998
 
992
999
  ---
993
1000
 
@@ -1073,6 +1080,40 @@ pnpm edifice-k6-sync-dto
1073
1080
 
1074
1081
  ---
1075
1082
 
1083
+ #### generate-swagger-pdf
1084
+
1085
+ **Purpose:**
1086
+ Generate a PDF from the Swagger (OpenAPI) documentation exposed by your NestJS server.
1087
+
1088
+ **Usage:**
1089
+
1090
+ ```bash
1091
+ npx generate-swagger-pdf --host <host> --port <port>
1092
+ ```
1093
+
1094
+ **Options:**
1095
+
1096
+ - `--host`, `-h`: Swagger server host (default: `127.0.0.1`)
1097
+ - `--port`, `-p`: Swagger server port (default: `3002`)
1098
+
1099
+ The PDF will be generated in the `documentation/api-docs.pdf` folder of your project.
1100
+
1101
+ **Example:**
1102
+
1103
+ ```bash
1104
+ npx generate-swagger-pdf --host 127.0.0.1 --port 4000
1105
+ ```
1106
+
1107
+ This package provides several CLI tools to help you automate common backend tasks.
1108
+ Each tool is available as a binary when you install `@edifice.io/edifice-nestjs-core`.
1109
+
1110
+ - **edifice-generate-entities**: Generate MikroORM entities from database schema
1111
+ - **edifice-generate-metadata**: Generate application metadata file
1112
+ - **edifice-k6-sync-dto**: Synchronize DTOs for K6 Testing
1113
+ - **generate-swagger-pdf**: Generate a PDF from your NestJS API Swagger documentation
1114
+
1115
+ ---
1116
+
1076
1117
  **Note:**
1077
1118
  All CLI tools are available after installing the package.
1078
1119
  You can run them with `pnpm` or `npx` from your project root.
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,581 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ const ts = __importStar(require("typescript"));
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ const PRIMITIVE_TYPES = new Set([
41
+ 'string',
42
+ 'number',
43
+ 'boolean',
44
+ 'Date',
45
+ 'any',
46
+ 'void',
47
+ 'object',
48
+ 'never',
49
+ 'unknown',
50
+ 'null',
51
+ 'undefined',
52
+ ]);
53
+ function parseControllers(filePath) {
54
+ const program = ts.createProgram([filePath], {
55
+ target: ts.ScriptTarget.ES2020,
56
+ module: ts.ModuleKind.CommonJS,
57
+ });
58
+ const sourceFile = program.getSourceFile(filePath);
59
+ if (!sourceFile) {
60
+ throw new Error(`Could not load source file: ${filePath}`);
61
+ }
62
+ const controllers = [];
63
+ ts.forEachChild(sourceFile, (node) => {
64
+ if (ts.isClassDeclaration(node) && node.name) {
65
+ const controllerDecorator = getDecorator(node, 'Controller');
66
+ if (!controllerDecorator)
67
+ return;
68
+ const basePath = getDecoratorArgument(controllerDecorator) || '';
69
+ const apiTagDecorator = getDecorator(node, 'ApiTags');
70
+ const tag = apiTagDecorator
71
+ ? getDecoratorArgument(apiTagDecorator)
72
+ : undefined;
73
+ const controller = {
74
+ name: node.name.text,
75
+ basePath,
76
+ methods: [],
77
+ jsdoc: getJsDoc(node),
78
+ tag,
79
+ };
80
+ node.members.forEach((member) => {
81
+ if (ts.isMethodDeclaration(member) && member.name) {
82
+ const methodMetadata = parseMethod(member);
83
+ if (methodMetadata) {
84
+ controller.methods.push(methodMetadata);
85
+ }
86
+ }
87
+ });
88
+ controllers.push(controller);
89
+ }
90
+ });
91
+ return controllers;
92
+ }
93
+ function parseMethod(method) {
94
+ const httpMethods = ['Get', 'Post', 'Put', 'Patch', 'Delete'];
95
+ let httpMethod = null;
96
+ let routePath = '';
97
+ for (const httpMethodName of httpMethods) {
98
+ const decorator = getDecorator(method, httpMethodName);
99
+ if (decorator) {
100
+ httpMethod = httpMethodName.toUpperCase();
101
+ routePath = getDecoratorArgument(decorator) || '';
102
+ break;
103
+ }
104
+ }
105
+ if (!httpMethod)
106
+ return null;
107
+ const methodName = method.name.text;
108
+ const params = [];
109
+ const reservedNames = new Set(['options', 'queryParams']);
110
+ method.parameters.forEach((param) => {
111
+ let paramName = param.name.text;
112
+ if (getDecorator(param, 'Req'))
113
+ return;
114
+ const paramDecorator = getDecorator(param, 'Param');
115
+ const queryDecorator = getDecorator(param, 'Query');
116
+ const bodyDecorator = getDecorator(param, 'Body');
117
+ let paramType = getTypeName(param.type);
118
+ if (paramDecorator) {
119
+ const expression = paramDecorator.expression;
120
+ if (ts.isCallExpression(expression) && expression.arguments.length > 1) {
121
+ const pipeArg = expression.arguments[1];
122
+ let pipeName = '';
123
+ if (ts.isIdentifier(pipeArg)) {
124
+ pipeName = pipeArg.text;
125
+ }
126
+ else if (ts.isNewExpression(pipeArg) &&
127
+ ts.isIdentifier(pipeArg.expression)) {
128
+ pipeName = pipeArg.expression.text;
129
+ }
130
+ const pipeTypeMap = {
131
+ ParseIntPipe: 'number',
132
+ ParseBoolPipe: 'boolean',
133
+ ParseFloatPipe: 'number',
134
+ ParseUUIDPipe: 'string',
135
+ ParseEnumPipe: 'string',
136
+ };
137
+ for (const [pipe, type] of Object.entries(pipeTypeMap)) {
138
+ if (pipeName.includes(pipe)) {
139
+ paramType = type;
140
+ break;
141
+ }
142
+ }
143
+ }
144
+ }
145
+ if (bodyDecorator) {
146
+ const bodyFieldArg = getDecoratorArgument(bodyDecorator);
147
+ if (bodyFieldArg) {
148
+ paramName = bodyFieldArg;
149
+ }
150
+ }
151
+ if (queryDecorator) {
152
+ const queryFieldArg = getDecoratorArgument(queryDecorator);
153
+ if (queryFieldArg) {
154
+ paramName = queryFieldArg;
155
+ }
156
+ }
157
+ if (reservedNames.has(paramName)) {
158
+ paramName = `_${paramName}`;
159
+ }
160
+ if (paramDecorator) {
161
+ params.push({
162
+ name: paramName,
163
+ type: paramType,
164
+ decorator: 'Param',
165
+ isOptional: !!param.questionToken,
166
+ });
167
+ }
168
+ else if (queryDecorator) {
169
+ params.push({
170
+ name: paramName,
171
+ type: paramType,
172
+ decorator: 'Query',
173
+ isOptional: !!param.questionToken,
174
+ });
175
+ }
176
+ else if (bodyDecorator) {
177
+ params.push({
178
+ name: paramName,
179
+ type: paramType,
180
+ decorator: 'Body',
181
+ isOptional: !!param.questionToken,
182
+ });
183
+ }
184
+ });
185
+ const returnType = getReturnType(method);
186
+ const apiOperationDecorator = getDecorator(method, 'ApiOperation');
187
+ const operationSummary = apiOperationDecorator
188
+ ? getDecoratorObjectProperty(apiOperationDecorator, 'summary')
189
+ : undefined;
190
+ return {
191
+ name: methodName,
192
+ httpMethod,
193
+ path: routePath,
194
+ params,
195
+ returnType,
196
+ jsdoc: getJsDoc(method),
197
+ operationSummary,
198
+ };
199
+ }
200
+ function getDecorator(node, decoratorName) {
201
+ const decorators = ts.getDecorators(node);
202
+ if (!decorators)
203
+ return undefined;
204
+ return decorators.find((decorator) => {
205
+ try {
206
+ const expression = decorator.expression;
207
+ if (ts.isCallExpression(expression)) {
208
+ const callExpression = expression.expression;
209
+ if (ts.isIdentifier(callExpression)) {
210
+ return callExpression.text === decoratorName;
211
+ }
212
+ if (ts.isPropertyAccessExpression(callExpression)) {
213
+ const name = callExpression.name;
214
+ if (ts.isIdentifier(name)) {
215
+ return name.text === decoratorName;
216
+ }
217
+ }
218
+ return false;
219
+ }
220
+ if (ts.isIdentifier(expression)) {
221
+ return expression.text === decoratorName;
222
+ }
223
+ if (ts.isPropertyAccessExpression(expression)) {
224
+ const name = expression.name;
225
+ if (ts.isIdentifier(name)) {
226
+ return name.text === decoratorName;
227
+ }
228
+ }
229
+ return false;
230
+ }
231
+ catch (_) {
232
+ return false;
233
+ }
234
+ });
235
+ }
236
+ function getDecoratorArgument(decorator) {
237
+ const expression = decorator.expression;
238
+ if (ts.isCallExpression(expression) && expression.arguments.length > 0) {
239
+ const arg = expression.arguments[0];
240
+ if (ts.isStringLiteral(arg)) {
241
+ return arg.text;
242
+ }
243
+ }
244
+ return undefined;
245
+ }
246
+ function getDecoratorObjectProperty(decorator, propertyName) {
247
+ const expression = decorator.expression;
248
+ if (ts.isCallExpression(expression) && expression.arguments.length > 0) {
249
+ const arg = expression.arguments[0];
250
+ if (ts.isObjectLiteralExpression(arg)) {
251
+ const property = arg.properties.find((prop) => {
252
+ if (!ts.isPropertyAssignment(prop))
253
+ return false;
254
+ let propName;
255
+ if (ts.isIdentifier(prop.name)) {
256
+ propName = prop.name.text;
257
+ }
258
+ else if (ts.isStringLiteral(prop.name)) {
259
+ propName = prop.name.text;
260
+ }
261
+ return propName === propertyName;
262
+ });
263
+ if (property && ts.isPropertyAssignment(property)) {
264
+ if (ts.isStringLiteral(property.initializer)) {
265
+ return property.initializer.text;
266
+ }
267
+ }
268
+ }
269
+ }
270
+ return undefined;
271
+ }
272
+ function getReturnType(method) {
273
+ if (!method.type)
274
+ return 'void';
275
+ try {
276
+ const typeNode = method.type;
277
+ if (ts.isTypeReferenceNode(typeNode)) {
278
+ const typeName = ts.isIdentifier(typeNode.typeName)
279
+ ? typeNode.typeName.text
280
+ : 'any';
281
+ if (typeName === 'Promise' &&
282
+ typeNode.typeArguments &&
283
+ typeNode.typeArguments.length > 0) {
284
+ const innerType = getTypeName(typeNode.typeArguments[0]);
285
+ return innerType === 'void' ? 'void' : innerType;
286
+ }
287
+ return typeName;
288
+ }
289
+ if (ts.isIdentifier(typeNode)) {
290
+ return typeNode.text;
291
+ }
292
+ if (typeNode.kind === ts.SyntaxKind.VoidKeyword) {
293
+ return 'void';
294
+ }
295
+ return 'void';
296
+ }
297
+ catch (_) {
298
+ return 'void';
299
+ }
300
+ }
301
+ function getTypeName(typeNode) {
302
+ if (!typeNode)
303
+ return 'any';
304
+ try {
305
+ if (typeNode.kind === ts.SyntaxKind.VoidKeyword) {
306
+ return 'void';
307
+ }
308
+ if (typeNode.kind === ts.SyntaxKind.StringKeyword) {
309
+ return 'string';
310
+ }
311
+ if (typeNode.kind === ts.SyntaxKind.NumberKeyword) {
312
+ return 'number';
313
+ }
314
+ if (typeNode.kind === ts.SyntaxKind.BooleanKeyword) {
315
+ return 'boolean';
316
+ }
317
+ if (ts.isIdentifier(typeNode)) {
318
+ return typeNode.text;
319
+ }
320
+ if (ts.isArrayTypeNode(typeNode)) {
321
+ const elementType = getTypeName(typeNode.elementType);
322
+ return `${elementType}[]`;
323
+ }
324
+ if (ts.isTypeReferenceNode(typeNode)) {
325
+ const typeName = ts.isIdentifier(typeNode.typeName)
326
+ ? typeNode.typeName.text
327
+ : typeNode.typeName.getText?.();
328
+ if (typeNode.typeArguments && typeNode.typeArguments.length > 0) {
329
+ const args = typeNode.typeArguments
330
+ .map((arg) => getTypeName(arg))
331
+ .join(', ');
332
+ return `${typeName}<${args}>`;
333
+ }
334
+ return typeName || 'any';
335
+ }
336
+ if (ts.isUnionTypeNode(typeNode)) {
337
+ return typeNode.types.map((t) => getTypeName(t)).join(' | ');
338
+ }
339
+ if (ts.isTypeLiteralNode(typeNode)) {
340
+ const members = typeNode.members
341
+ .map((member) => {
342
+ if (ts.isPropertySignature(member) && member.name && member.type) {
343
+ const propName = ts.isIdentifier(member.name)
344
+ ? member.name.text
345
+ : member.name.getText?.() || 'unknown';
346
+ const propType = getTypeName(member.type);
347
+ const optional = member.questionToken ? '?' : '';
348
+ return `${propName}${optional}: ${propType}`;
349
+ }
350
+ return null;
351
+ })
352
+ .filter(Boolean)
353
+ .join('; ');
354
+ return `{ ${members} }`;
355
+ }
356
+ if (typeNode.getText && typeNode.getSourceFile?.()) {
357
+ return typeNode.getText();
358
+ }
359
+ return 'any';
360
+ }
361
+ catch (_) {
362
+ return 'any';
363
+ }
364
+ }
365
+ function getJsDoc(node) {
366
+ const jsDocTags = ts.getJSDocTags(node);
367
+ if (jsDocTags.length > 0) {
368
+ return jsDocTags.map((tag) => tag.comment).join('\n');
369
+ }
370
+ return undefined;
371
+ }
372
+ function generateClientClass(controller) {
373
+ const clientName = controller.name.replace('Controller', 'Client');
374
+ const methods = controller.methods.map((method) => generateClientMethod(controller.basePath, method));
375
+ const dtoImports = new Set();
376
+ const shouldImportType = (type) => {
377
+ if (PRIMITIVE_TYPES.has(type))
378
+ return false;
379
+ if (type.startsWith('{'))
380
+ return false;
381
+ if (type.includes('{') && type.includes('}'))
382
+ return false;
383
+ return true;
384
+ };
385
+ controller.methods.forEach((method) => {
386
+ method.params.forEach((param) => {
387
+ const baseType = param.type.replace('[]', '');
388
+ if (shouldImportType(baseType)) {
389
+ dtoImports.add(baseType);
390
+ }
391
+ });
392
+ const baseReturnType = method.returnType.replace('[]', '');
393
+ if (shouldImportType(baseReturnType)) {
394
+ dtoImports.add(baseReturnType);
395
+ }
396
+ });
397
+ const imports = Array.from(dtoImports).join(', ');
398
+ const importsSection = imports
399
+ ? `import {
400
+ ${imports}
401
+ } from "../../../dtos";
402
+ `
403
+ : '';
404
+ return `import {
405
+ BaseApiClient,
406
+ ApiClientOptions,
407
+ RequestOptions,
408
+ } from "@edifice.io/rest-client-base";
409
+ ${importsSection}
410
+ /**
411
+ * Client for interacting with the ${controller.tag || controller.name} API
412
+ * ${controller.jsdoc || ''}
413
+ *
414
+ * @example
415
+ * // Basic usage with fetch (default)
416
+ * const client = new ${clientName}();
417
+ *
418
+ * @example
419
+ * // With Edifice HttpService
420
+ * import { odeServices } from '@edifice.io/client';
421
+ *
422
+ * const httpService = odeServices.http();
423
+ * const client = new ${clientName}({
424
+ * httpService: httpService
425
+ * });
426
+ */
427
+ export class ${clientName} extends BaseApiClient {
428
+ /**
429
+ * Creates a new ${clientName}
430
+ * @param options Client configuration options
431
+ */
432
+ constructor(options: ApiClientOptions = {}) {
433
+ super(options);
434
+ }
435
+
436
+ ${methods.join('\n\n')}
437
+ }
438
+ `;
439
+ }
440
+ function generateClientMethod(basePath, method) {
441
+ const methodName = toCamelCase(method.name);
442
+ const params = [];
443
+ const queryParams = [];
444
+ const pathParams = new Map();
445
+ let bodyParam = null;
446
+ method.params.forEach((param) => {
447
+ const paramDeclaration = `${param.name}${param.isOptional ? '?' : ''}: ${param.type}`;
448
+ if (param.decorator === 'Param') {
449
+ params.push(paramDeclaration);
450
+ pathParams.set(param.name, param.type);
451
+ }
452
+ else if (param.decorator === 'Query') {
453
+ params.push(paramDeclaration);
454
+ queryParams.push(param.name);
455
+ }
456
+ else if (param.decorator === 'Body') {
457
+ params.push(paramDeclaration);
458
+ bodyParam = param.name;
459
+ }
460
+ });
461
+ params.push('options?: RequestOptions');
462
+ let url = basePath;
463
+ if (method.path) {
464
+ if (!basePath.endsWith('/') && !method.path.startsWith('/')) {
465
+ url += '/';
466
+ }
467
+ url += method.path;
468
+ }
469
+ pathParams.forEach((_, paramName) => {
470
+ url = url.replace(`:${paramName}`, `\${${paramName}}`);
471
+ });
472
+ const queryParamsCode = queryParams.length > 0
473
+ ? `
474
+ const queryParams = new URLSearchParams();
475
+ ${queryParams
476
+ .map((param) => {
477
+ const paramMeta = method.params.find((p) => p.name === param);
478
+ if (paramMeta?.isOptional) {
479
+ return ` if (${param}) queryParams.append("${param}", String(${param}));`;
480
+ }
481
+ return ` queryParams.append("${param}", String(${param}));`;
482
+ })
483
+ .join('\n')}
484
+ `
485
+ : '';
486
+ const queryArg = queryParams.length > 0 ? 'queryParams' : 'undefined';
487
+ const httpMethodLower = method.httpMethod.toLowerCase();
488
+ const returnType = method.returnType === 'void'
489
+ ? 'Promise<void>'
490
+ : `Promise<${method.returnType}>`;
491
+ const jsdoc = method.operationSummary || method.jsdoc || '';
492
+ let methodCall;
493
+ if (httpMethodLower === 'get' || httpMethodLower === 'delete') {
494
+ const genericType = method.returnType === 'void' ? '' : `<${method.returnType}>`;
495
+ methodCall = `this.${httpMethodLower}${genericType}(
496
+ \`${url}\`,
497
+ ${queryArg},
498
+ options
499
+ )`;
500
+ }
501
+ else {
502
+ const bodyArg = bodyParam || 'undefined';
503
+ const genericType = method.returnType === 'void' ? '' : `<${method.returnType}>`;
504
+ methodCall = `this.${httpMethodLower}${genericType}(
505
+ \`${url}\`,
506
+ ${bodyArg},
507
+ ${queryArg},
508
+ options
509
+ )`;
510
+ }
511
+ return ` /**
512
+ * ${jsdoc}
513
+ ${method.params.map((p) => ` * @param ${p.name} ${p.type}`).join('\n')}
514
+ * @param options Additional request options
515
+ * @returns ${method.returnType === 'void' ? 'void' : method.returnType}
516
+ */
517
+ async ${methodName}(
518
+ ${params.join(',\n ')}
519
+ ): ${returnType} {${queryParamsCode}
520
+ return ${methodCall};
521
+ }`;
522
+ }
523
+ function toCamelCase(str) {
524
+ return str.charAt(0).toLowerCase() + str.slice(1);
525
+ }
526
+ function generateIndexFile(clientOutputDir, controllers) {
527
+ const clientNames = controllers.map((controller) => controller.name.replace('Controller', 'Client'));
528
+ const imports = clientNames
529
+ .map((name) => {
530
+ const fileName = toCamelCase(name.replace('Client', ''));
531
+ return `export { ${name} } from "./${fileName}.client";`;
532
+ })
533
+ .join('\n');
534
+ const indexFilePath = path.join(clientOutputDir, 'clients', 'index.ts');
535
+ const indexContent = `// This file is auto-generated by generate-rest-clients.ts
536
+ // Do not edit manually
537
+
538
+ ${imports}
539
+ `;
540
+ fs.writeFileSync(indexFilePath, indexContent, 'utf-8');
541
+ console.log(`✅ Generated ${indexFilePath}`);
542
+ }
543
+ const args = process.argv.slice(2);
544
+ if (args.length < 2) {
545
+ console.warn('Usage: generate-rest-clients <backend-src-dir> <client-output-dir>');
546
+ }
547
+ const backendSrcDir = path.resolve(args[0] || './backend/src');
548
+ const clientOutputDir = path.resolve(args[1] || './client/rest/src/clients/generated');
549
+ const controllerFiles = [];
550
+ function findControllerFiles(dir) {
551
+ const files = fs.readdirSync(dir);
552
+ files.forEach((file) => {
553
+ const fullPath = path.join(dir, file);
554
+ if (fs.statSync(fullPath).isDirectory()) {
555
+ findControllerFiles(fullPath);
556
+ }
557
+ else if (file.endsWith('.controller.ts')) {
558
+ controllerFiles.push(fullPath);
559
+ }
560
+ });
561
+ }
562
+ findControllerFiles(backendSrcDir);
563
+ console.log(`Found ${controllerFiles.length} controller files`);
564
+ const allControllers = [];
565
+ controllerFiles.forEach((controllerFile) => {
566
+ console.log(`Processing ${controllerFile}...`);
567
+ const controllers = parseControllers(controllerFile);
568
+ allControllers.push(...controllers);
569
+ controllers.forEach((controller) => {
570
+ const clientName = controller.name.replace('Controller', 'Client');
571
+ const clientFileName = `${toCamelCase(clientName.replace('Client', ''))}.client.ts`;
572
+ const clientFilePath = path.join(clientOutputDir, 'clients', clientFileName);
573
+ const clientCode = generateClientClass(controller);
574
+ fs.mkdirSync(path.dirname(clientFilePath), { recursive: true });
575
+ fs.writeFileSync(clientFilePath, clientCode, 'utf-8');
576
+ console.log(`✅ Generated ${clientFilePath}`);
577
+ });
578
+ });
579
+ generateIndexFile(clientOutputDir, allControllers);
580
+ console.log('✅ Client generation complete!');
581
+ //# sourceMappingURL=generate-rest-clients.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-rest-clients.js","sourceRoot":"","sources":["../../src/bin/generate-rest-clients.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};