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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { Generator, GeneratorOptions } from './generator';
2
+ export { PostProcessor } from './post-processor';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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
+ }