jszy-swagger-doc-generator 1.4.1 → 1.5.0

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,626 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.SwaggerDocGenerator = void 0;
40
+ const axios_1 = __importDefault(require("axios"));
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
43
+ const template_helpers_1 = require("../helpers/template.helpers");
44
+ const type_helpers_1 = require("../helpers/type.helpers");
45
+ // Define helper functions locally since we removed the helpers file
46
+ function toPascalCase(str) {
47
+ return str
48
+ .replace(/(?:^\w|[A-Z]|\b\w)/g, (word, index) => {
49
+ return index === 0 ? word.toUpperCase() : word.toUpperCase();
50
+ })
51
+ .replace(/\s+/g, '');
52
+ }
53
+ function toCamelCase(str) {
54
+ return str
55
+ .replace(/(?:^\w|[A-Z]|\b\w)/g, (word, index) => {
56
+ return index === 0 ? word.toLowerCase() : word.toUpperCase();
57
+ })
58
+ .replace(/\s+/g, '');
59
+ }
60
+ class SwaggerDocGenerator {
61
+ /**
62
+ * Fetches the Swagger/OpenAPI JSON from a given URL
63
+ */
64
+ async fetchSwaggerJSON(url) {
65
+ try {
66
+ const response = await axios_1.default.get(url);
67
+ return response.data;
68
+ }
69
+ catch (error) {
70
+ if (error instanceof Error) {
71
+ throw new Error(`Failed to fetch Swagger JSON from ${url}: ${error.message}`);
72
+ }
73
+ else {
74
+ throw new Error(`Failed to fetch Swagger JSON from ${url}: ${String(error)}`);
75
+ }
76
+ }
77
+ }
78
+ /**
79
+ * Loads Swagger JSON from a local file
80
+ */
81
+ loadSwaggerFromFile(filePath) {
82
+ try {
83
+ const jsonData = fs.readFileSync(filePath, 'utf8');
84
+ return JSON.parse(jsonData);
85
+ }
86
+ catch (error) {
87
+ if (error instanceof Error) {
88
+ throw new Error(`Failed to load Swagger JSON from ${filePath}: ${error.message}`);
89
+ }
90
+ else {
91
+ throw new Error(`Failed to load Swagger JSON from ${filePath}: ${String(error)}`);
92
+ }
93
+ }
94
+ }
95
+ /**
96
+ * Generates frontend resources using Handlebars templates
97
+ */
98
+ generateHandlebarsResources(swaggerDoc, templatePaths = {}) {
99
+ const resourcesByTag = new Map();
100
+ const schemas = swaggerDoc.components?.schemas || {};
101
+ // Group endpoints by tag
102
+ const endpointsByTag = {};
103
+ Object.entries(swaggerDoc.paths).forEach(([path, methods]) => {
104
+ Object.entries(methods).forEach(([method, endpointInfo]) => {
105
+ // Determine the tag for this endpoint
106
+ const tag = (endpointInfo.tags && endpointInfo.tags[0]) ? endpointInfo.tags[0] : 'General';
107
+ if (!endpointsByTag[tag]) {
108
+ endpointsByTag[tag] = [];
109
+ }
110
+ endpointsByTag[tag].push({ path, method, endpointInfo });
111
+ });
112
+ });
113
+ // Generate resources for each tag
114
+ Object.entries(endpointsByTag).forEach(([tag, endpoints]) => {
115
+ // Prepare context for templates
116
+ const context = {
117
+ title: swaggerDoc.info.title,
118
+ description: swaggerDoc.info.description || swaggerDoc.info.title,
119
+ version: swaggerDoc.info.version,
120
+ tag: tag,
121
+ endpoints: endpoints.map(e => ({
122
+ path: e.path,
123
+ method: e.method.toUpperCase(),
124
+ operationId: e.endpointInfo.operationId || this.generateOperationId(e.path, e.method),
125
+ summary: e.endpointInfo.summary,
126
+ description: e.endpointInfo.description,
127
+ parameters: e.endpointInfo.parameters || [],
128
+ responses: e.endpointInfo.responses,
129
+ requestBody: e.endpointInfo.requestBody
130
+ })),
131
+ schemas: schemas,
132
+ hasImportTypes: false,
133
+ usedTypeNames: [],
134
+ paramInterfaces: [],
135
+ hooks: [],
136
+ typeDefinitions: []
137
+ };
138
+ // Find types used in this tag
139
+ const directlyUsedSchemas = new Set();
140
+ if (schemas) {
141
+ Object.entries(schemas).forEach(([typeName, schema]) => {
142
+ if (this.isSchemaUsedInEndpoints(typeName, endpoints, schemas)) {
143
+ directlyUsedSchemas.add(typeName);
144
+ }
145
+ });
146
+ }
147
+ const allNeededSchemas = this.findAllReferencedSchemas(directlyUsedSchemas, schemas);
148
+ // Generate TypeScript types
149
+ let typesContent = '';
150
+ if (schemas) {
151
+ for (const typeName of allNeededSchemas) {
152
+ const schema = schemas[typeName];
153
+ if (schema) {
154
+ const typeDef = (0, type_helpers_1.generateSingleTypeDefinition)(typeName, schema, schemas);
155
+ typesContent += typeDef + '\n';
156
+ context.typeDefinitions.push(typeDef);
157
+ }
158
+ }
159
+ }
160
+ // Check if there are used types for import
161
+ if (allNeededSchemas.size > 0) {
162
+ context.hasImportTypes = true;
163
+ context.usedTypeNames = Array.from(allNeededSchemas);
164
+ }
165
+ // Generate parameter interfaces
166
+ const allParamInterfaces = [];
167
+ endpoints.forEach(({ path, method, endpointInfo }) => {
168
+ const paramInterface = this.generateParamInterface(path, method, endpointInfo, schemas);
169
+ if (paramInterface && !allParamInterfaces.includes(paramInterface)) {
170
+ allParamInterfaces.push(paramInterface);
171
+ }
172
+ });
173
+ context.paramInterfaces = allParamInterfaces;
174
+ // Generate individual hooks
175
+ const allHooks = [];
176
+ endpoints.forEach(({ path, method, endpointInfo }) => {
177
+ const hookContent = this.generateReactQueryHook(path, method, endpointInfo, schemas);
178
+ allHooks.push(hookContent);
179
+ });
180
+ context.hooks = allHooks;
181
+ // Generate resources using specified templates
182
+ let hooksContent = '';
183
+ if (templatePaths.hooks) {
184
+ try {
185
+ // Add utility functions to context for use in templates
186
+ context['camelCase'] = (str) => toCamelCase(str);
187
+ context['pascalCase'] = (str) => toPascalCase(str);
188
+ hooksContent = (0, template_helpers_1.compileTemplate)(templatePaths.hooks, context);
189
+ }
190
+ catch (error) {
191
+ // If template doesn't exist or fails, fall back to default generation
192
+ console.warn(`Failed to compile hooks template: ${templatePaths.hooks}`, error);
193
+ // Use the existing method as fallback
194
+ hooksContent = `// ${toPascalCase(tag)} API Hooks\n`;
195
+ hooksContent += `import { useQuery, useMutation, useQueryClient } from 'react-query';\n`;
196
+ hooksContent += `import axios from 'axios';\n`;
197
+ if (context.hasImportTypes) {
198
+ hooksContent += `import type { ${context.usedTypeNames.join(', ')} } from './${toCamelCase(tag)}.types';\n\n`;
199
+ }
200
+ else {
201
+ hooksContent += `\n`;
202
+ }
203
+ allParamInterfaces.forEach(interfaceCode => {
204
+ hooksContent += interfaceCode + '\n';
205
+ });
206
+ allHooks.forEach(hookCode => {
207
+ hooksContent += hookCode + '\n';
208
+ });
209
+ }
210
+ }
211
+ else {
212
+ // Default generation if no template is provided
213
+ hooksContent = `// ${toPascalCase(tag)} API Hooks\n`;
214
+ hooksContent += `import { useQuery, useMutation, useQueryClient } from 'react-query';\n`;
215
+ hooksContent += `import axios from 'axios';\n`;
216
+ if (context.hasImportTypes) {
217
+ hooksContent += `import type { ${context.usedTypeNames.join(', ')} } from './${toCamelCase(tag)}.types';\n\n`;
218
+ }
219
+ else {
220
+ hooksContent += `\n`;
221
+ }
222
+ allParamInterfaces.forEach(interfaceCode => {
223
+ hooksContent += interfaceCode + '\n';
224
+ });
225
+ allHooks.forEach(hookCode => {
226
+ hooksContent += hookCode + '\n';
227
+ });
228
+ }
229
+ resourcesByTag.set(tag, {
230
+ hooks: hooksContent,
231
+ types: typesContent
232
+ });
233
+ });
234
+ return resourcesByTag;
235
+ }
236
+ /**
237
+ * Checks if a schema is used in any of the endpoints
238
+ */
239
+ isSchemaUsedInEndpoints(schemaName, endpoints, allSchemas) {
240
+ for (const { endpointInfo } of endpoints) {
241
+ // Check if schema is used as response
242
+ if (endpointInfo.responses) {
243
+ for (const [, responseInfo] of Object.entries(endpointInfo.responses)) {
244
+ if (responseInfo.content) {
245
+ for (const [, contentInfo] of Object.entries(responseInfo.content)) {
246
+ if (contentInfo.schema) {
247
+ if (this.schemaContainsRef(contentInfo.schema, schemaName, allSchemas)) {
248
+ return true;
249
+ }
250
+ }
251
+ }
252
+ }
253
+ }
254
+ }
255
+ // Check if schema is used in parameters
256
+ if (endpointInfo.parameters) {
257
+ for (const param of endpointInfo.parameters) {
258
+ if (param.schema && this.schemaContainsRef(param.schema, schemaName, allSchemas)) {
259
+ return true;
260
+ }
261
+ }
262
+ }
263
+ // Check if schema is used in request body
264
+ if (endpointInfo.requestBody && endpointInfo.requestBody.content) {
265
+ for (const [, contentInfo] of Object.entries(endpointInfo.requestBody.content)) {
266
+ if (contentInfo.schema && this.schemaContainsRef(contentInfo.schema, schemaName, allSchemas)) {
267
+ return true;
268
+ }
269
+ }
270
+ }
271
+ }
272
+ return false;
273
+ }
274
+ /**
275
+ * Checks if a schema contains a reference to another schema
276
+ */
277
+ schemaContainsRef(schema, targetSchemaName, allSchemas) {
278
+ if (!schema)
279
+ return false;
280
+ // Check if this schema directly references the target
281
+ if (schema.$ref) {
282
+ const refTypeName = schema.$ref.split('/').pop();
283
+ if (refTypeName === targetSchemaName) {
284
+ return true;
285
+ }
286
+ }
287
+ // Recursively check nested properties
288
+ if (schema.properties) {
289
+ for (const [, propSchema] of Object.entries(schema.properties)) {
290
+ if (this.schemaContainsRef(propSchema, targetSchemaName, allSchemas)) {
291
+ return true;
292
+ }
293
+ }
294
+ }
295
+ // Check if it's an array schema
296
+ if (schema.items) {
297
+ if (this.schemaContainsRef(schema.items, targetSchemaName, allSchemas)) {
298
+ return true;
299
+ }
300
+ }
301
+ // Check allOf, oneOf, anyOf
302
+ if (schema.allOf) {
303
+ for (const item of schema.allOf) {
304
+ if (this.schemaContainsRef(item, targetSchemaName, allSchemas)) {
305
+ return true;
306
+ }
307
+ }
308
+ }
309
+ if (schema.oneOf) {
310
+ for (const item of schema.oneOf) {
311
+ if (this.schemaContainsRef(item, targetSchemaName, allSchemas)) {
312
+ return true;
313
+ }
314
+ }
315
+ }
316
+ if (schema.anyOf) {
317
+ for (const item of schema.anyOf) {
318
+ if (this.schemaContainsRef(item, targetSchemaName, allSchemas)) {
319
+ return true;
320
+ }
321
+ }
322
+ }
323
+ return false;
324
+ }
325
+ /**
326
+ * Find all referenced schemas from a set of directly used schemas
327
+ */
328
+ findAllReferencedSchemas(initialSchemas, allSchemas) {
329
+ const result = new Set([...initialSchemas]); // Start with initial schemas
330
+ let changed = true;
331
+ while (changed) {
332
+ changed = false;
333
+ for (const typeName of [...result]) { // Use spread to create a new array to avoid concurrent modification
334
+ const schema = allSchemas[typeName];
335
+ if (schema) {
336
+ // Check for references in the schema
337
+ const referencedSchemas = this.findSchemaReferences(schema, allSchemas);
338
+ for (const refName of referencedSchemas) {
339
+ if (!result.has(refName) && allSchemas[refName]) {
340
+ result.add(refName);
341
+ changed = true;
342
+ }
343
+ }
344
+ }
345
+ }
346
+ }
347
+ return result;
348
+ }
349
+ /**
350
+ * Find schema references in a given schema
351
+ */
352
+ findSchemaReferences(schema, allSchemas) {
353
+ const references = new Set();
354
+ if (!schema)
355
+ return references;
356
+ // Check direct $ref
357
+ if (schema.$ref) {
358
+ const refTypeName = schema.$ref.split('/').pop();
359
+ if (refTypeName && allSchemas[refTypeName]) {
360
+ references.add(refTypeName);
361
+ }
362
+ }
363
+ // Check properties
364
+ if (schema.properties) {
365
+ Object.values(schema.properties).forEach((propSchema) => {
366
+ const nestedRefs = this.findSchemaReferences(propSchema, allSchemas);
367
+ nestedRefs.forEach(ref => references.add(ref));
368
+ });
369
+ }
370
+ // Check array items
371
+ if (schema.items) {
372
+ const itemRefs = this.findSchemaReferences(schema.items, allSchemas);
373
+ itemRefs.forEach(ref => references.add(ref));
374
+ }
375
+ // Check allOf, oneOf, anyOf
376
+ if (schema.allOf) {
377
+ schema.allOf.forEach((item) => {
378
+ const itemRefs = this.findSchemaReferences(item, allSchemas);
379
+ itemRefs.forEach(ref => references.add(ref));
380
+ });
381
+ }
382
+ if (schema.oneOf) {
383
+ schema.oneOf.forEach((item) => {
384
+ const itemRefs = this.findSchemaReferences(item, allSchemas);
385
+ itemRefs.forEach(ref => references.add(ref));
386
+ });
387
+ }
388
+ if (schema.anyOf) {
389
+ schema.anyOf.forEach((item) => {
390
+ const itemRefs = this.findSchemaReferences(item, allSchemas);
391
+ itemRefs.forEach(ref => references.add(ref));
392
+ });
393
+ }
394
+ return references;
395
+ }
396
+ /**
397
+ * Generates a parameter interface for an API endpoint
398
+ */
399
+ generateParamInterface(path, method, endpointInfo, schemas) {
400
+ if (!endpointInfo.parameters || endpointInfo.parameters.length === 0) {
401
+ return '';
402
+ }
403
+ const pathParams = endpointInfo.parameters.filter((p) => p.in === 'path');
404
+ const queryParams = endpointInfo.parameters.filter((p) => p.in === 'query');
405
+ if (pathParams.length === 0 && queryParams.length === 0) {
406
+ return '';
407
+ }
408
+ // Create a unique interface name based on the operation ID
409
+ const operationId = endpointInfo.operationId || this.generateOperationId(path, method);
410
+ // Extract action name from operationId to create cleaner parameter interface names
411
+ // e.g. configController_updateConfig -> UpdateConfigParams instead of ConfigController_updateConfigParams
412
+ let interfaceName;
413
+ if (operationId.includes('_')) {
414
+ const parts = operationId.split('_');
415
+ if (parts.length >= 2) {
416
+ // Use just the action part in the interface name
417
+ interfaceName = `${toPascalCase(parts[parts.length - 1])}Params`;
418
+ }
419
+ else {
420
+ interfaceName = `${toPascalCase(operationId)}Params`;
421
+ }
422
+ }
423
+ else {
424
+ interfaceName = `${toPascalCase(operationId)}Params`;
425
+ }
426
+ let paramsInterface = `export interface ${interfaceName} {\n`;
427
+ // Add path parameters
428
+ pathParams.forEach((param) => {
429
+ const required = param.required ? '' : '?';
430
+ const type = (0, type_helpers_1.convertTypeToTs)(param.schema || {}, schemas);
431
+ paramsInterface += ` ${toCamelCase(param.name)}${required}: ${type};\n`;
432
+ });
433
+ // Add query parameters
434
+ queryParams.forEach((param) => {
435
+ const required = param.required ? '' : '?';
436
+ const type = (0, type_helpers_1.convertTypeToTs)(param.schema || {}, schemas);
437
+ paramsInterface += ` ${toCamelCase(param.name)}${required}: ${type};\n`;
438
+ });
439
+ paramsInterface += '}\n';
440
+ return paramsInterface;
441
+ }
442
+ /**
443
+ * Generates a React Query hook using axios
444
+ */
445
+ generateReactQueryHook(path, method, endpointInfo, schemas) {
446
+ const operationId = endpointInfo.operationId || this.generateOperationId(path, method);
447
+ // Extract action name from operationId to create cleaner hook names
448
+ // e.g. configController_updateConfig -> useUpdateConfig instead of useConfigController_updateConfig
449
+ let hookName = `use${toPascalCase(operationId)}`;
450
+ // Check if operationId follows pattern controller_action and simplify to action
451
+ if (operationId.includes('_')) {
452
+ const parts = operationId.split('_');
453
+ if (parts.length >= 2) {
454
+ // Use just the action part as the hook name
455
+ hookName = `use${toPascalCase(parts[parts.length - 1])}`;
456
+ }
457
+ }
458
+ else {
459
+ // For operationIds without underscores, keep the original naming
460
+ hookName = `use${toPascalCase(operationId)}`;
461
+ }
462
+ // Use unique parameter interface name
463
+ const pathParams = endpointInfo.parameters?.filter((p) => p.in === 'path') || [];
464
+ const queryParams = endpointInfo.parameters?.filter((p) => p.in === 'query') || [];
465
+ // Determine response type by checking common success response codes
466
+ let responseType = 'any';
467
+ if (endpointInfo.responses) {
468
+ // Check for success responses in order of preference: 200, 201, 204, etc.
469
+ const successCodes = ['200', '201', '204', '202', '203', '205'];
470
+ for (const code of successCodes) {
471
+ if (endpointInfo.responses[code]) {
472
+ const responseSchema = endpointInfo.responses[code].content?.['application/json']?.schema;
473
+ if (responseSchema) {
474
+ responseType = (0, type_helpers_1.convertTypeToTs)(responseSchema, schemas);
475
+ break; // Use the first success response found
476
+ }
477
+ }
478
+ }
479
+ }
480
+ // Generate request body parameter if needed
481
+ let requestBodyType = 'any';
482
+ if (method.toLowerCase() !== 'get' && method.toLowerCase() !== 'delete' && endpointInfo.requestBody) {
483
+ const bodySchema = endpointInfo.requestBody.content?.['application/json']?.schema;
484
+ if (bodySchema) {
485
+ requestBodyType = (0, type_helpers_1.convertTypeToTs)(bodySchema, schemas);
486
+ }
487
+ }
488
+ // Format the path for use in the code (handle path parameters) - without base URL
489
+ const formattedPath = path.replace(/{(\w+)}/g, (_, param) => `\${params.${toCamelCase(param)}}`);
490
+ // Prepare data for the template
491
+ const hookData = {
492
+ hookName: hookName,
493
+ operationId: operationId,
494
+ method: method.toLowerCase(),
495
+ responseType: responseType,
496
+ requestBodyType: requestBodyType,
497
+ hasParams: pathParams.length > 0 || queryParams.length > 0,
498
+ hasPathParams: pathParams.length > 0,
499
+ paramInterfaceName: `${hookName.replace('use', '')}Params`,
500
+ formattedPath: formattedPath,
501
+ isGetRequest: method.toLowerCase() === 'get'
502
+ };
503
+ // Load and compile the individual hook template
504
+ const fs = require('fs');
505
+ const pathModule = require('path');
506
+ const templatePath = pathModule.join(__dirname, '..', '..', 'templates', 'hooks', 'individual-hook.hbs');
507
+ try {
508
+ const templateSource = fs.readFileSync(templatePath, 'utf8');
509
+ const Handlebars = require('handlebars');
510
+ const template = Handlebars.compile(templateSource);
511
+ return template(hookData);
512
+ }
513
+ catch (error) {
514
+ console.error(`Error reading template file: ${error.message}`);
515
+ return `// Error generating hook for ${operationId}: ${error.message}`;
516
+ }
517
+ }
518
+ /**
519
+ * Generate operation ID from path and method if not provided
520
+ */
521
+ generateOperationId(path, method) {
522
+ return `${method.toLowerCase()}_${path.replace(/[\/{}]/g, '_')}`;
523
+ }
524
+ /**
525
+ * Formats code using Prettier - sync version with child process
526
+ */
527
+ formatCode(code, filepath) {
528
+ // Skip formatting in test environment to avoid ESM issues
529
+ if (process.env.NODE_ENV === 'test' || typeof jest !== 'undefined') {
530
+ return code;
531
+ }
532
+ try {
533
+ // Use execSync to run prettier as a separate process to avoid ESM issues
534
+ const { execSync } = require('child_process');
535
+ const { writeFileSync, readFileSync, unlinkSync } = require('fs');
536
+ const { join, extname } = require('path');
537
+ const { tmpdir } = require('os');
538
+ // Determine the file extension to use for the temp file
539
+ const fileExtension = extname(filepath) || '.txt';
540
+ const tempPath = join(tmpdir(), `prettier-tmp-${Date.now()}-${Math.random().toString(36).substr(2, 9)}${fileExtension}`);
541
+ writeFileSync(tempPath, code, 'utf8');
542
+ // Format the file using prettier CLI
543
+ execSync(`npx prettier --write "${tempPath}" --single-quote --trailing-comma es5 --tab-width 2 --semi --print-width 80`, {
544
+ stdio: 'pipe'
545
+ });
546
+ // Read the formatted content back
547
+ const formattedCode = readFileSync(tempPath, 'utf8');
548
+ // Clean up the temporary file
549
+ unlinkSync(tempPath);
550
+ return formattedCode;
551
+ }
552
+ catch (error) {
553
+ console.warn(`Failed to format ${filepath} with Prettier:`, error);
554
+ return code; // Return unformatted code if formatting fails
555
+ }
556
+ }
557
+ /**
558
+ * Gets the parser based on file extension
559
+ */
560
+ getParserForFile(filepath) {
561
+ const ext = path.extname(filepath);
562
+ switch (ext) {
563
+ case '.ts':
564
+ case '.tsx':
565
+ return 'typescript';
566
+ case '.js':
567
+ case '.jsx':
568
+ return 'babel';
569
+ case '.json':
570
+ return 'json';
571
+ case '.md':
572
+ return 'markdown';
573
+ default:
574
+ return 'typescript';
575
+ }
576
+ }
577
+ /**
578
+ * Saves the generated documentation to a file
579
+ */
580
+ saveDocumentationToFile(documentation, outputPath) {
581
+ const dir = path.dirname(outputPath);
582
+ if (!fs.existsSync(dir)) {
583
+ fs.mkdirSync(dir, { recursive: true });
584
+ }
585
+ const formattedDocumentation = this.formatCode(documentation, outputPath);
586
+ fs.writeFileSync(outputPath, formattedDocumentation, 'utf8');
587
+ }
588
+ /**
589
+ * Saves the generated TypeScript types to a file
590
+ */
591
+ saveTypesToFile(types, outputPath) {
592
+ const dir = path.dirname(outputPath);
593
+ if (!fs.existsSync(dir)) {
594
+ fs.mkdirSync(dir, { recursive: true });
595
+ }
596
+ const formattedTypes = this.formatCode(types, outputPath);
597
+ fs.writeFileSync(outputPath, formattedTypes, 'utf8');
598
+ }
599
+ /**
600
+ * Saves the generated React hooks to files organized by tag
601
+ */
602
+ saveHooksByTag(hooksByTag, outputDir) {
603
+ const dir = outputDir;
604
+ if (!fs.existsSync(dir)) {
605
+ fs.mkdirSync(dir, { recursive: true });
606
+ }
607
+ for (const [tag, { hooks, types }] of hooksByTag) {
608
+ const tagDir = path.join(outputDir, toCamelCase(tag));
609
+ if (!fs.existsSync(tagDir)) {
610
+ fs.mkdirSync(tagDir, { recursive: true });
611
+ }
612
+ // Save hooks to hooks file
613
+ const hooksFileName = path.join(tagDir, `${toCamelCase(tag)}.hooks.ts`);
614
+ const formattedHooks = this.formatCode(hooks, hooksFileName);
615
+ fs.writeFileSync(hooksFileName, formattedHooks, 'utf8');
616
+ // Save types to types file
617
+ if (types.trim()) { // Only save if there are types
618
+ const typesFileName = path.join(tagDir, `${toCamelCase(tag)}.types.ts`);
619
+ const formattedTypes = this.formatCode(types, typesFileName);
620
+ fs.writeFileSync(typesFileName, formattedTypes, 'utf8');
621
+ }
622
+ }
623
+ }
624
+ }
625
+ exports.SwaggerDocGenerator = SwaggerDocGenerator;
626
+ //# sourceMappingURL=swagger.generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swagger.generator.js","sourceRoot":"","sources":["../../src/generators/swagger.generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Register all Handlebars helpers used in templates
3
+ */
4
+ export declare function registerHandlebarHelpers(): void;