swagger-to-playwright-api-clients 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +190 -0
- package/dist/api.d.ts +27 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +127 -0
- package/dist/api.js.map +1 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +255 -0
- package/dist/cli.js.map +1 -0
- package/dist/clients/BaseAPIClient.d.ts +88 -0
- package/dist/clients/BaseAPIClient.d.ts.map +1 -0
- package/dist/clients/BaseAPIClient.js +199 -0
- package/dist/clients/BaseAPIClient.js.map +1 -0
- package/dist/config/types.d.ts +72 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +19 -0
- package/dist/config/types.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +55 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/copyBaseClient.d.ts +8 -0
- package/dist/utils/copyBaseClient.d.ts.map +1 -0
- package/dist/utils/copyBaseClient.js +354 -0
- package/dist/utils/copyBaseClient.js.map +1 -0
- package/dist/utils/logger.d.ts +6 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +57 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/swagger/ClientGenerator.d.ts +49 -0
- package/dist/utils/swagger/ClientGenerator.d.ts.map +1 -0
- package/dist/utils/swagger/ClientGenerator.js +192 -0
- package/dist/utils/swagger/ClientGenerator.js.map +1 -0
- package/dist/utils/swagger/FileWriter.d.ts +66 -0
- package/dist/utils/swagger/FileWriter.d.ts.map +1 -0
- package/dist/utils/swagger/FileWriter.js +185 -0
- package/dist/utils/swagger/FileWriter.js.map +1 -0
- package/dist/utils/swagger/SwaggerGenerator.d.ts +42 -0
- package/dist/utils/swagger/SwaggerGenerator.d.ts.map +1 -0
- package/dist/utils/swagger/SwaggerGenerator.js +211 -0
- package/dist/utils/swagger/SwaggerGenerator.js.map +1 -0
- package/dist/utils/swagger/SwaggerParser.d.ts +69 -0
- package/dist/utils/swagger/SwaggerParser.d.ts.map +1 -0
- package/dist/utils/swagger/SwaggerParser.js +358 -0
- package/dist/utils/swagger/SwaggerParser.js.map +1 -0
- package/dist/utils/swagger/TypeGenerator.d.ts +49 -0
- package/dist/utils/swagger/TypeGenerator.d.ts.map +1 -0
- package/dist/utils/swagger/TypeGenerator.js +166 -0
- package/dist/utils/swagger/TypeGenerator.js.map +1 -0
- package/dist/utils/swagger/index.d.ts +12 -0
- package/dist/utils/swagger/index.d.ts.map +1 -0
- package/dist/utils/swagger/index.js +38 -0
- package/dist/utils/swagger/index.js.map +1 -0
- package/dist/utils/swagger/run-generator.d.ts +23 -0
- package/dist/utils/swagger/run-generator.d.ts.map +1 -0
- package/dist/utils/swagger/run-generator.js +195 -0
- package/dist/utils/swagger/run-generator.js.map +1 -0
- package/dist/utils/swagger/types.d.ts +142 -0
- package/dist/utils/swagger/types.d.ts.map +1 -0
- package/dist/utils/swagger/types.js +7 -0
- package/dist/utils/swagger/types.js.map +1 -0
- package/dist/utils/swagger/utils/naming.d.ts +48 -0
- package/dist/utils/swagger/utils/naming.d.ts.map +1 -0
- package/dist/utils/swagger/utils/naming.js +109 -0
- package/dist/utils/swagger/utils/naming.js.map +1 -0
- package/dist/utils/swagger/utils/pathUtils.d.ts +40 -0
- package/dist/utils/swagger/utils/pathUtils.d.ts.map +1 -0
- package/dist/utils/swagger/utils/pathUtils.js +118 -0
- package/dist/utils/swagger/utils/pathUtils.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FileWriter - Handles file organization and writing for generated code
|
|
3
|
+
* Creates proper folder structure and writes TypeScript files
|
|
4
|
+
*/
|
|
5
|
+
export interface FileOutput {
|
|
6
|
+
filePath: string;
|
|
7
|
+
content: string;
|
|
8
|
+
}
|
|
9
|
+
export interface FolderStructure {
|
|
10
|
+
serviceName: string;
|
|
11
|
+
folders: Map<string, FileOutput[]>;
|
|
12
|
+
}
|
|
13
|
+
export declare class FileWriter {
|
|
14
|
+
private outputDir;
|
|
15
|
+
private files;
|
|
16
|
+
constructor(outputDir: string);
|
|
17
|
+
/**
|
|
18
|
+
* Add a file to be written
|
|
19
|
+
*/
|
|
20
|
+
addFile(relativePath: string, content: string): void;
|
|
21
|
+
/**
|
|
22
|
+
* Add types file for a service folder
|
|
23
|
+
*/
|
|
24
|
+
addTypesFile(folderPath: string[], typeDefinitions: string): void;
|
|
25
|
+
/**
|
|
26
|
+
* Add client file for a service folder
|
|
27
|
+
*/
|
|
28
|
+
addClientFile(folderPath: string[], className: string, content: string): void;
|
|
29
|
+
/**
|
|
30
|
+
* Add index file for exports
|
|
31
|
+
*/
|
|
32
|
+
addIndexFile(folderPath: string[], exports: string[]): void;
|
|
33
|
+
/**
|
|
34
|
+
* Add root index file that exports all services
|
|
35
|
+
*/
|
|
36
|
+
addRootIndex(serviceFolders: string[]): void;
|
|
37
|
+
/**
|
|
38
|
+
* Write all files to disk
|
|
39
|
+
*/
|
|
40
|
+
writeAll(): Promise<string[]>;
|
|
41
|
+
/**
|
|
42
|
+
* Get all files to be written (for preview)
|
|
43
|
+
*/
|
|
44
|
+
getFiles(): FileOutput[];
|
|
45
|
+
/**
|
|
46
|
+
* Preview the folder structure
|
|
47
|
+
*/
|
|
48
|
+
previewStructure(): string;
|
|
49
|
+
/**
|
|
50
|
+
* Ensure directory exists
|
|
51
|
+
*/
|
|
52
|
+
private ensureDir;
|
|
53
|
+
/**
|
|
54
|
+
* Format content with proper indentation
|
|
55
|
+
*/
|
|
56
|
+
private formatContent;
|
|
57
|
+
/**
|
|
58
|
+
* Clear all pending files
|
|
59
|
+
*/
|
|
60
|
+
clear(): void;
|
|
61
|
+
/**
|
|
62
|
+
* Get output directory
|
|
63
|
+
*/
|
|
64
|
+
getOutputDir(): string;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=FileWriter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileWriter.d.ts","sourceRoot":"","sources":["../../../src/utils/swagger/FileWriter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,UAAU;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;CACnC;AAED,qBAAa,UAAU;IACtB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,KAAK,CAAoB;gBAErB,SAAS,EAAE,MAAM;IAI7B;;OAEG;IACH,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAOpD;;OAEG;IACH,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI;IAYjE;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAY7E;;OAEG;IACH,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAM3D;;OAEG;IACH,YAAY,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,IAAI;IAQ5C;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAYnC;;OAEG;IACH,QAAQ,IAAI,UAAU,EAAE;IAIxB;;OAEG;IACH,gBAAgB,IAAI,MAAM;IA8B1B;;OAEG;YACW,SAAS;IAWvB;;OAEG;IACH,OAAO,CAAC,aAAa;IAKrB;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,YAAY,IAAI,MAAM;CAGtB"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* FileWriter - Handles file organization and writing for generated code
|
|
4
|
+
* Creates proper folder structure and writes TypeScript files
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.FileWriter = void 0;
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const naming_1 = require("./utils/naming");
|
|
44
|
+
class FileWriter {
|
|
45
|
+
outputDir;
|
|
46
|
+
files = [];
|
|
47
|
+
constructor(outputDir) {
|
|
48
|
+
this.outputDir = outputDir;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Add a file to be written
|
|
52
|
+
*/
|
|
53
|
+
addFile(relativePath, content) {
|
|
54
|
+
this.files.push({
|
|
55
|
+
filePath: path.join(this.outputDir, relativePath),
|
|
56
|
+
content: this.formatContent(content),
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Add types file for a service folder
|
|
61
|
+
*/
|
|
62
|
+
addTypesFile(folderPath, typeDefinitions) {
|
|
63
|
+
const relativePath = path.join(...folderPath, 'types.ts');
|
|
64
|
+
const content = `/**
|
|
65
|
+
* Auto-generated TypeScript types
|
|
66
|
+
* DO NOT EDIT - This file is generated from Swagger/OpenAPI specification
|
|
67
|
+
*/
|
|
68
|
+
|
|
69
|
+
${typeDefinitions}
|
|
70
|
+
`;
|
|
71
|
+
this.addFile(relativePath, content);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Add client file for a service folder
|
|
75
|
+
*/
|
|
76
|
+
addClientFile(folderPath, className, content) {
|
|
77
|
+
const fileName = `${className}.ts`;
|
|
78
|
+
const relativePath = path.join(...folderPath, fileName);
|
|
79
|
+
const headerContent = `/**
|
|
80
|
+
* Auto-generated API Client
|
|
81
|
+
* DO NOT EDIT - This file is generated from Swagger/OpenAPI specification
|
|
82
|
+
*/
|
|
83
|
+
|
|
84
|
+
${content}`;
|
|
85
|
+
this.addFile(relativePath, headerContent);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Add index file for exports
|
|
89
|
+
*/
|
|
90
|
+
addIndexFile(folderPath, exports) {
|
|
91
|
+
const relativePath = path.join(...folderPath, 'index.ts');
|
|
92
|
+
const content = exports.map((e) => `export * from './${e}';`).join('\n');
|
|
93
|
+
this.addFile(relativePath, `${content}\n`);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Add root index file that exports all services
|
|
97
|
+
*/
|
|
98
|
+
addRootIndex(serviceFolders) {
|
|
99
|
+
const exports = serviceFolders.map((folder) => {
|
|
100
|
+
const pascalName = (0, naming_1.toPascalCase)(folder);
|
|
101
|
+
return `export * as ${pascalName} from './${folder}';`;
|
|
102
|
+
});
|
|
103
|
+
this.addFile('index.ts', exports.join('\n') + '\n');
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Write all files to disk
|
|
107
|
+
*/
|
|
108
|
+
async writeAll() {
|
|
109
|
+
const writtenFiles = [];
|
|
110
|
+
for (const file of this.files) {
|
|
111
|
+
await this.ensureDir(path.dirname(file.filePath));
|
|
112
|
+
await fs.promises.writeFile(file.filePath, file.content, 'utf-8');
|
|
113
|
+
writtenFiles.push(file.filePath);
|
|
114
|
+
}
|
|
115
|
+
return writtenFiles;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Get all files to be written (for preview)
|
|
119
|
+
*/
|
|
120
|
+
getFiles() {
|
|
121
|
+
return this.files;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Preview the folder structure
|
|
125
|
+
*/
|
|
126
|
+
previewStructure() {
|
|
127
|
+
const tree = [];
|
|
128
|
+
const dirs = new Set();
|
|
129
|
+
// Sort files for consistent output
|
|
130
|
+
const sortedFiles = [...this.files].sort((a, b) => a.filePath.localeCompare(b.filePath));
|
|
131
|
+
for (const file of sortedFiles) {
|
|
132
|
+
const relativePath = path.relative(this.outputDir, file.filePath);
|
|
133
|
+
const parts = relativePath.split(path.sep);
|
|
134
|
+
// Add directories
|
|
135
|
+
let currentPath = '';
|
|
136
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
137
|
+
currentPath = currentPath ? `${currentPath}/${parts[i]}` : parts[i];
|
|
138
|
+
if (!dirs.has(currentPath)) {
|
|
139
|
+
dirs.add(currentPath);
|
|
140
|
+
const indent = ' '.repeat(i);
|
|
141
|
+
tree.push(`${indent}${parts[i]}/`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// Add file
|
|
145
|
+
const indent = ' '.repeat(parts.length - 1);
|
|
146
|
+
tree.push(`${indent}${parts[parts.length - 1]}`);
|
|
147
|
+
}
|
|
148
|
+
return tree.join('\n');
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Ensure directory exists
|
|
152
|
+
*/
|
|
153
|
+
async ensureDir(dirPath) {
|
|
154
|
+
try {
|
|
155
|
+
await fs.promises.mkdir(dirPath, { recursive: true });
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
// Ignore if already exists
|
|
159
|
+
if (error.code !== 'EEXIST') {
|
|
160
|
+
throw error;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Format content with proper indentation
|
|
166
|
+
*/
|
|
167
|
+
formatContent(content) {
|
|
168
|
+
// Basic cleanup - remove multiple blank lines
|
|
169
|
+
return content.replace(/\n{3,}/g, '\n\n').trim() + '\n';
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Clear all pending files
|
|
173
|
+
*/
|
|
174
|
+
clear() {
|
|
175
|
+
this.files = [];
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Get output directory
|
|
179
|
+
*/
|
|
180
|
+
getOutputDir() {
|
|
181
|
+
return this.outputDir;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
exports.FileWriter = FileWriter;
|
|
185
|
+
//# sourceMappingURL=FileWriter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileWriter.js","sourceRoot":"","sources":["../../../src/utils/swagger/FileWriter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SwaggerGenerator - Main entry point for generating API clients from Swagger/OpenAPI
|
|
3
|
+
* Orchestrates parsing, type generation, client generation, and file writing
|
|
4
|
+
*/
|
|
5
|
+
import { SwaggerDocument } from './types';
|
|
6
|
+
export interface GeneratorOptions {
|
|
7
|
+
outputDir: string;
|
|
8
|
+
serviceName?: string;
|
|
9
|
+
baseClientPath?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface GeneratorResult {
|
|
12
|
+
success: boolean;
|
|
13
|
+
serviceName: string;
|
|
14
|
+
filesWritten: string[];
|
|
15
|
+
folderStructure: string;
|
|
16
|
+
errors: string[];
|
|
17
|
+
}
|
|
18
|
+
export declare class SwaggerGenerator {
|
|
19
|
+
private options;
|
|
20
|
+
constructor(options: GeneratorOptions);
|
|
21
|
+
/**
|
|
22
|
+
* Generate API client from Swagger/OpenAPI JSON file
|
|
23
|
+
*/
|
|
24
|
+
generateFromFile(filePath: string): Promise<GeneratorResult>;
|
|
25
|
+
/**
|
|
26
|
+
* Generate API client from Swagger/OpenAPI URL
|
|
27
|
+
*/
|
|
28
|
+
generateFromUrl(url: string): Promise<GeneratorResult>;
|
|
29
|
+
/**
|
|
30
|
+
* Generate API client from Swagger/OpenAPI document object
|
|
31
|
+
*/
|
|
32
|
+
generate(document: SwaggerDocument): Promise<GeneratorResult>;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Convenience function to generate from file
|
|
36
|
+
*/
|
|
37
|
+
export declare function generateFromFile(filePath: string, outputDir: string, serviceName?: string): Promise<GeneratorResult>;
|
|
38
|
+
/**
|
|
39
|
+
* Convenience function to generate from URL
|
|
40
|
+
*/
|
|
41
|
+
export declare function generateFromUrl(url: string, outputDir: string, serviceName?: string): Promise<GeneratorResult>;
|
|
42
|
+
//# sourceMappingURL=SwaggerGenerator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SwaggerGenerator.d.ts","sourceRoot":"","sources":["../../../src/utils/swagger/SwaggerGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,EAAE,eAAe,EAAkB,MAAM,SAAS,CAAC;AAK1D,MAAM,WAAW,gBAAgB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,qBAAa,gBAAgB;IAC5B,OAAO,CAAC,OAAO,CAAmB;gBAEtB,OAAO,EAAE,gBAAgB;IAOrC;;OAEG;IACG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAoBlE;;OAEG;IACG,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAuB5D;;OAEG;IACG,QAAQ,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;CAsGnE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACrC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,eAAe,CAAC,CAG1B;AAED;;GAEG;AACH,wBAAsB,eAAe,CACpC,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,eAAe,CAAC,CAG1B"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* SwaggerGenerator - Main entry point for generating API clients from Swagger/OpenAPI
|
|
4
|
+
* Orchestrates parsing, type generation, client generation, and file writing
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
40
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
41
|
+
};
|
|
42
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
+
exports.SwaggerGenerator = void 0;
|
|
44
|
+
exports.generateFromFile = generateFromFile;
|
|
45
|
+
exports.generateFromUrl = generateFromUrl;
|
|
46
|
+
const fs = __importStar(require("fs"));
|
|
47
|
+
const SwaggerParser_1 = require("./SwaggerParser");
|
|
48
|
+
const TypeGenerator_1 = require("./TypeGenerator");
|
|
49
|
+
const ClientGenerator_1 = require("./ClientGenerator");
|
|
50
|
+
const FileWriter_1 = require("./FileWriter");
|
|
51
|
+
const pathUtils_1 = require("./utils/pathUtils");
|
|
52
|
+
const logger_1 = __importDefault(require("../logger"));
|
|
53
|
+
class SwaggerGenerator {
|
|
54
|
+
options;
|
|
55
|
+
constructor(options) {
|
|
56
|
+
this.options = {
|
|
57
|
+
baseClientPath: '../../clients/BaseAPIClient',
|
|
58
|
+
...options,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Generate API client from Swagger/OpenAPI JSON file
|
|
63
|
+
*/
|
|
64
|
+
async generateFromFile(filePath) {
|
|
65
|
+
logger_1.default.info(`Reading Swagger file: ${filePath}`);
|
|
66
|
+
try {
|
|
67
|
+
const content = await fs.promises.readFile(filePath, 'utf-8');
|
|
68
|
+
const document = JSON.parse(content);
|
|
69
|
+
return this.generate(document);
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
73
|
+
logger_1.default.error(`Failed to read Swagger file: ${errorMessage}`);
|
|
74
|
+
return {
|
|
75
|
+
success: false,
|
|
76
|
+
serviceName: '',
|
|
77
|
+
filesWritten: [],
|
|
78
|
+
folderStructure: '',
|
|
79
|
+
errors: [`Failed to read file: ${errorMessage}`],
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Generate API client from Swagger/OpenAPI URL
|
|
85
|
+
*/
|
|
86
|
+
async generateFromUrl(url) {
|
|
87
|
+
logger_1.default.info(`Fetching Swagger from URL: ${url}`);
|
|
88
|
+
try {
|
|
89
|
+
const response = await fetch(url);
|
|
90
|
+
if (!response.ok) {
|
|
91
|
+
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
92
|
+
}
|
|
93
|
+
const document = (await response.json());
|
|
94
|
+
return this.generate(document);
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
98
|
+
logger_1.default.error(`Failed to fetch Swagger from URL: ${errorMessage}`);
|
|
99
|
+
return {
|
|
100
|
+
success: false,
|
|
101
|
+
serviceName: '',
|
|
102
|
+
filesWritten: [],
|
|
103
|
+
folderStructure: '',
|
|
104
|
+
errors: [`Failed to fetch URL: ${errorMessage}`],
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Generate API client from Swagger/OpenAPI document object
|
|
110
|
+
*/
|
|
111
|
+
async generate(document) {
|
|
112
|
+
const errors = [];
|
|
113
|
+
try {
|
|
114
|
+
// Initialize parser
|
|
115
|
+
const parser = new SwaggerParser_1.SwaggerParser(document);
|
|
116
|
+
const serviceName = this.options.serviceName || parser.getServiceName();
|
|
117
|
+
logger_1.default.info(`Generating API client for: ${serviceName}`);
|
|
118
|
+
logger_1.default.info(`OpenAPI version: ${parser.isSwagger2() ? '2.0' : '3.x'}`);
|
|
119
|
+
// Parse all endpoints
|
|
120
|
+
const endpoints = parser.parseEndpoints();
|
|
121
|
+
logger_1.default.info(`Found ${endpoints.length} endpoints`);
|
|
122
|
+
// Initialize generators
|
|
123
|
+
const typeGenerator = new TypeGenerator_1.TypeGenerator(parser);
|
|
124
|
+
const clientGenerator = new ClientGenerator_1.ClientGenerator(typeGenerator, this.options.baseClientPath);
|
|
125
|
+
const fileWriter = new FileWriter_1.FileWriter(this.options.outputDir);
|
|
126
|
+
// Generate types for all endpoints
|
|
127
|
+
typeGenerator.generateAllTypes(endpoints);
|
|
128
|
+
// Group endpoints by folder
|
|
129
|
+
const groups = (0, pathUtils_1.groupEndpointsByFolder)(document.paths, serviceName);
|
|
130
|
+
// Generate files for each group
|
|
131
|
+
for (const [folderKey, group] of groups) {
|
|
132
|
+
const folderPath = group.folder;
|
|
133
|
+
// Get endpoints for this group
|
|
134
|
+
const groupEndpoints = [];
|
|
135
|
+
for (const ep of group.endpoints) {
|
|
136
|
+
const found = endpoints.find((e) => e.path === ep.path && e.method === ep.method);
|
|
137
|
+
if (found) {
|
|
138
|
+
groupEndpoints.push(found);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
if (groupEndpoints.length === 0)
|
|
142
|
+
continue;
|
|
143
|
+
// Generate types for this group
|
|
144
|
+
const groupTypeGenerator = new TypeGenerator_1.TypeGenerator(parser);
|
|
145
|
+
groupTypeGenerator.generateAllTypes(groupEndpoints);
|
|
146
|
+
const typeDefinitions = groupTypeGenerator.generateTypeDeclarations();
|
|
147
|
+
// Get type imports for client
|
|
148
|
+
const typeImports = [];
|
|
149
|
+
for (const endpoint of groupEndpoints) {
|
|
150
|
+
const requestType = groupTypeGenerator.getRequestTypeName(endpoint);
|
|
151
|
+
const responseType = groupTypeGenerator.getResponseTypeName(endpoint);
|
|
152
|
+
if (requestType && !typeImports.includes(requestType)) {
|
|
153
|
+
typeImports.push(requestType);
|
|
154
|
+
}
|
|
155
|
+
if (responseType && !typeImports.includes(responseType)) {
|
|
156
|
+
typeImports.push(responseType);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// Generate client class
|
|
160
|
+
const className = `${folderPath.join('')}Client`;
|
|
161
|
+
const clientCode = clientGenerator.generateClientClass(className, groupEndpoints, typeImports);
|
|
162
|
+
// Add files
|
|
163
|
+
if (typeDefinitions.trim()) {
|
|
164
|
+
fileWriter.addTypesFile(folderPath, typeDefinitions);
|
|
165
|
+
}
|
|
166
|
+
fileWriter.addClientFile(folderPath, className, clientCode);
|
|
167
|
+
}
|
|
168
|
+
// Preview structure
|
|
169
|
+
const folderStructure = fileWriter.previewStructure();
|
|
170
|
+
logger_1.default.info(`Folder structure:\n${folderStructure}`);
|
|
171
|
+
// Write all files
|
|
172
|
+
const filesWritten = await fileWriter.writeAll();
|
|
173
|
+
logger_1.default.info(`Generated ${filesWritten.length} files`);
|
|
174
|
+
return {
|
|
175
|
+
success: true,
|
|
176
|
+
serviceName,
|
|
177
|
+
filesWritten,
|
|
178
|
+
folderStructure,
|
|
179
|
+
errors,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
184
|
+
logger_1.default.error(`Generation failed: ${errorMessage}`);
|
|
185
|
+
errors.push(errorMessage);
|
|
186
|
+
return {
|
|
187
|
+
success: false,
|
|
188
|
+
serviceName: '',
|
|
189
|
+
filesWritten: [],
|
|
190
|
+
folderStructure: '',
|
|
191
|
+
errors,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
exports.SwaggerGenerator = SwaggerGenerator;
|
|
197
|
+
/**
|
|
198
|
+
* Convenience function to generate from file
|
|
199
|
+
*/
|
|
200
|
+
async function generateFromFile(filePath, outputDir, serviceName) {
|
|
201
|
+
const generator = new SwaggerGenerator({ outputDir, serviceName });
|
|
202
|
+
return generator.generateFromFile(filePath);
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Convenience function to generate from URL
|
|
206
|
+
*/
|
|
207
|
+
async function generateFromUrl(url, outputDir, serviceName) {
|
|
208
|
+
const generator = new SwaggerGenerator({ outputDir, serviceName });
|
|
209
|
+
return generator.generateFromUrl(url);
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=SwaggerGenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SwaggerGenerator.js","sourceRoot":"","sources":["../../../src/utils/swagger/SwaggerGenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SwaggerParser - Parses Swagger 2.0 and OpenAPI 3.x documents
|
|
3
|
+
* Extracts endpoints, schemas, and parameters into a unified format
|
|
4
|
+
*/
|
|
5
|
+
import { SwaggerDocument, ParsedEndpoint, ParsedSchema, SchemaObject } from './types';
|
|
6
|
+
export declare class SwaggerParser {
|
|
7
|
+
private document;
|
|
8
|
+
private schemas;
|
|
9
|
+
private generatedTypes;
|
|
10
|
+
constructor(document: SwaggerDocument);
|
|
11
|
+
/**
|
|
12
|
+
* Detect if document is Swagger 2.0 or OpenAPI 3.x
|
|
13
|
+
*/
|
|
14
|
+
isSwagger2(): boolean;
|
|
15
|
+
isOpenAPI3(): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Get service name from document info
|
|
18
|
+
*/
|
|
19
|
+
getServiceName(): string;
|
|
20
|
+
/**
|
|
21
|
+
* Load all schemas from the document
|
|
22
|
+
*/
|
|
23
|
+
private loadSchemas;
|
|
24
|
+
/**
|
|
25
|
+
* Resolve a $ref to its schema
|
|
26
|
+
*/
|
|
27
|
+
resolveRef(ref: string): SchemaObject | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* Extract ref name from $ref path
|
|
30
|
+
*/
|
|
31
|
+
private extractRefName;
|
|
32
|
+
/**
|
|
33
|
+
* Parse all endpoints from the document
|
|
34
|
+
*/
|
|
35
|
+
parseEndpoints(): ParsedEndpoint[];
|
|
36
|
+
/**
|
|
37
|
+
* Parse a single operation
|
|
38
|
+
*/
|
|
39
|
+
private parseOperation;
|
|
40
|
+
/**
|
|
41
|
+
* Parse parameters array
|
|
42
|
+
*/
|
|
43
|
+
private parseParameters;
|
|
44
|
+
/**
|
|
45
|
+
* Convert parameter to TypeScript type
|
|
46
|
+
*/
|
|
47
|
+
private parameterToTypeScript;
|
|
48
|
+
/**
|
|
49
|
+
* Parse schema into TypeScript representation
|
|
50
|
+
*/
|
|
51
|
+
parseSchema(schema: SchemaObject, defaultName: string): ParsedSchema;
|
|
52
|
+
/**
|
|
53
|
+
* Convert schema to TypeScript type string
|
|
54
|
+
*/
|
|
55
|
+
schemaToTypeScript(schema: SchemaObject): string;
|
|
56
|
+
/**
|
|
57
|
+
* Convert object schema to TypeScript interface body
|
|
58
|
+
*/
|
|
59
|
+
private objectSchemaToTypeScript;
|
|
60
|
+
/**
|
|
61
|
+
* Get all schemas for type generation
|
|
62
|
+
*/
|
|
63
|
+
getAllSchemas(): Map<string, SchemaObject>;
|
|
64
|
+
/**
|
|
65
|
+
* Get base URL from document
|
|
66
|
+
*/
|
|
67
|
+
getBaseUrl(): string;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=SwaggerParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SwaggerParser.d.ts","sourceRoot":"","sources":["../../../src/utils/swagger/SwaggerParser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,eAAe,EAGf,cAAc,EAEd,YAAY,EACZ,YAAY,EAGZ,MAAM,SAAS,CAAC;AAGjB,qBAAa,aAAa;IACzB,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,OAAO,CAAwC;IACvD,OAAO,CAAC,cAAc,CAAkC;gBAE5C,QAAQ,EAAE,eAAe;IAKrC;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACH,cAAc,IAAI,MAAM;IAKxB;;OAEG;IACH,OAAO,CAAC,WAAW;IAoBnB;;OAEG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIjD;;OAEG;IACH,OAAO,CAAC,cAAc;IAKtB;;OAEG;IACH,cAAc,IAAI,cAAc,EAAE;IAiClC;;OAEG;IACH,OAAO,CAAC,cAAc;IAgEtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAsB7B;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,GAAG,YAAY;IA+EpE;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM;IA4DhD;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAyBhC;;OAEG;IACH,aAAa,IAAI,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC;IAI1C;;OAEG;IACH,UAAU,IAAI,MAAM;CAYpB"}
|