Skip to content

Commit 79788da

Browse files
committed
1 parent 498d416 commit 79788da

File tree

10 files changed

+219
-153
lines changed

10 files changed

+219
-153
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "openapi-typescript-codegen",
3-
"version": "0.9.3",
3+
"version": "0.9.4",
44
"description": "Library that generates Typescript clients based on the OpenAPI specification.",
55
"author": "Ferdi Koomen",
66
"homepage": "https://github.com/ferdikoomen/openapi-typescript-codegen",

src/openApi/v2/parser/getModelComposition.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@ export function getModelComposition(openApi: OpenApi, definition: OpenApiSchema,
3131
});
3232

3333
if (definition.properties) {
34+
const properties = getModelProperties(openApi, definition, getModel);
35+
properties.forEach(property => {
36+
composition.imports.push(...property.imports);
37+
composition.enums.push(...property.enums);
38+
});
3439
composition.properties.push({
3540
name: 'properties',
3641
export: 'interface',
@@ -46,7 +51,7 @@ export function getModelComposition(openApi: OpenApi, definition: OpenApiSchema,
4651
imports: [],
4752
enum: [],
4853
enums: [],
49-
properties: [...getModelProperties(openApi, definition, getModel)],
54+
properties,
5055
});
5156
}
5257
return composition;

src/openApi/v3/parser/getModelComposition.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@ export function getModelComposition(openApi: OpenApi, definition: OpenApiSchema,
3131
});
3232

3333
if (definition.properties) {
34+
const properties = getModelProperties(openApi, definition, getModel);
35+
properties.forEach(property => {
36+
composition.imports.push(...property.imports);
37+
composition.enums.push(...property.enums);
38+
});
3439
composition.properties.push({
3540
name: 'properties',
3641
export: 'interface',
@@ -46,7 +51,7 @@ export function getModelComposition(openApi: OpenApi, definition: OpenApiSchema,
4651
imports: [],
4752
enum: [],
4853
enums: [],
49-
properties: [...getModelProperties(openApi, definition, getModel)],
54+
properties,
5055
});
5156
}
5257

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
({{#intersection properties parent}}{{this}}{{/intersection}}){{>isNullable}}
1+
{{#intersection properties parent}}{{this}}{{/intersection}}{{>isNullable}}

src/templates/partials/typeUnion.hbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
({{#union properties parent}}{{this}}{{/union}}){{>isNullable}}
1+
{{#union properties parent}}{{this}}{{/union}}{{>isNullable}}

src/utils/registerHandlebarHelpers.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,23 @@ export function registerHandlebarHelpers(root: { httpClient: HttpClient; useOpti
2121
Handlebars.registerHelper('union', function (this: any, properties: Model[], parent: string | undefined, options: Handlebars.HelperOptions) {
2222
const type = Handlebars.partials['type'];
2323
const types = properties.map(property => type({ ...root, ...property, parent }));
24-
return options.fn(types.filter(unique).join(' | '));
24+
const uniqueTypes = types.filter(unique);
25+
let uniqueTypesString = uniqueTypes.join(' | ');
26+
if (uniqueTypes.length > 1) {
27+
uniqueTypesString = `(${uniqueTypesString})`;
28+
}
29+
return options.fn(uniqueTypesString);
2530
});
2631

2732
Handlebars.registerHelper('intersection', function (this: any, properties: Model[], parent: string | undefined, options: Handlebars.HelperOptions) {
2833
const type = Handlebars.partials['type'];
2934
const types = properties.map(property => type({ ...root, ...property, parent }));
30-
return options.fn(types.filter(unique).join(' & '));
35+
const uniqueTypes = types.filter(unique);
36+
let uniqueTypesString = uniqueTypes.join(' & ');
37+
if (uniqueTypes.length > 1) {
38+
uniqueTypesString = `(${uniqueTypesString})`;
39+
}
40+
return options.fn(uniqueTypesString);
3141
});
3242

3343
Handlebars.registerHelper('enumerator', function (this: any, enumerators: Enum[], parent: string | undefined, name: string | undefined, options: Handlebars.HelperOptions) {

test/__snapshots__/index.spec.js.snap

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -594,12 +594,18 @@ export enum EnumWithNumbers {
594594
'_1' = 1,
595595
'_2' = 2,
596596
'_3' = 3,
597+
'_1.1' = 1.1,
598+
'_1.2' = 1.2,
599+
'_1.3' = 1.3,
597600
'_100' = 100,
598601
'_200' = 200,
599602
'_300' = 300,
600603
'_-100' = -100,
601604
'_-200' = -200,
602605
'_-300' = -300,
606+
'_-1.1' = -1.1,
607+
'_-1.2' = -1.2,
608+
'_-1.3' = -1.3,
603609
}"
604610
`;
605611

@@ -3068,12 +3074,18 @@ export enum EnumWithNumbers {
30683074
'_1' = 1,
30693075
'_2' = 2,
30703076
'_3' = 3,
3077+
'_1.1' = 1.1,
3078+
'_1.2' = 1.2,
3079+
'_1.3' = 1.3,
30713080
'_100' = 100,
30723081
'_200' = 200,
30733082
'_300' = 300,
30743083
'_-100' = -100,
30753084
'_-200' = -200,
30763085
'_-300' = -300,
3086+
'_-1.1' = -1.1,
3087+
'_-1.2' = -1.2,
3088+
'_-1.3' = -1.3,
30773089
}"
30783090
`;
30793091

test/spec/v2.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -816,12 +816,18 @@
816816
1,
817817
2,
818818
3,
819+
1.1,
820+
1.20,
821+
1.300,
819822
100,
820823
200,
821824
300,
822825
-100,
823826
-200,
824-
-300
827+
-300,
828+
-1.1,
829+
-1.20,
830+
-1.300
825831
]
826832
},
827833
"EnumFromDescription": {

test/spec/v3.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1315,12 +1315,18 @@
13151315
1,
13161316
2,
13171317
3,
1318+
1.1,
1319+
1.20,
1320+
1.300,
13181321
100,
13191322
200,
13201323
300,
13211324
-100,
13221325
-200,
1323-
-300
1326+
-300,
1327+
-1.1,
1328+
-1.20,
1329+
-1.300
13241330
]
13251331
},
13261332
"EnumFromDescription": {

0 commit comments

Comments
 (0)