openapi-class-transformer 1.0.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/LICENSE +21 -0
- package/README.md +385 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +79 -0
- package/dist/cli.js.map +1 -0
- package/dist/generator.d.ts +41 -0
- package/dist/generator.d.ts.map +1 -0
- package/dist/generator.js +161 -0
- package/dist/generator.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/post-processor.d.ts +72 -0
- package/dist/post-processor.d.ts.map +1 -0
- package/dist/post-processor.js +419 -0
- package/dist/post-processor.js.map +1 -0
- package/package.json +59 -0
- package/templates/apiInner.mustache +506 -0
- package/templates/configuration.mustache +144 -0
- package/templates/modelGeneric.mustache +79 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PostProcessor = exports.Generator = void 0;
|
|
4
|
+
var generator_1 = require("./generator");
|
|
5
|
+
Object.defineProperty(exports, "Generator", { enumerable: true, get: function () { return generator_1.Generator; } });
|
|
6
|
+
var post_processor_1 = require("./post-processor");
|
|
7
|
+
Object.defineProperty(exports, "PostProcessor", { enumerable: true, get: function () { return post_processor_1.PostProcessor; } });
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,yCAA0D;AAAjD,sGAAA,SAAS,OAAA;AAClB,mDAAiD;AAAxC,+GAAA,aAAa,OAAA"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
export declare class PostProcessor {
|
|
2
|
+
private openApiSpec;
|
|
3
|
+
private outputDir;
|
|
4
|
+
private unionTypeMap;
|
|
5
|
+
constructor(specPath: string, outputDir: string);
|
|
6
|
+
/**
|
|
7
|
+
* Load OpenAPI specification
|
|
8
|
+
*/
|
|
9
|
+
private loadSpec;
|
|
10
|
+
/**
|
|
11
|
+
* Build a map of properties that should be union types instead of generated classes
|
|
12
|
+
*/
|
|
13
|
+
private buildUnionTypeMap;
|
|
14
|
+
/**
|
|
15
|
+
* Convert anyOf array to TypeScript union type if all types are simple
|
|
16
|
+
*/
|
|
17
|
+
private getUnionTypeFromAnyOf;
|
|
18
|
+
/**
|
|
19
|
+
* Map OpenAPI simple types to TypeScript types
|
|
20
|
+
*/
|
|
21
|
+
private mapOpenApiTypeToTypeScript;
|
|
22
|
+
/**
|
|
23
|
+
* Find the generated class name for a property (OpenAPI Generator creates classes for anyOf)
|
|
24
|
+
*/
|
|
25
|
+
private findGeneratedClassNameForProperty;
|
|
26
|
+
/**
|
|
27
|
+
* Process all generated TypeScript files
|
|
28
|
+
*/
|
|
29
|
+
process(): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Fix the main index.ts file to export from models/index.js instead of models.js
|
|
32
|
+
* Also fix API files that import from models
|
|
33
|
+
*/
|
|
34
|
+
private fixMainIndex;
|
|
35
|
+
/**
|
|
36
|
+
* Walk directory tree and find all .ts files
|
|
37
|
+
*/
|
|
38
|
+
private walkSync;
|
|
39
|
+
/**
|
|
40
|
+
* Convert "import type" to regular "import" for types used in decorators
|
|
41
|
+
*/
|
|
42
|
+
private fixImportTypes;
|
|
43
|
+
/**
|
|
44
|
+
* Replace generated class types with union types where appropriate
|
|
45
|
+
*/
|
|
46
|
+
private replaceUnionTypes;
|
|
47
|
+
/**
|
|
48
|
+
* Add vendor extensions to JSDoc comments
|
|
49
|
+
*/
|
|
50
|
+
private addVendorExtensions;
|
|
51
|
+
/**
|
|
52
|
+
* Populate vendor extensions in attributeTypeMap
|
|
53
|
+
*/
|
|
54
|
+
private populateAttributeTypeMapExtensions;
|
|
55
|
+
/**
|
|
56
|
+
* Get vendor extensions for a specific property
|
|
57
|
+
*/
|
|
58
|
+
private getVendorExtensionsForProperty;
|
|
59
|
+
/**
|
|
60
|
+
* Add .js extensions to relative imports
|
|
61
|
+
*/
|
|
62
|
+
private fixImportExtensions;
|
|
63
|
+
/**
|
|
64
|
+
* Clean up unnecessary generated files
|
|
65
|
+
*/
|
|
66
|
+
private cleanup;
|
|
67
|
+
/**
|
|
68
|
+
* Convert PascalCase to kebab-case
|
|
69
|
+
*/
|
|
70
|
+
private toKebabCase;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=post-processor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"post-processor.d.ts","sourceRoot":"","sources":["../src/post-processor.ts"],"names":[],"mappings":"AAGA,qBAAa,aAAa;IACxB,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,YAAY,CAAgF;gBAExF,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAO/C;;OAEG;IACH,OAAO,CAAC,QAAQ;IAShB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoCzB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAuB7B;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAWlC;;OAEG;IACH,OAAO,CAAC,iCAAiC;IAOzC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA+B9B;;;OAGG;IACH,OAAO,CAAC,YAAY;IAiCpB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAqBhB;;OAEG;IACH,OAAO,CAAC,cAAc;IAqBtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAiDzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA6B3B;;OAEG;IACH,OAAO,CAAC,kCAAkC;IA8C1C;;OAEG;IACH,OAAO,CAAC,8BAA8B;IA4BtC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA2B3B;;OAEG;IACH,OAAO,CAAC,OAAO;IA4Cf;;OAEG;IACH,OAAO,CAAC,WAAW;CAMpB"}
|
|
@@ -0,0 +1,419 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.PostProcessor = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
class PostProcessor {
|
|
40
|
+
constructor(specPath, outputDir) {
|
|
41
|
+
this.outputDir = outputDir;
|
|
42
|
+
this.loadSpec(specPath);
|
|
43
|
+
this.unionTypeMap = new Map();
|
|
44
|
+
this.buildUnionTypeMap();
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Load OpenAPI specification
|
|
48
|
+
*/
|
|
49
|
+
loadSpec(specPath) {
|
|
50
|
+
try {
|
|
51
|
+
const content = fs.readFileSync(specPath, 'utf-8');
|
|
52
|
+
this.openApiSpec = JSON.parse(content);
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
throw new Error(`Failed to load OpenAPI spec: ${error}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Build a map of properties that should be union types instead of generated classes
|
|
60
|
+
*/
|
|
61
|
+
buildUnionTypeMap() {
|
|
62
|
+
if (!this.openApiSpec.components?.schemas) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
for (const [schemaName, schema] of Object.entries(this.openApiSpec.components.schemas)) {
|
|
66
|
+
const schemaObj = schema;
|
|
67
|
+
if (!schemaObj.properties) {
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
for (const [propName, propDef] of Object.entries(schemaObj.properties)) {
|
|
71
|
+
const propDefObj = propDef;
|
|
72
|
+
// Check if this is an anyOf with simple types
|
|
73
|
+
if (propDefObj.anyOf && Array.isArray(propDefObj.anyOf)) {
|
|
74
|
+
const unionType = this.getUnionTypeFromAnyOf(propDefObj.anyOf);
|
|
75
|
+
if (unionType) {
|
|
76
|
+
// Find the generated class name for this property
|
|
77
|
+
const generatedClassName = this.findGeneratedClassNameForProperty(schemaName, propName);
|
|
78
|
+
if (generatedClassName) {
|
|
79
|
+
if (!this.unionTypeMap.has(generatedClassName)) {
|
|
80
|
+
this.unionTypeMap.set(generatedClassName, []);
|
|
81
|
+
}
|
|
82
|
+
this.unionTypeMap.get(generatedClassName).push({
|
|
83
|
+
className: schemaName,
|
|
84
|
+
propertyName: propName,
|
|
85
|
+
unionType
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Convert anyOf array to TypeScript union type if all types are simple
|
|
95
|
+
*/
|
|
96
|
+
getUnionTypeFromAnyOf(anyOf) {
|
|
97
|
+
const types = [];
|
|
98
|
+
for (const item of anyOf) {
|
|
99
|
+
if (item.type) {
|
|
100
|
+
const tsType = this.mapOpenApiTypeToTypeScript(item.type);
|
|
101
|
+
if (tsType) {
|
|
102
|
+
types.push(tsType);
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
// If we encounter a complex type or $ref, don't convert to union
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
else if (item.$ref) {
|
|
110
|
+
// Don't convert if it references another schema
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return types.length > 0 ? types.join(' | ') : null;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Map OpenAPI simple types to TypeScript types
|
|
121
|
+
*/
|
|
122
|
+
mapOpenApiTypeToTypeScript(openApiType) {
|
|
123
|
+
const typeMap = {
|
|
124
|
+
'string': 'string',
|
|
125
|
+
'number': 'number',
|
|
126
|
+
'integer': 'number',
|
|
127
|
+
'boolean': 'boolean',
|
|
128
|
+
'null': 'null'
|
|
129
|
+
};
|
|
130
|
+
return typeMap[openApiType] || null;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Find the generated class name for a property (OpenAPI Generator creates classes for anyOf)
|
|
134
|
+
*/
|
|
135
|
+
findGeneratedClassNameForProperty(schemaName, propertyName) {
|
|
136
|
+
// OpenAPI Generator typically creates class names like: SchemaNamePropertyName
|
|
137
|
+
// e.g., for Replica.count, it might create ReplicaCount
|
|
138
|
+
const capitalizedPropName = propertyName.charAt(0).toUpperCase() + propertyName.slice(1);
|
|
139
|
+
return schemaName + capitalizedPropName;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Process all generated TypeScript files
|
|
143
|
+
*/
|
|
144
|
+
async process() {
|
|
145
|
+
const files = this.walkSync(this.outputDir);
|
|
146
|
+
for (const file of files) {
|
|
147
|
+
let content = fs.readFileSync(file, 'utf-8');
|
|
148
|
+
// Fix import type to regular import for decorator types
|
|
149
|
+
content = this.fixImportTypes(content);
|
|
150
|
+
// Replace generated classes with union types where appropriate
|
|
151
|
+
content = this.replaceUnionTypes(content);
|
|
152
|
+
// Add vendor extensions to comments
|
|
153
|
+
content = this.addVendorExtensions(content);
|
|
154
|
+
// Populate vendor extensions in attributeTypeMap
|
|
155
|
+
content = this.populateAttributeTypeMapExtensions(content);
|
|
156
|
+
// Add .js extensions to imports
|
|
157
|
+
content = this.fixImportExtensions(content);
|
|
158
|
+
fs.writeFileSync(file, content, 'utf-8');
|
|
159
|
+
}
|
|
160
|
+
// Fix main index.ts exports
|
|
161
|
+
this.fixMainIndex();
|
|
162
|
+
// Clean up unnecessary files
|
|
163
|
+
this.cleanup();
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Fix the main index.ts file to export from models/index.js instead of models.js
|
|
167
|
+
* Also fix API files that import from models
|
|
168
|
+
*/
|
|
169
|
+
fixMainIndex() {
|
|
170
|
+
const indexPath = path.join(this.outputDir, 'index.ts');
|
|
171
|
+
if (fs.existsSync(indexPath)) {
|
|
172
|
+
let content = fs.readFileSync(indexPath, 'utf-8');
|
|
173
|
+
// Replace ./models.js or ./models with ./models/index.js
|
|
174
|
+
content = content.replace(/"\.\/models\.js"/g, '"./models/index.js"');
|
|
175
|
+
content = content.replace(/'\.\/models\.js'/g, "'./models/index.js'");
|
|
176
|
+
content = content.replace(/"\.\/models"/g, '"./models/index.js"');
|
|
177
|
+
content = content.replace(/'\.\/models'/g, "'./models/index.js'");
|
|
178
|
+
fs.writeFileSync(indexPath, content, 'utf-8');
|
|
179
|
+
}
|
|
180
|
+
// Fix API files that import from ../models.js
|
|
181
|
+
const apiDir = path.join(this.outputDir, 'api');
|
|
182
|
+
if (fs.existsSync(apiDir)) {
|
|
183
|
+
const apiFiles = fs.readdirSync(apiDir).filter(f => f.endsWith('.ts'));
|
|
184
|
+
for (const file of apiFiles) {
|
|
185
|
+
const filePath = path.join(apiDir, file);
|
|
186
|
+
let content = fs.readFileSync(filePath, 'utf-8');
|
|
187
|
+
// Replace ../models.js or ../models with ../models/index.js
|
|
188
|
+
content = content.replace(/"\.\.\/models\.js"/g, '"../models/index.js"');
|
|
189
|
+
content = content.replace(/'\.\.\/models\.js'/g, "'../models/index.js'");
|
|
190
|
+
content = content.replace(/"\.\.\/models"/g, '"../models/index.js"');
|
|
191
|
+
content = content.replace(/'\.\.\/models'/g, "'../models/index.js'");
|
|
192
|
+
fs.writeFileSync(filePath, content, 'utf-8');
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Walk directory tree and find all .ts files
|
|
198
|
+
*/
|
|
199
|
+
walkSync(dir, filelist = []) {
|
|
200
|
+
if (!fs.existsSync(dir)) {
|
|
201
|
+
return filelist;
|
|
202
|
+
}
|
|
203
|
+
const files = fs.readdirSync(dir);
|
|
204
|
+
for (const file of files) {
|
|
205
|
+
const filepath = path.join(dir, file);
|
|
206
|
+
const stat = fs.statSync(filepath);
|
|
207
|
+
if (stat.isDirectory()) {
|
|
208
|
+
this.walkSync(filepath, filelist);
|
|
209
|
+
}
|
|
210
|
+
else if (filepath.endsWith('.ts')) {
|
|
211
|
+
filelist.push(filepath);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return filelist;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Convert "import type" to regular "import" for types used in decorators
|
|
218
|
+
*/
|
|
219
|
+
fixImportTypes(content) {
|
|
220
|
+
// Find all types used in @Type(() => TypeName)
|
|
221
|
+
const typesInDecorators = new Set();
|
|
222
|
+
const typeDecoratorRegex = /@Type\(\(\)\s*=>\s*(\w+)\)/g;
|
|
223
|
+
let match;
|
|
224
|
+
while ((match = typeDecoratorRegex.exec(content)) !== null) {
|
|
225
|
+
typesInDecorators.add(match[1]);
|
|
226
|
+
}
|
|
227
|
+
// Replace "import type { TypeName }" with "import { TypeName }"
|
|
228
|
+
typesInDecorators.forEach(typeName => {
|
|
229
|
+
content = content.replace(new RegExp(`import type \\{ (${typeName}) \\}`, 'g'), 'import { $1 }');
|
|
230
|
+
});
|
|
231
|
+
return content;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Replace generated class types with union types where appropriate
|
|
235
|
+
*/
|
|
236
|
+
replaceUnionTypes(content) {
|
|
237
|
+
const classMatch = content.match(/export class (\w+)/);
|
|
238
|
+
if (!classMatch) {
|
|
239
|
+
return content;
|
|
240
|
+
}
|
|
241
|
+
const className = classMatch[1];
|
|
242
|
+
// Check each property to see if its type should be a union
|
|
243
|
+
content = content.replace(/(@Expose\(\)[\s\S]*?)(@Type\(\(\)\s*=>\s*(\w+)\)\s*)?'(\w+)'(\?)?:\s*(\w+);/g, (fullMatch, exposeDecorator, typeDecorator, typeInDecorator, propName, optional, typeName) => {
|
|
244
|
+
// Check if this type is in our union type map
|
|
245
|
+
const unionInfo = this.unionTypeMap.get(typeName);
|
|
246
|
+
if (unionInfo && unionInfo.length > 0) {
|
|
247
|
+
// Find the matching property
|
|
248
|
+
const matchingInfo = unionInfo.find(info => info.className === className && info.propertyName === propName);
|
|
249
|
+
if (matchingInfo) {
|
|
250
|
+
// Remove the @Type decorator and replace the type with union
|
|
251
|
+
const optionalMarker = optional || '';
|
|
252
|
+
return `${exposeDecorator}'${propName}'${optionalMarker}: ${matchingInfo.unionType};`;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
return fullMatch;
|
|
256
|
+
});
|
|
257
|
+
// Remove imports for union type classes that are no longer needed
|
|
258
|
+
this.unionTypeMap.forEach((unionInfo, generatedClassName) => {
|
|
259
|
+
if (unionInfo.some(info => info.className === className)) {
|
|
260
|
+
// Remove the import for this generated class
|
|
261
|
+
content = content.replace(new RegExp(`import \\{ ${generatedClassName} \\} from [^;]+;\\s*`, 'g'), '');
|
|
262
|
+
content = content.replace(new RegExp(`import type \\{ ${generatedClassName} \\} from [^;]+;\\s*`, 'g'), '');
|
|
263
|
+
}
|
|
264
|
+
});
|
|
265
|
+
return content;
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Add vendor extensions to JSDoc comments
|
|
269
|
+
*/
|
|
270
|
+
addVendorExtensions(content) {
|
|
271
|
+
const classMatch = content.match(/export class (\w+)/);
|
|
272
|
+
if (!classMatch) {
|
|
273
|
+
return content;
|
|
274
|
+
}
|
|
275
|
+
const className = classMatch[1];
|
|
276
|
+
// Find all properties and add vendor extensions
|
|
277
|
+
content = content.replace(/(\/\*\*[\s\S]*?\*\/)\s*@Expose\(\)\s*([\s\S]*?)'(\w+)'/g, (fullMatch, comment, decorators, propName) => {
|
|
278
|
+
const extensions = this.getVendorExtensionsForProperty(className, propName);
|
|
279
|
+
if (Object.keys(extensions).length > 0) {
|
|
280
|
+
// Add extensions before the closing */
|
|
281
|
+
let newComment = comment.replace(/\s*\*\/$/, '');
|
|
282
|
+
Object.entries(extensions).forEach(([key, value]) => {
|
|
283
|
+
newComment += `\n * @${key} ${JSON.stringify(value)}`;
|
|
284
|
+
});
|
|
285
|
+
newComment += '\n */';
|
|
286
|
+
return `${newComment}\n @Expose()\n ${decorators}'${propName}'`;
|
|
287
|
+
}
|
|
288
|
+
return fullMatch;
|
|
289
|
+
});
|
|
290
|
+
return content;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Populate vendor extensions in attributeTypeMap
|
|
294
|
+
*/
|
|
295
|
+
populateAttributeTypeMapExtensions(content) {
|
|
296
|
+
const classMatch = content.match(/export class (\w+)/);
|
|
297
|
+
if (!classMatch) {
|
|
298
|
+
return content;
|
|
299
|
+
}
|
|
300
|
+
const className = classMatch[1];
|
|
301
|
+
// Find the attributeTypeMap array
|
|
302
|
+
const attributeTypeMapRegex = /static readonly attributeTypeMap: Array<[^>]+> = \[([\s\S]*?)\];/;
|
|
303
|
+
const match = attributeTypeMapRegex.exec(content);
|
|
304
|
+
if (!match) {
|
|
305
|
+
return content;
|
|
306
|
+
}
|
|
307
|
+
let attributeTypeMapContent = match[0];
|
|
308
|
+
// Replace each "vendorExtensions": {} with actual vendor extensions AND fix union types
|
|
309
|
+
attributeTypeMapContent = attributeTypeMapContent.replace(/"name":\s*"(\w+)"[\s\S]*?"type":\s*"([^"]+)"[\s\S]*?"vendorExtensions":\s*\{\}/g, (fullMatch, propName, currentType) => {
|
|
310
|
+
const extensions = this.getVendorExtensionsForProperty(className, propName);
|
|
311
|
+
// Check if this type should be replaced with a union type
|
|
312
|
+
const unionInfo = this.unionTypeMap.get(currentType);
|
|
313
|
+
let typeToUse = currentType;
|
|
314
|
+
if (unionInfo && unionInfo.length > 0) {
|
|
315
|
+
const matchingInfo = unionInfo.find(info => info.className === className && info.propertyName === propName);
|
|
316
|
+
if (matchingInfo) {
|
|
317
|
+
typeToUse = matchingInfo.unionType;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
return fullMatch
|
|
321
|
+
.replace(`"type": "${currentType}"`, `"type": "${typeToUse}"`)
|
|
322
|
+
.replace('"vendorExtensions": {}', `"vendorExtensions": ${JSON.stringify(extensions)}`);
|
|
323
|
+
});
|
|
324
|
+
return content.replace(match[0], attributeTypeMapContent);
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Get vendor extensions for a specific property
|
|
328
|
+
*/
|
|
329
|
+
getVendorExtensionsForProperty(schemaName, propertyName) {
|
|
330
|
+
if (!this.openApiSpec.components?.schemas) {
|
|
331
|
+
return {};
|
|
332
|
+
}
|
|
333
|
+
const schema = this.openApiSpec.components.schemas[schemaName];
|
|
334
|
+
if (!schema?.properties) {
|
|
335
|
+
return {};
|
|
336
|
+
}
|
|
337
|
+
const property = schema.properties[propertyName];
|
|
338
|
+
if (!property) {
|
|
339
|
+
return {};
|
|
340
|
+
}
|
|
341
|
+
const extensions = {};
|
|
342
|
+
Object.keys(property).forEach(key => {
|
|
343
|
+
if (key.startsWith('x-')) {
|
|
344
|
+
extensions[key] = property[key];
|
|
345
|
+
}
|
|
346
|
+
});
|
|
347
|
+
return extensions;
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Add .js extensions to relative imports
|
|
351
|
+
*/
|
|
352
|
+
fixImportExtensions(content) {
|
|
353
|
+
// Match: from './', from '../', etc
|
|
354
|
+
content = content.replace(/from ['"](\.|\.\.)(\/[^'"]+)['"]/g, (match, dot, importPath) => {
|
|
355
|
+
// Don't add .js if it already has an extension
|
|
356
|
+
if (importPath.endsWith('.js') || importPath.endsWith('.ts') || importPath.endsWith('.json')) {
|
|
357
|
+
return match;
|
|
358
|
+
}
|
|
359
|
+
return match.replace(dot + importPath, dot + importPath + '.js');
|
|
360
|
+
});
|
|
361
|
+
// Match: export * from statements
|
|
362
|
+
content = content.replace(/export \* from ['"](\.|\.\.)(\/[^'"]+)['"]/g, (match, dot, importPath) => {
|
|
363
|
+
if (importPath.endsWith('.js') || importPath.endsWith('.ts') || importPath.endsWith('.json')) {
|
|
364
|
+
return match;
|
|
365
|
+
}
|
|
366
|
+
return match.replace(dot + importPath, dot + importPath + '.js');
|
|
367
|
+
});
|
|
368
|
+
return content;
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* Clean up unnecessary generated files
|
|
372
|
+
*/
|
|
373
|
+
cleanup() {
|
|
374
|
+
const filesToRemove = [
|
|
375
|
+
'docs',
|
|
376
|
+
'.openapi-generator',
|
|
377
|
+
'README.md',
|
|
378
|
+
'git_push.sh',
|
|
379
|
+
'.gitignore',
|
|
380
|
+
'.npmignore'
|
|
381
|
+
];
|
|
382
|
+
for (const file of filesToRemove) {
|
|
383
|
+
const filepath = path.join(this.outputDir, file);
|
|
384
|
+
if (fs.existsSync(filepath)) {
|
|
385
|
+
fs.rmSync(filepath, { recursive: true, force: true });
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
// Remove generated union type class files
|
|
389
|
+
this.unionTypeMap.forEach((unionInfo, generatedClassName) => {
|
|
390
|
+
const kebabCaseName = this.toKebabCase(generatedClassName);
|
|
391
|
+
const filepath = path.join(this.outputDir, 'models', `${kebabCaseName}.ts`);
|
|
392
|
+
if (fs.existsSync(filepath)) {
|
|
393
|
+
fs.rmSync(filepath, { force: true });
|
|
394
|
+
}
|
|
395
|
+
});
|
|
396
|
+
// Update the index.ts to remove exports of deleted union type classes
|
|
397
|
+
const indexPath = path.join(this.outputDir, 'models', 'index.ts');
|
|
398
|
+
if (fs.existsSync(indexPath)) {
|
|
399
|
+
let indexContent = fs.readFileSync(indexPath, 'utf-8');
|
|
400
|
+
this.unionTypeMap.forEach((unionInfo, generatedClassName) => {
|
|
401
|
+
const kebabCaseName = this.toKebabCase(generatedClassName);
|
|
402
|
+
// Remove export lines for the deleted class
|
|
403
|
+
indexContent = indexContent.replace(new RegExp(`export \\* from ['"]\\.\\/${kebabCaseName}(\\.js)?['"];?\\s*`, 'g'), '');
|
|
404
|
+
});
|
|
405
|
+
fs.writeFileSync(indexPath, indexContent, 'utf-8');
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* Convert PascalCase to kebab-case
|
|
410
|
+
*/
|
|
411
|
+
toKebabCase(str) {
|
|
412
|
+
return str
|
|
413
|
+
.replace(/([a-z0-9])([A-Z])/g, '$1-$2')
|
|
414
|
+
.replace(/([A-Z])([A-Z][a-z])/g, '$1-$2')
|
|
415
|
+
.toLowerCase();
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
exports.PostProcessor = PostProcessor;
|
|
419
|
+
//# sourceMappingURL=post-processor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"post-processor.js","sourceRoot":"","sources":["../src/post-processor.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "openapi-class-transformer",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Generate class-transformer compatible TypeScript classes from OpenAPI specs with full decorator support",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"bin": {
|
|
8
|
+
"openapi-class-transformer": "dist/cli.js"
|
|
9
|
+
},
|
|
10
|
+
"publishConfig": {
|
|
11
|
+
"access": "public"
|
|
12
|
+
},
|
|
13
|
+
"scripts": {
|
|
14
|
+
"test": "jest",
|
|
15
|
+
"test:watch": "jest --watch",
|
|
16
|
+
"test:coverage": "jest --coverage",
|
|
17
|
+
"build": "rm -rf dist && tsc",
|
|
18
|
+
"prepublishOnly": "npm run build && npm test"
|
|
19
|
+
},
|
|
20
|
+
"keywords": [
|
|
21
|
+
"openapi",
|
|
22
|
+
"swagger",
|
|
23
|
+
"class-transformer",
|
|
24
|
+
"typescript",
|
|
25
|
+
"code-generator",
|
|
26
|
+
"decorators",
|
|
27
|
+
"dto",
|
|
28
|
+
"validation",
|
|
29
|
+
"type-safe",
|
|
30
|
+
"axios",
|
|
31
|
+
"api-client"
|
|
32
|
+
],
|
|
33
|
+
"author": "",
|
|
34
|
+
"license": "MIT",
|
|
35
|
+
"repository": {
|
|
36
|
+
"type": "git",
|
|
37
|
+
"url": "https://github.com/yourusername/openapi-class-transformer.git"
|
|
38
|
+
},
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"@openapitools/openapi-generator-cli": "^2.25.0",
|
|
41
|
+
"class-transformer": "^0.5.1",
|
|
42
|
+
"commander": "^12.0.0"
|
|
43
|
+
},
|
|
44
|
+
"devDependencies": {
|
|
45
|
+
"@jest/globals": "^29.7.0",
|
|
46
|
+
"@types/jest": "^29.5.14",
|
|
47
|
+
"@types/node": "^22.10.2",
|
|
48
|
+
"jest": "^29.7.0",
|
|
49
|
+
"ts-jest": "^29.2.5",
|
|
50
|
+
"ts-node": "^10.9.2",
|
|
51
|
+
"typescript": "^5.7.2"
|
|
52
|
+
},
|
|
53
|
+
"files": [
|
|
54
|
+
"dist",
|
|
55
|
+
"templates",
|
|
56
|
+
"README.md",
|
|
57
|
+
"LICENSE"
|
|
58
|
+
]
|
|
59
|
+
}
|