@edifice.io/edifice-nestjs-core 1.0.0-develop-pedago.20251211085539 → 1.0.0-develop-pedago.20251218101723

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.
@@ -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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"}