openapi-class-transformer 1.0.23 → 1.1.2
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/README.md +194 -0
- package/dist/cli.js +8 -0
- package/dist/cli.js.map +1 -1
- package/dist/generator.d.ts +10 -0
- package/dist/generator.d.ts.map +1 -1
- package/dist/generator.js +3 -1
- package/dist/generator.js.map +1 -1
- package/dist/post-processor.d.ts +25 -1
- package/dist/post-processor.d.ts.map +1 -1
- package/dist/post-processor.js +294 -16
- package/dist/post-processor.js.map +1 -1
- package/dist/test-utils/runtime-loader.d.ts +17 -0
- package/dist/test-utils/runtime-loader.d.ts.map +1 -0
- package/dist/test-utils/runtime-loader.js +96 -0
- package/dist/test-utils/runtime-loader.js.map +1 -0
- package/dist/test-utils/setup.d.ts +2 -0
- package/dist/test-utils/setup.d.ts.map +1 -0
- package/dist/test-utils/setup.js +4 -0
- package/dist/test-utils/setup.js.map +1 -0
- package/dist/utils/export-style.d.ts +48 -0
- package/dist/utils/export-style.d.ts.map +1 -0
- package/dist/utils/export-style.js +156 -0
- package/dist/utils/export-style.js.map +1 -0
- package/package.json +11 -1
package/README.md
CHANGED
|
@@ -5,6 +5,7 @@ Generate class-transformer compatible TypeScript classes from OpenAPI specificat
|
|
|
5
5
|
## Features
|
|
6
6
|
|
|
7
7
|
✨ **Class-Transformer Compatible**: Generates TypeScript classes with `@Expose()` and `@Type()` decorators
|
|
8
|
+
✅ **Class-Validator Support** (NEW in v1.1.0): Automatically generates validation decorators (`@IsString()`, `@IsOptional()`, etc.)
|
|
8
9
|
🎯 **Type-Safe**: Full TypeScript support with proper type definitions
|
|
9
10
|
📦 **Vendor Extensions**: Automatically includes all `x-*` properties in JSDoc comments
|
|
10
11
|
🔧 **Customizable**: Support for custom templates and additional properties
|
|
@@ -37,6 +38,30 @@ npx openapi-class-transformer generate \
|
|
|
37
38
|
-o ./src/api \
|
|
38
39
|
-t ./custom-templates
|
|
39
40
|
|
|
41
|
+
# Generate only models (skip APIs)
|
|
42
|
+
npx openapi-class-transformer generate \
|
|
43
|
+
-i ./spec.json \
|
|
44
|
+
-o ./output \
|
|
45
|
+
--models-only
|
|
46
|
+
|
|
47
|
+
# With NestJS Swagger decorators
|
|
48
|
+
npx openapi-class-transformer generate \
|
|
49
|
+
-i ./spec.json \
|
|
50
|
+
-o ./output \
|
|
51
|
+
--nestjs-swagger
|
|
52
|
+
|
|
53
|
+
# With class-validator decorators (NEW in v1.1.0)
|
|
54
|
+
npx openapi-class-transformer generate \
|
|
55
|
+
-i ./spec.json \
|
|
56
|
+
-o ./output \
|
|
57
|
+
--class-validator
|
|
58
|
+
|
|
59
|
+
# Skip .js extensions (for bundlers like webpack/Next.js)
|
|
60
|
+
npx openapi-class-transformer generate \
|
|
61
|
+
-i ./spec.json \
|
|
62
|
+
-o ./output \
|
|
63
|
+
--skip-js-extensions
|
|
64
|
+
|
|
40
65
|
# With additional properties
|
|
41
66
|
npx openapi-class-transformer generate \
|
|
42
67
|
-i ./spec.json \
|
|
@@ -44,6 +69,19 @@ npx openapi-class-transformer generate \
|
|
|
44
69
|
--additional-properties modelPackage=dto,apiPackage=services
|
|
45
70
|
```
|
|
46
71
|
|
|
72
|
+
#### CLI Options
|
|
73
|
+
|
|
74
|
+
| Option | Description |
|
|
75
|
+
|--------|-------------|
|
|
76
|
+
| `-i, --input <path>` | **Required**. Path to OpenAPI specification file (JSON or YAML) |
|
|
77
|
+
| `-o, --output <path>` | **Required**. Output directory for generated files |
|
|
78
|
+
| `-t, --template <path>` | Custom template directory |
|
|
79
|
+
| `--models-only` | Generate only model classes (skip APIs and configuration) |
|
|
80
|
+
| `--nestjs-swagger` | Include NestJS Swagger `@ApiProperty` decorators |
|
|
81
|
+
| `--skip-js-extensions` | Skip adding .js extensions to imports/exports |
|
|
82
|
+
| `--class-validator` | Include class-validator decorators (`@IsString`, `@IsOptional`, etc.) |
|
|
83
|
+
| `--additional-properties <props>` | Additional OpenAPI Generator properties (key=value,key2=value2) |
|
|
84
|
+
|
|
47
85
|
### Programmatic API
|
|
48
86
|
|
|
49
87
|
```typescript
|
|
@@ -54,6 +92,14 @@ const generator = new Generator({
|
|
|
54
92
|
outputDir: './src/generated',
|
|
55
93
|
// Optional: custom template directory
|
|
56
94
|
templateDir: './custom-templates',
|
|
95
|
+
// Optional: generate only models (skip APIs)
|
|
96
|
+
modelsOnly: false,
|
|
97
|
+
// Optional: include NestJS Swagger decorators
|
|
98
|
+
nestJsSwagger: false,
|
|
99
|
+
// Optional: skip .js extensions
|
|
100
|
+
skipJsExtensions: false,
|
|
101
|
+
// Optional: include class-validator decorators (NEW in v1.1.0)
|
|
102
|
+
classValidator: false,
|
|
57
103
|
// Optional: additional OpenAPI Generator properties
|
|
58
104
|
additionalProperties: {
|
|
59
105
|
modelPackage: 'dto',
|
|
@@ -165,6 +211,129 @@ const user = plainToInstance(User, plainData);
|
|
|
165
211
|
// ✅ user.profile is properly typed Profile instance
|
|
166
212
|
```
|
|
167
213
|
|
|
214
|
+
## Use with class-validator (NEW in v1.1.0)
|
|
215
|
+
|
|
216
|
+
When you generate models with the `--class-validator` flag, the generator automatically adds appropriate validation decorators based on your OpenAPI schema:
|
|
217
|
+
|
|
218
|
+
### Installation
|
|
219
|
+
|
|
220
|
+
First, install class-validator as a peer dependency:
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
npm install class-validator
|
|
224
|
+
# or
|
|
225
|
+
yarn add class-validator
|
|
226
|
+
# or
|
|
227
|
+
pnpm add class-validator
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
### Generation
|
|
231
|
+
|
|
232
|
+
```bash
|
|
233
|
+
npx openapi-class-transformer generate \
|
|
234
|
+
-i ./api-spec.json \
|
|
235
|
+
-o ./src/generated \
|
|
236
|
+
--class-validator
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
### OpenAPI Schema
|
|
240
|
+
|
|
241
|
+
```yaml
|
|
242
|
+
components:
|
|
243
|
+
schemas:
|
|
244
|
+
User:
|
|
245
|
+
type: object
|
|
246
|
+
required:
|
|
247
|
+
- email
|
|
248
|
+
- age
|
|
249
|
+
properties:
|
|
250
|
+
email:
|
|
251
|
+
type: string
|
|
252
|
+
format: email
|
|
253
|
+
age:
|
|
254
|
+
type: integer
|
|
255
|
+
minimum: 0
|
|
256
|
+
maximum: 120
|
|
257
|
+
bio:
|
|
258
|
+
type: string
|
|
259
|
+
minLength: 10
|
|
260
|
+
maxLength: 500
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
### Generated Output
|
|
264
|
+
|
|
265
|
+
```typescript
|
|
266
|
+
import { Expose, Type } from 'class-transformer';
|
|
267
|
+
import { IsEmail, IsInt, IsOptional, IsString, Length, Max, Min } from 'class-validator';
|
|
268
|
+
|
|
269
|
+
export class User {
|
|
270
|
+
@IsEmail()
|
|
271
|
+
@Expose()
|
|
272
|
+
'email': string;
|
|
273
|
+
|
|
274
|
+
@IsInt()
|
|
275
|
+
@Min(0)
|
|
276
|
+
@Max(120)
|
|
277
|
+
@Expose()
|
|
278
|
+
'age': number;
|
|
279
|
+
|
|
280
|
+
@IsOptional()
|
|
281
|
+
@IsString()
|
|
282
|
+
@Length(10, 500)
|
|
283
|
+
@Expose()
|
|
284
|
+
'bio'?: string;
|
|
285
|
+
}
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
### Usage with Validation
|
|
289
|
+
|
|
290
|
+
```typescript
|
|
291
|
+
import { plainToInstance } from 'class-transformer';
|
|
292
|
+
import { validate } from 'class-validator';
|
|
293
|
+
import { User } from './generated/models/user';
|
|
294
|
+
|
|
295
|
+
const plainData = {
|
|
296
|
+
email: 'john@example.com',
|
|
297
|
+
age: 25,
|
|
298
|
+
bio: 'Software developer with 5 years of experience'
|
|
299
|
+
};
|
|
300
|
+
|
|
301
|
+
// Transform to class instance
|
|
302
|
+
const user = plainToInstance(User, plainData);
|
|
303
|
+
|
|
304
|
+
// Validate
|
|
305
|
+
const errors = await validate(user);
|
|
306
|
+
|
|
307
|
+
if (errors.length > 0) {
|
|
308
|
+
console.error('Validation failed:', errors);
|
|
309
|
+
} else {
|
|
310
|
+
console.log('Validation passed!');
|
|
311
|
+
}
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
### Supported Decorators
|
|
315
|
+
|
|
316
|
+
The generator automatically adds decorators based on OpenAPI schema properties:
|
|
317
|
+
|
|
318
|
+
| OpenAPI Property | Generated Decorator |
|
|
319
|
+
|-----------------|---------------------|
|
|
320
|
+
| `type: string` | `@IsString()` |
|
|
321
|
+
| `type: number` | `@IsNumber()` |
|
|
322
|
+
| `type: integer` | `@IsNumber()` |
|
|
323
|
+
| `type: boolean` | `@IsBoolean()` |
|
|
324
|
+
| `type: array` | `@IsArray()` |
|
|
325
|
+
| `type: object` or `$ref` | `@ValidateNested()` |
|
|
326
|
+
| Not in `required` array | `@IsOptional()` |
|
|
327
|
+
| `format: email` | `@IsEmail()` |
|
|
328
|
+
| `format: url` or `format: uri` | `@IsUrl()` |
|
|
329
|
+
| `format: uuid` | `@IsUUID()` |
|
|
330
|
+
| `pattern: <regex>` | `@Matches(/<regex>/)` |
|
|
331
|
+
| `minLength` / `maxLength` | `@Length(min, max)` |
|
|
332
|
+
| `minimum` / `maximum` | `@Min(min)` / `@Max(max)` |
|
|
333
|
+
| `enum` | `@IsIn([...values])` |
|
|
334
|
+
|
|
335
|
+
For array properties with object items, `@ValidateNested({ each: true })` is added automatically.
|
|
336
|
+
|
|
168
337
|
### Discriminated Unions (Polymorphic Types)
|
|
169
338
|
|
|
170
339
|
When your OpenAPI spec uses `oneOf` or `anyOf` with discriminators, the generator automatically creates discriminator decorators for proper runtime polymorphism:
|
|
@@ -373,6 +542,31 @@ interface GeneratorOptions {
|
|
|
373
542
|
*/
|
|
374
543
|
templateDir?: string;
|
|
375
544
|
|
|
545
|
+
/**
|
|
546
|
+
* Generate only model classes (skip APIs and configuration)
|
|
547
|
+
* @default false
|
|
548
|
+
*/
|
|
549
|
+
modelsOnly?: boolean;
|
|
550
|
+
|
|
551
|
+
/**
|
|
552
|
+
* Include NestJS Swagger @ApiProperty decorators
|
|
553
|
+
* @default false
|
|
554
|
+
*/
|
|
555
|
+
nestJsSwagger?: boolean;
|
|
556
|
+
|
|
557
|
+
/**
|
|
558
|
+
* Skip adding .js extensions to imports/exports
|
|
559
|
+
* Useful for bundlers like webpack/Next.js that don't want extensions
|
|
560
|
+
* @default false
|
|
561
|
+
*/
|
|
562
|
+
skipJsExtensions?: boolean;
|
|
563
|
+
|
|
564
|
+
/**
|
|
565
|
+
* Include class-validator decorators (@IsString, @IsOptional, etc.)
|
|
566
|
+
* @default false
|
|
567
|
+
*/
|
|
568
|
+
classValidator?: boolean;
|
|
569
|
+
|
|
376
570
|
/**
|
|
377
571
|
* Additional OpenAPI Generator properties
|
|
378
572
|
*/
|
package/dist/cli.js
CHANGED
|
@@ -48,6 +48,10 @@ program
|
|
|
48
48
|
.requiredOption('-i, --input <path>', 'Path to OpenAPI specification file')
|
|
49
49
|
.requiredOption('-o, --output <path>', 'Output directory for generated files')
|
|
50
50
|
.option('-t, --template <path>', 'Custom template directory')
|
|
51
|
+
.option('--models-only', 'Generate only model classes (skip APIs and configuration)')
|
|
52
|
+
.option('--nestjs-swagger', 'Include NestJS Swagger @ApiProperty decorators')
|
|
53
|
+
.option('--skip-js-extensions', 'Skip adding .js extensions to imports/exports')
|
|
54
|
+
.option('--class-validator', 'Include class-validator decorators (@IsString, @IsOptional, etc.)')
|
|
51
55
|
.option('--additional-properties <props>', 'Additional OpenAPI Generator properties (key=value,key2=value2)')
|
|
52
56
|
.action(async (options) => {
|
|
53
57
|
try {
|
|
@@ -64,6 +68,10 @@ program
|
|
|
64
68
|
const generatorOptions = {
|
|
65
69
|
inputSpec: path.resolve(options.input),
|
|
66
70
|
outputDir: path.resolve(options.output),
|
|
71
|
+
modelsOnly: options.modelsOnly || false,
|
|
72
|
+
nestJsSwagger: options.nestjsSwagger || false,
|
|
73
|
+
skipJsExtensions: options.skipJsExtensions || false,
|
|
74
|
+
classValidator: options.classValidator || false,
|
|
67
75
|
additionalProperties
|
|
68
76
|
};
|
|
69
77
|
// Only set templateDir if custom template is provided
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,yCAAoC;AACpC,2CAAwC;AACxC,2CAA6B;AAE7B,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,2BAA2B,CAAC;KACjC,WAAW,CAAC,6EAA6E,CAAC;KAC1F,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,wDAAwD,CAAC;KACrE,cAAc,CAAC,oBAAoB,EAAE,oCAAoC,CAAC;KAC1E,cAAc,CAAC,qBAAqB,EAAE,sCAAsC,CAAC;KAC7E,MAAM,CAAC,uBAAuB,EAAE,2BAA2B,CAAC;KAC5D,MAAM,CAAC,iCAAiC,EAAE,iEAAiE,CAAC;KAC5G,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,oBAAoB,GAA2B,EAAE,CAAC;QACxD,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;YACjC,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAY,EAAE,EAAE;gBAC/D,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACrC,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;oBACjB,oBAAoB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACpC,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,kEAAkE;QAClE,MAAM,gBAAgB,GAAQ;YAC5B,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;YACtC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;YACvC,oBAAoB;SACrB,CAAC;QAEF,sDAAsD;QACtD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,gBAAgB,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,qBAAS,CAAC,gBAAgB,CAAC,CAAC;QAElD,MAAM,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,yCAAoC;AACpC,2CAAwC;AACxC,2CAA6B;AAE7B,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,2BAA2B,CAAC;KACjC,WAAW,CAAC,6EAA6E,CAAC;KAC1F,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,wDAAwD,CAAC;KACrE,cAAc,CAAC,oBAAoB,EAAE,oCAAoC,CAAC;KAC1E,cAAc,CAAC,qBAAqB,EAAE,sCAAsC,CAAC;KAC7E,MAAM,CAAC,uBAAuB,EAAE,2BAA2B,CAAC;KAC5D,MAAM,CAAC,eAAe,EAAE,2DAA2D,CAAC;KACpF,MAAM,CAAC,kBAAkB,EAAE,gDAAgD,CAAC;KAC5E,MAAM,CAAC,sBAAsB,EAAE,+CAA+C,CAAC;KAC/E,MAAM,CAAC,mBAAmB,EAAE,mEAAmE,CAAC;KAChG,MAAM,CAAC,iCAAiC,EAAE,iEAAiE,CAAC;KAC5G,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,oBAAoB,GAA2B,EAAE,CAAC;QACxD,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;YACjC,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAY,EAAE,EAAE;gBAC/D,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACrC,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;oBACjB,oBAAoB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACpC,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,kEAAkE;QAClE,MAAM,gBAAgB,GAAQ;YAC5B,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;YACtC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;YACvC,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,KAAK;YACvC,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,KAAK;YAC7C,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,KAAK;YACnD,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,KAAK;YAC/C,oBAAoB;SACrB,CAAC;QAEF,sDAAsD;QACtD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,gBAAgB,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,qBAAS,CAAC,gBAAgB,CAAC,CAAC;QAElD,MAAM,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
package/dist/generator.d.ts
CHANGED
|
@@ -28,6 +28,16 @@ export interface GeneratorOptions {
|
|
|
28
28
|
* @default false
|
|
29
29
|
*/
|
|
30
30
|
skipJsExtensions?: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Include class-validator decorators (@IsString, @IsOptional, etc.)
|
|
33
|
+
* @default false
|
|
34
|
+
*/
|
|
35
|
+
classValidator?: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Export style for generated index files
|
|
38
|
+
* @default 'namespace'
|
|
39
|
+
*/
|
|
40
|
+
exportStyle?: 'namespace' | 'direct' | 'both';
|
|
31
41
|
/**
|
|
32
42
|
* Additional OpenAPI Generator properties
|
|
33
43
|
*/
|
package/dist/generator.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/C;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAA6B;gBAEhC,OAAO,EAAE,gBAAgB;
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;OAGG;IACH,WAAW,CAAC,EAAE,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;IAE9C;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/C;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAA6B;gBAEhC,OAAO,EAAE,gBAAgB;IAerC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA8B7B;;OAEG;IACH,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAgGhC"}
|
package/dist/generator.js
CHANGED
|
@@ -45,6 +45,8 @@ class Generator {
|
|
|
45
45
|
modelsOnly: false,
|
|
46
46
|
nestJsSwagger: false,
|
|
47
47
|
skipJsExtensions: false,
|
|
48
|
+
classValidator: false,
|
|
49
|
+
exportStyle: 'namespace',
|
|
48
50
|
additionalProperties: {},
|
|
49
51
|
...options
|
|
50
52
|
};
|
|
@@ -162,7 +164,7 @@ class Generator {
|
|
|
162
164
|
}
|
|
163
165
|
// Post-process generated files
|
|
164
166
|
console.log('Post-processing generated files...');
|
|
165
|
-
const postProcessor = new post_processor_1.PostProcessor(this.options.inputSpec, this.options.outputDir, this.options.nestJsSwagger, this.options.skipJsExtensions);
|
|
167
|
+
const postProcessor = new post_processor_1.PostProcessor(this.options.inputSpec, this.options.outputDir, this.options.nestJsSwagger, this.options.skipJsExtensions, this.options.classValidator, this.options.exportStyle);
|
|
166
168
|
await postProcessor.process();
|
|
167
169
|
console.log('Generation complete!');
|
|
168
170
|
}
|
package/dist/generator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAyC;AACzC,uCAAyB;AACzB,2CAA6B;AAC7B,qDAAiD;
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
|
package/dist/post-processor.d.ts
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
|
+
import { ExportStyle } from './utils/export-style';
|
|
1
2
|
export declare class PostProcessor {
|
|
2
3
|
private openApiSpec;
|
|
3
4
|
private outputDir;
|
|
4
5
|
private nestJsSwagger;
|
|
5
6
|
private skipJsExtensions;
|
|
7
|
+
private classValidator;
|
|
8
|
+
private exportStyle;
|
|
6
9
|
private unionTypeMap;
|
|
7
10
|
private discriminatedUnionMap;
|
|
8
|
-
constructor(specPath: string, outputDir: string, nestJsSwagger?: boolean, skipJsExtensions?: boolean);
|
|
11
|
+
constructor(specPath: string, outputDir: string, nestJsSwagger?: boolean, skipJsExtensions?: boolean, classValidator?: boolean, exportStyle?: ExportStyle);
|
|
9
12
|
/**
|
|
10
13
|
* Load OpenAPI specification
|
|
11
14
|
*/
|
|
@@ -132,10 +135,31 @@ export declare class PostProcessor {
|
|
|
132
135
|
* Add .js extensions to relative imports
|
|
133
136
|
*/
|
|
134
137
|
private fixImportExtensions;
|
|
138
|
+
/**
|
|
139
|
+
* Remove .js extensions from relative imports
|
|
140
|
+
* Used when skipJsExtensions is true to remove extensions that OpenAPI generator added
|
|
141
|
+
*/
|
|
142
|
+
private removeImportExtensions;
|
|
135
143
|
/**
|
|
136
144
|
* Clean up unnecessary generated files
|
|
137
145
|
*/
|
|
138
146
|
private cleanup;
|
|
147
|
+
/**
|
|
148
|
+
* Ensure models/index.ts exists with proper exports
|
|
149
|
+
*/
|
|
150
|
+
private ensureModelsIndex;
|
|
151
|
+
/**
|
|
152
|
+
* Add class-validator decorators to properties
|
|
153
|
+
*/
|
|
154
|
+
private addClassValidatorDecorators;
|
|
155
|
+
/**
|
|
156
|
+
* Get validation decorators for a property based on its OpenAPI definition
|
|
157
|
+
*/
|
|
158
|
+
private getValidationDecorators;
|
|
159
|
+
/**
|
|
160
|
+
* Get the schema for a class by looking it up in the OpenAPI spec
|
|
161
|
+
*/
|
|
162
|
+
private getSchemaForClass;
|
|
139
163
|
/**
|
|
140
164
|
* Convert PascalCase to kebab-case
|
|
141
165
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post-processor.d.ts","sourceRoot":"","sources":["../src/post-processor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"post-processor.d.ts","sourceRoot":"","sources":["../src/post-processor.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,WAAW,EAGZ,MAAM,sBAAsB,CAAC;AAc9B,qBAAa,aAAa;IACxB,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,gBAAgB,CAAU;IAClC,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,YAAY,CAAgF;IACpG,OAAO,CAAC,qBAAqB,CAAwC;gBAGnE,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,aAAa,GAAE,OAAe,EAC9B,gBAAgB,GAAE,OAAe,EACjC,cAAc,GAAE,OAAe,EAC/B,WAAW,GAAE,WAAyB;IAaxC;;OAEG;IACH,OAAO,CAAC,QAAQ;IAShB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAgCzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAyCxB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAgB7B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAuB7B;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAWlC;;OAEG;IACH,OAAO,CAAC,iCAAiC;IASzC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA8D9B;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IA2C7B;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAiCrC;;;OAGG;IACH,OAAO,CAAC,0BAA0B;IAmBlC;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAsDpB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAqBhB;;;;;;;;OAQG;IACH,OAAO,CAAC,cAAc;IAsBtB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,4BAA4B;IA+FpC;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB;IA2C/B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAiDzB;;;;;OAKG;IACH,OAAO,CAAC,0BAA0B;IA0DlC;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAmCnC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAyG9B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA6B3B;;OAEG;IACH,OAAO,CAAC,kCAAkC;IAyJ1C;;OAEG;IACH,OAAO,CAAC,8BAA8B;IA+CtC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAU9B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA2B3B;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IA6B9B;;OAEG;IACH,OAAO,CAAC,OAAO;IAuCf;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA2FzB;;OAEG;IACH,OAAO,CAAC,2BAA2B;IA0EnC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAsH/B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA0BzB;;OAEG;IACH,OAAO,CAAC,WAAW;CAMpB"}
|