jszy-swagger-doc-generator 1.1.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.
- package/OpenAPI.md +298 -0
- package/README.md +193 -0
- package/__tests__/index.test.ts +152 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +154 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +137 -0
- package/dist/index.js +489 -0
- package/dist/index.js.map +1 -0
- package/package.json +54 -0
- package/src/cli.ts +122 -0
- package/src/index.ts +584 -0
- package/tsconfig.json +23 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,489 @@
|
|
|
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
|
+
/**
|
|
44
|
+
* Transforms a string to PascalCase
|
|
45
|
+
*/
|
|
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
|
+
/**
|
|
54
|
+
* Transforms a string to camelCase
|
|
55
|
+
*/
|
|
56
|
+
function toCamelCase(str) {
|
|
57
|
+
return str
|
|
58
|
+
.replace(/(?:^\w|[A-Z]|\b\w)/g, (word, index) => {
|
|
59
|
+
return index === 0 ? word.toLowerCase() : word.toUpperCase();
|
|
60
|
+
})
|
|
61
|
+
.replace(/\s+/g, '');
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Converts OpenAPI types to TypeScript types
|
|
65
|
+
*/
|
|
66
|
+
function convertTypeToTs(typeDef, schemaComponents) {
|
|
67
|
+
if (!typeDef)
|
|
68
|
+
return 'any';
|
|
69
|
+
if (typeDef.$ref) {
|
|
70
|
+
// Extract the type name from the reference
|
|
71
|
+
const refTypeName = typeDef.$ref.split('/').pop();
|
|
72
|
+
return refTypeName || 'any';
|
|
73
|
+
}
|
|
74
|
+
// Handle allOf (used for composition/references)
|
|
75
|
+
if (typeDef.allOf && Array.isArray(typeDef.allOf)) {
|
|
76
|
+
return typeDef.allOf.map((item) => {
|
|
77
|
+
if (item.$ref) {
|
|
78
|
+
return item.$ref.split('/').pop();
|
|
79
|
+
}
|
|
80
|
+
else if (item.type) {
|
|
81
|
+
return convertTypeToTs(item, schemaComponents);
|
|
82
|
+
}
|
|
83
|
+
return 'any';
|
|
84
|
+
}).filter(Boolean).join(' & ') || 'any';
|
|
85
|
+
}
|
|
86
|
+
if (Array.isArray(typeDef.type)) {
|
|
87
|
+
// Handle union types like ["string", "null"]
|
|
88
|
+
if (typeDef.type.includes('null')) {
|
|
89
|
+
const nonNullType = typeDef.type.find((t) => t !== 'null');
|
|
90
|
+
return `${convertTypeToTs({ ...typeDef, type: nonNullType }, schemaComponents)} | null`;
|
|
91
|
+
}
|
|
92
|
+
return 'any';
|
|
93
|
+
}
|
|
94
|
+
switch (typeDef.type) {
|
|
95
|
+
case 'string':
|
|
96
|
+
if (typeDef.enum) {
|
|
97
|
+
return `"${typeDef.enum.join('" | "')}"`;
|
|
98
|
+
}
|
|
99
|
+
if (typeDef.format === 'date' || typeDef.format === 'date-time') {
|
|
100
|
+
return 'string';
|
|
101
|
+
}
|
|
102
|
+
return 'string';
|
|
103
|
+
case 'integer':
|
|
104
|
+
case 'number':
|
|
105
|
+
return 'number';
|
|
106
|
+
case 'boolean':
|
|
107
|
+
return 'boolean';
|
|
108
|
+
case 'array':
|
|
109
|
+
if (typeDef.items) {
|
|
110
|
+
return `${convertTypeToTs(typeDef.items, schemaComponents)}[]`;
|
|
111
|
+
}
|
|
112
|
+
return 'any[]';
|
|
113
|
+
case 'object':
|
|
114
|
+
if (typeDef.properties) {
|
|
115
|
+
// Inline object definition
|
|
116
|
+
const fields = Object.entries(typeDef.properties)
|
|
117
|
+
.map(([propName, propSchema]) => {
|
|
118
|
+
const required = typeDef.required && typeDef.required.includes(propName);
|
|
119
|
+
const optional = !required ? '?' : '';
|
|
120
|
+
return ` ${propName}${optional}: ${convertTypeToTs(propSchema, schemaComponents)};`;
|
|
121
|
+
})
|
|
122
|
+
.join('\n');
|
|
123
|
+
return `{\n${fields}\n}`;
|
|
124
|
+
}
|
|
125
|
+
return 'Record<string, any>';
|
|
126
|
+
case 'null':
|
|
127
|
+
return 'null';
|
|
128
|
+
default:
|
|
129
|
+
return 'any';
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
class SwaggerDocGenerator {
|
|
133
|
+
/**
|
|
134
|
+
* Fetches the Swagger/OpenAPI JSON from a given URL
|
|
135
|
+
*/
|
|
136
|
+
async fetchSwaggerJSON(url) {
|
|
137
|
+
try {
|
|
138
|
+
const response = await axios_1.default.get(url);
|
|
139
|
+
return response.data;
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
if (error instanceof Error) {
|
|
143
|
+
throw new Error(`Failed to fetch Swagger JSON from ${url}: ${error.message}`);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
throw new Error(`Failed to fetch Swagger JSON from ${url}: ${String(error)}`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Loads Swagger JSON from a local file
|
|
152
|
+
*/
|
|
153
|
+
loadSwaggerFromFile(filePath) {
|
|
154
|
+
try {
|
|
155
|
+
const jsonData = fs.readFileSync(filePath, 'utf8');
|
|
156
|
+
return JSON.parse(jsonData);
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
if (error instanceof Error) {
|
|
160
|
+
throw new Error(`Failed to load Swagger JSON from ${filePath}: ${error.message}`);
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
throw new Error(`Failed to load Swagger JSON from ${filePath}: ${String(error)}`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Generates frontend documentation from the Swagger doc
|
|
169
|
+
*/
|
|
170
|
+
generateDocumentation(swaggerDoc) {
|
|
171
|
+
let documentation = `# ${swaggerDoc.info.title}\n\n`;
|
|
172
|
+
documentation += `${swaggerDoc.info.description || swaggerDoc.info.title} v${swaggerDoc.info.version}\n\n`;
|
|
173
|
+
// Add API endpoints section
|
|
174
|
+
documentation += "## API Endpoints\n\n";
|
|
175
|
+
Object.entries(swaggerDoc.paths).forEach(([path, methods]) => {
|
|
176
|
+
Object.entries(methods).forEach(([method, endpointInfo]) => {
|
|
177
|
+
documentation += `### ${method.toUpperCase()} ${path}\n\n`;
|
|
178
|
+
if (endpointInfo.summary) {
|
|
179
|
+
documentation += `**Summary:** ${endpointInfo.summary}\n\n`;
|
|
180
|
+
}
|
|
181
|
+
if (endpointInfo.description) {
|
|
182
|
+
documentation += `**Description:** ${endpointInfo.description}\n\n`;
|
|
183
|
+
}
|
|
184
|
+
// Add parameters
|
|
185
|
+
if (endpointInfo.parameters && endpointInfo.parameters.length > 0) {
|
|
186
|
+
documentation += "**Parameters:**\n\n";
|
|
187
|
+
endpointInfo.parameters.forEach(param => {
|
|
188
|
+
documentation += `- **${param.name}** (${param.in}): ${param.description || ''}`;
|
|
189
|
+
if (param.required) {
|
|
190
|
+
documentation += ' *(required)*';
|
|
191
|
+
}
|
|
192
|
+
documentation += '\n';
|
|
193
|
+
});
|
|
194
|
+
documentation += '\n';
|
|
195
|
+
}
|
|
196
|
+
// Add request body if present
|
|
197
|
+
if (endpointInfo.requestBody) {
|
|
198
|
+
documentation += "**Request Body:**\n\n";
|
|
199
|
+
Object.entries(endpointInfo.requestBody.content).forEach(([contentType, contentInfo]) => {
|
|
200
|
+
documentation += `- Content-Type: \`${contentType}\`\n`;
|
|
201
|
+
if (contentInfo.example) {
|
|
202
|
+
documentation += `\n**Example Request:**\n\`\`\`json\n${JSON.stringify(contentInfo.example, null, 2)}\n\`\`\`\n\n`;
|
|
203
|
+
}
|
|
204
|
+
else if (contentInfo.schema) {
|
|
205
|
+
documentation += `\n**Schema:**\n\`\`\`json\n${JSON.stringify(contentInfo.schema, null, 2)}\n\`\`\`\n\n`;
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
// Add responses
|
|
210
|
+
if (endpointInfo.responses) {
|
|
211
|
+
documentation += "**Responses:**\n\n";
|
|
212
|
+
Object.entries(endpointInfo.responses).forEach(([statusCode, responseInfo]) => {
|
|
213
|
+
documentation += `- **${statusCode}**: ${responseInfo.description}\n`;
|
|
214
|
+
if (responseInfo.content) {
|
|
215
|
+
Object.entries(responseInfo.content).forEach(([contentType, contentInfo]) => {
|
|
216
|
+
if (contentInfo.example) {
|
|
217
|
+
documentation += `\n**Example Response:**\n\`\`\`json\n${JSON.stringify(contentInfo.example, null, 2)}\n\`\`\`\n\n`;
|
|
218
|
+
}
|
|
219
|
+
else if (contentInfo.schema) {
|
|
220
|
+
documentation += `\n**Schema:**\n\`\`\`json\n${JSON.stringify(contentInfo.schema, null, 2)}\n\`\`\`\n\n`;
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
documentation += "---\n\n";
|
|
227
|
+
});
|
|
228
|
+
});
|
|
229
|
+
return documentation;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Generates TypeScript type definitions from the schemas in Swagger doc
|
|
233
|
+
*/
|
|
234
|
+
generateTypeDefinitions(swaggerDoc) {
|
|
235
|
+
if (!swaggerDoc.components?.schemas) {
|
|
236
|
+
return '';
|
|
237
|
+
}
|
|
238
|
+
let typeDefs = '// Auto-generated TypeScript types from Swagger schema\n\n';
|
|
239
|
+
Object.entries(swaggerDoc.components.schemas).forEach(([typeName, schema]) => {
|
|
240
|
+
typeDefs += this.generateSingleTypeDefinition(typeName, schema, swaggerDoc.components.schemas);
|
|
241
|
+
typeDefs += '\n';
|
|
242
|
+
});
|
|
243
|
+
return typeDefs;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Generates a single TypeScript type definition
|
|
247
|
+
*/
|
|
248
|
+
generateSingleTypeDefinition(typeName, schema, allSchemas) {
|
|
249
|
+
if (schema.enum) {
|
|
250
|
+
// Enum type
|
|
251
|
+
return `export type ${typeName} = ${schema.enum.map((val) => `'${val}'`).join(' | ')};\n`;
|
|
252
|
+
}
|
|
253
|
+
if (schema.oneOf || schema.anyOf || schema.allOf) {
|
|
254
|
+
// Union type or complex type
|
|
255
|
+
const typeOption = schema.oneOf ? 'oneOf' : schema.anyOf ? 'anyOf' : 'allOf';
|
|
256
|
+
const types = schema[typeOption].map((item) => {
|
|
257
|
+
if (item.$ref) {
|
|
258
|
+
return item.$ref.split('/').pop();
|
|
259
|
+
}
|
|
260
|
+
else if (item.type) {
|
|
261
|
+
return convertTypeToTs(item, allSchemas);
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
return 'any';
|
|
265
|
+
}
|
|
266
|
+
}).filter(Boolean);
|
|
267
|
+
return `export type ${typeName} = ${types.join(' | ')};\n`;
|
|
268
|
+
}
|
|
269
|
+
if (schema.type === 'object') {
|
|
270
|
+
// Object type
|
|
271
|
+
let result = `export interface ${typeName} {\n`;
|
|
272
|
+
if (schema.properties) {
|
|
273
|
+
Object.entries(schema.properties).forEach(([propName, propSchema]) => {
|
|
274
|
+
const required = schema.required && schema.required.includes(propName);
|
|
275
|
+
const optional = !required ? '?' : '';
|
|
276
|
+
// Add JSDoc comment if available
|
|
277
|
+
if (propSchema.description) {
|
|
278
|
+
result += ` /** ${propSchema.description} */\n`;
|
|
279
|
+
}
|
|
280
|
+
result += ` ${propName}${optional}: ${convertTypeToTs(propSchema, allSchemas)};\n`;
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
result += '}\n';
|
|
284
|
+
return result;
|
|
285
|
+
}
|
|
286
|
+
// For other types (string, number, etc.) that might have additional properties
|
|
287
|
+
return `export type ${typeName} = ${convertTypeToTs(schema, allSchemas)};\n`;
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Generates React hooks from the paths in Swagger doc
|
|
291
|
+
*/
|
|
292
|
+
generateReactHooks(swaggerDoc) {
|
|
293
|
+
const hooksByTag = new Map();
|
|
294
|
+
const schemas = swaggerDoc.components?.schemas || {};
|
|
295
|
+
// Group endpoints by tag
|
|
296
|
+
const endpointsByTag = {};
|
|
297
|
+
Object.entries(swaggerDoc.paths).forEach(([path, methods]) => {
|
|
298
|
+
Object.entries(methods).forEach(([method, endpointInfo]) => {
|
|
299
|
+
// Determine the tag for this endpoint
|
|
300
|
+
const tag = (endpointInfo.tags && endpointInfo.tags[0]) ? endpointInfo.tags[0] : 'General';
|
|
301
|
+
if (!endpointsByTag[tag]) {
|
|
302
|
+
endpointsByTag[tag] = [];
|
|
303
|
+
}
|
|
304
|
+
endpointsByTag[tag].push({ path, method, endpointInfo });
|
|
305
|
+
});
|
|
306
|
+
});
|
|
307
|
+
// Generate hooks for each tag
|
|
308
|
+
Object.entries(endpointsByTag).forEach(([tag, endpoints]) => {
|
|
309
|
+
let tagContent = this.generateHeaderForTag(tag);
|
|
310
|
+
// Generate all parameter interfaces for this tag first to avoid duplicates
|
|
311
|
+
const allParamInterfaces = [];
|
|
312
|
+
endpoints.forEach(({ path, method, endpointInfo }) => {
|
|
313
|
+
const paramInterface = this.generateParamInterface(path, method, endpointInfo, schemas);
|
|
314
|
+
if (paramInterface && !allParamInterfaces.includes(paramInterface)) {
|
|
315
|
+
allParamInterfaces.push(paramInterface);
|
|
316
|
+
}
|
|
317
|
+
});
|
|
318
|
+
// Add all unique parameter interfaces
|
|
319
|
+
allParamInterfaces.forEach(interfaceCode => {
|
|
320
|
+
tagContent += interfaceCode + '\n';
|
|
321
|
+
});
|
|
322
|
+
// Generate individual hooks
|
|
323
|
+
endpoints.forEach(({ path, method, endpointInfo }) => {
|
|
324
|
+
const hookContent = this.generateSingleHookWithUniqueName(path, method, endpointInfo, schemas);
|
|
325
|
+
tagContent += hookContent + '\n';
|
|
326
|
+
});
|
|
327
|
+
hooksByTag.set(tag, tagContent);
|
|
328
|
+
});
|
|
329
|
+
return hooksByTag;
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Generates header content for a specific tag
|
|
333
|
+
*/
|
|
334
|
+
generateHeaderForTag(tag) {
|
|
335
|
+
return `// ${toPascalCase(tag)} API Hooks\n\n`;
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Generates a parameter interface for an API endpoint
|
|
339
|
+
*/
|
|
340
|
+
generateParamInterface(path, method, endpointInfo, schemas) {
|
|
341
|
+
if (!endpointInfo.parameters || endpointInfo.parameters.length === 0) {
|
|
342
|
+
return '';
|
|
343
|
+
}
|
|
344
|
+
const pathParams = endpointInfo.parameters.filter((p) => p.in === 'path');
|
|
345
|
+
const queryParams = endpointInfo.parameters.filter((p) => p.in === 'query');
|
|
346
|
+
if (pathParams.length === 0 && queryParams.length === 0) {
|
|
347
|
+
return '';
|
|
348
|
+
}
|
|
349
|
+
// Create a unique interface name based on the operation ID
|
|
350
|
+
const operationId = endpointInfo.operationId || this.generateOperationId(path, method);
|
|
351
|
+
const interfaceName = `${toPascalCase(operationId)}Params`;
|
|
352
|
+
let paramsInterface = `export interface ${interfaceName} {\n`;
|
|
353
|
+
// Add path parameters
|
|
354
|
+
pathParams.forEach((param) => {
|
|
355
|
+
const required = param.required ? '' : '?';
|
|
356
|
+
const type = convertTypeToTs(param.schema || {}, schemas);
|
|
357
|
+
paramsInterface += ` ${toCamelCase(param.name)}${required}: ${type};\n`;
|
|
358
|
+
});
|
|
359
|
+
// Add query parameters
|
|
360
|
+
queryParams.forEach((param) => {
|
|
361
|
+
const required = param.required ? '' : '?';
|
|
362
|
+
const type = convertTypeToTs(param.schema || {}, schemas);
|
|
363
|
+
paramsInterface += ` ${toCamelCase(param.name)}${required}: ${type};\n`;
|
|
364
|
+
});
|
|
365
|
+
paramsInterface += '}\n';
|
|
366
|
+
return paramsInterface;
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Generates a single React hook for an API endpoint with unique parameter interface
|
|
370
|
+
*/
|
|
371
|
+
generateSingleHookWithUniqueName(path, method, endpointInfo, schemas) {
|
|
372
|
+
const operationId = endpointInfo.operationId || this.generateOperationId(path, method);
|
|
373
|
+
const hookName = `use${toPascalCase(operationId)}`;
|
|
374
|
+
// Use unique parameter interface name
|
|
375
|
+
const pathParams = endpointInfo.parameters?.filter((p) => p.in === 'path') || [];
|
|
376
|
+
const queryParams = endpointInfo.parameters?.filter((p) => p.in === 'query') || [];
|
|
377
|
+
let paramsDeclaration = '';
|
|
378
|
+
let paramsUsage = '{}';
|
|
379
|
+
const hasParams = pathParams.length > 0 || queryParams.length > 0;
|
|
380
|
+
if (hasParams) {
|
|
381
|
+
const paramInterfaceName = `${toPascalCase(operationId)}Params`;
|
|
382
|
+
paramsDeclaration = `params: ${paramInterfaceName}`;
|
|
383
|
+
paramsUsage = 'params';
|
|
384
|
+
}
|
|
385
|
+
// Format the path for use in the code (handle path parameters)
|
|
386
|
+
const pathWithParams = path.replace(/{(\w+)}/g, (_, param) => `\${params.${toCamelCase(param)}}`);
|
|
387
|
+
// Determine response type
|
|
388
|
+
let responseType = 'any';
|
|
389
|
+
if (endpointInfo.responses && endpointInfo.responses['200']) {
|
|
390
|
+
const responseSchema = endpointInfo.responses['200'].content?.['application/json']?.schema;
|
|
391
|
+
if (responseSchema) {
|
|
392
|
+
responseType = convertTypeToTs(responseSchema, schemas);
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
// Generate request body parameter if needed
|
|
396
|
+
let requestBodyParam = '';
|
|
397
|
+
if (method.toLowerCase() !== 'get' && method.toLowerCase() !== 'delete' && endpointInfo.requestBody) {
|
|
398
|
+
const bodySchema = endpointInfo.requestBody.content?.['application/json']?.schema;
|
|
399
|
+
if (bodySchema) {
|
|
400
|
+
const bodyType = convertTypeToTs(bodySchema, schemas);
|
|
401
|
+
requestBodyParam = `, body: ${bodyType}`;
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
// Create the hook function
|
|
405
|
+
let hookCode = `export const ${hookName} = () => {\n`;
|
|
406
|
+
hookCode += ` const apiCall = async (${paramsDeclaration}${requestBodyParam ? requestBodyParam : ''}) => {\n`;
|
|
407
|
+
hookCode += ` const path = \`\${process.env.REACT_APP_API_BASE_URL || ''}${pathWithParams}\`;\n`;
|
|
408
|
+
// Add query parameters
|
|
409
|
+
if (endpointInfo.parameters && endpointInfo.parameters.some((p) => p.in === 'query')) {
|
|
410
|
+
hookCode += ` const queryParams = new URLSearchParams();\n`;
|
|
411
|
+
endpointInfo.parameters.forEach((param) => {
|
|
412
|
+
if (param.in === 'query') {
|
|
413
|
+
hookCode += ` if (params.${toCamelCase(param.name)}) queryParams.append('${param.name}', params.${toCamelCase(param.name)}.toString());\n`;
|
|
414
|
+
}
|
|
415
|
+
});
|
|
416
|
+
hookCode += ` const queryString = queryParams.toString();\n`;
|
|
417
|
+
hookCode += ` const url = \`\${path}\${queryString ? '?' + queryString : ''}\`;\n`;
|
|
418
|
+
}
|
|
419
|
+
else {
|
|
420
|
+
hookCode += ` const url = path;\n`;
|
|
421
|
+
}
|
|
422
|
+
// Add fetch options
|
|
423
|
+
hookCode += ` const options: RequestInit = {\n`;
|
|
424
|
+
hookCode += ` method: '${method.toUpperCase()}',\n`;
|
|
425
|
+
if (requestBodyParam) {
|
|
426
|
+
hookCode += ` headers: {\n 'Content-Type': 'application/json',\n },\n`;
|
|
427
|
+
hookCode += ` body: JSON.stringify(body),\n`;
|
|
428
|
+
}
|
|
429
|
+
hookCode += ` };\n\n`;
|
|
430
|
+
hookCode += ` const result = await fetch(url, options);\n`;
|
|
431
|
+
hookCode += ` return result.json() as Promise<${responseType}>;\n`;
|
|
432
|
+
hookCode += ` };\n\n`;
|
|
433
|
+
hookCode += ` return { ${toCamelCase(operationId)}: apiCall };\n`;
|
|
434
|
+
hookCode += `};\n`;
|
|
435
|
+
return hookCode;
|
|
436
|
+
}
|
|
437
|
+
/**
|
|
438
|
+
* Generates a single React hook for an API endpoint
|
|
439
|
+
*/
|
|
440
|
+
generateSingleHook(path, method, endpointInfo, schemas) {
|
|
441
|
+
// This method is kept for backward compatibility
|
|
442
|
+
return this.generateSingleHookWithUniqueName(path, method, endpointInfo, schemas);
|
|
443
|
+
}
|
|
444
|
+
/**
|
|
445
|
+
* Generate operation ID from path and method if not provided
|
|
446
|
+
*/
|
|
447
|
+
generateOperationId(path, method) {
|
|
448
|
+
return `${method.toLowerCase()}_${path.replace(/[\/{}]/g, '_')}`;
|
|
449
|
+
}
|
|
450
|
+
/**
|
|
451
|
+
* Saves the generated documentation to a file
|
|
452
|
+
*/
|
|
453
|
+
saveDocumentationToFile(documentation, outputPath) {
|
|
454
|
+
const dir = path.dirname(outputPath);
|
|
455
|
+
if (!fs.existsSync(dir)) {
|
|
456
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
457
|
+
}
|
|
458
|
+
fs.writeFileSync(outputPath, documentation, 'utf8');
|
|
459
|
+
}
|
|
460
|
+
/**
|
|
461
|
+
* Saves the generated TypeScript types to a file
|
|
462
|
+
*/
|
|
463
|
+
saveTypesToFile(types, outputPath) {
|
|
464
|
+
const dir = path.dirname(outputPath);
|
|
465
|
+
if (!fs.existsSync(dir)) {
|
|
466
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
467
|
+
}
|
|
468
|
+
fs.writeFileSync(outputPath, types, 'utf8');
|
|
469
|
+
}
|
|
470
|
+
/**
|
|
471
|
+
* Saves the generated React hooks to files organized by tag
|
|
472
|
+
*/
|
|
473
|
+
saveHooksByTag(hooksByTag, outputDir) {
|
|
474
|
+
const dir = outputDir;
|
|
475
|
+
if (!fs.existsSync(dir)) {
|
|
476
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
477
|
+
}
|
|
478
|
+
for (const [tag, content] of hooksByTag) {
|
|
479
|
+
const tagDir = path.join(outputDir, toCamelCase(tag));
|
|
480
|
+
if (!fs.existsSync(tagDir)) {
|
|
481
|
+
fs.mkdirSync(tagDir, { recursive: true });
|
|
482
|
+
}
|
|
483
|
+
const fileName = path.join(tagDir, `${toCamelCase(tag)}.hooks.ts`);
|
|
484
|
+
fs.writeFileSync(fileName, content, 'utf8');
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
exports.SwaggerDocGenerator = SwaggerDocGenerator;
|
|
489
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "jszy-swagger-doc-generator",
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"description": "A tool to generate frontend documentation from Swagger/OpenAPI JSON files",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"swagger-doc-generator": "./dist/cli.js"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"build": "tsc",
|
|
11
|
+
"dev": "tsc --watch",
|
|
12
|
+
"start": "node dist/cli.js",
|
|
13
|
+
"test": "jest",
|
|
14
|
+
"test:watch": "jest --watch",
|
|
15
|
+
"test:coverage": "jest --coverage"
|
|
16
|
+
},
|
|
17
|
+
"keywords": [
|
|
18
|
+
"swagger",
|
|
19
|
+
"documentation",
|
|
20
|
+
"api",
|
|
21
|
+
"frontend",
|
|
22
|
+
"openapi"
|
|
23
|
+
],
|
|
24
|
+
"author": "Swagger Doc Generator Team",
|
|
25
|
+
"license": "MIT",
|
|
26
|
+
"dependencies": {
|
|
27
|
+
"axios": "^1.6.0",
|
|
28
|
+
"yargs": "^17.7.2"
|
|
29
|
+
},
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"@types/node": "^20.9.0",
|
|
32
|
+
"@types/yargs": "^17.0.24",
|
|
33
|
+
"typescript": "^5.2.2",
|
|
34
|
+
"jest": "^29.7.0",
|
|
35
|
+
"@types/jest": "^29.5.5",
|
|
36
|
+
"ts-jest": "^29.1.1"
|
|
37
|
+
},
|
|
38
|
+
"jest": {
|
|
39
|
+
"preset": "ts-jest",
|
|
40
|
+
"testEnvironment": "node",
|
|
41
|
+
"roots": [
|
|
42
|
+
"<rootDir>/__tests__"
|
|
43
|
+
],
|
|
44
|
+
"transform": {
|
|
45
|
+
"^.+\\.tsx?$": "ts-jest"
|
|
46
|
+
},
|
|
47
|
+
"testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.tsx?$",
|
|
48
|
+
"collectCoverageFrom": [
|
|
49
|
+
"src/**/*.{ts,tsx}",
|
|
50
|
+
"!src/index.ts",
|
|
51
|
+
"!src/cli.ts"
|
|
52
|
+
]
|
|
53
|
+
}
|
|
54
|
+
}
|