Skip to content

Commit 2f7cc89

Browse files
committed
fix: additional properties integer type
1 parent f863be7 commit 2f7cc89

File tree

38 files changed

+206
-17
lines changed

38 files changed

+206
-17
lines changed

.changeset/fuzzy-ties-fly.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@hey-api/openapi-ts': patch
3+
---
4+
5+
fix: correctly handle integer type in additional properties

packages/openapi-ts/src/openApi/common/parser/__tests__/type.spec.ts

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,27 +16,28 @@ vi.mock('../../../../utils/config', () => {
1616

1717
describe('getMappedType', () => {
1818
it.each([
19-
{ expected: undefined, type: '' },
20-
{ expected: 'unknown', type: 'any' },
21-
{ expected: 'unknown[]', type: 'array' },
19+
{ expected: 'binary', type: 'file' },
2220
{ expected: 'boolean', type: 'boolean' },
21+
{ expected: 'null', type: 'null' },
2322
{ expected: 'number', type: 'byte' },
24-
{ expected: 'string', type: 'char' },
25-
{ expected: 'string', type: 'date-time' },
26-
{ expected: 'string', type: 'date' },
2723
{ expected: 'number', type: 'double' },
28-
{ expected: 'binary', type: 'file' },
2924
{ expected: 'number', type: 'float' },
3025
{ expected: 'number', type: 'int' },
3126
{ expected: 'number', type: 'integer' },
3227
{ expected: 'number', type: 'long' },
33-
{ expected: 'null', type: 'null' },
3428
{ expected: 'number', type: 'number' },
35-
{ expected: 'unknown', type: 'object' },
36-
{ expected: 'string', type: 'password' },
3729
{ expected: 'number', type: 'short' },
30+
{ expected: 'string', type: 'char' },
31+
{ expected: 'string', type: 'date-time' },
32+
{ expected: 'string', type: 'date' },
33+
{ expected: 'string', type: 'password' },
3834
{ expected: 'string', type: 'string' },
35+
{ expected: 'unknown', type: 'any' },
36+
{ expected: 'unknown', type: 'object' },
37+
{ expected: 'unknown', type: 'unknown' },
38+
{ expected: 'unknown[]', type: 'array' },
3939
{ expected: 'void', type: 'void' },
40+
{ expected: undefined, type: '' },
4041
])('should map type $type to $expected', ({ type, expected }) => {
4142
expect(getMappedType(type)).toEqual(expected);
4243
});

packages/openapi-ts/src/openApi/common/parser/type.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ export const getMappedType = (
2424
switch (type) {
2525
case 'any':
2626
case 'object':
27+
case 'unknown':
2728
return 'unknown';
2829
case 'array':
2930
return 'unknown[]';

packages/openapi-ts/src/openApi/v3/parser/getModel.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -223,10 +223,8 @@ export const getModel = ({
223223
) {
224224
if (
225225
definition.properties &&
226-
!(
227-
!Object.keys(definition.properties).length &&
228-
definition.additionalProperties
229-
)
226+
(Object.keys(definition.properties).length > 0 ||
227+
!definition.additionalProperties)
230228
) {
231229
model.base = 'unknown';
232230
model.export = 'interface';
@@ -253,6 +251,7 @@ export const getModel = ({
253251

254252
if (definition.additionalProperties) {
255253
const modelProperty = getAdditionalPropertiesModel({
254+
debug,
256255
definition,
257256
getModel,
258257
model,

packages/openapi-ts/src/openApi/v3/parser/getModelProperties.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ export const getAdditionalPropertiesModel = ({
5555
if (
5656
definition.additionalProperties &&
5757
definition.properties &&
58-
Object.keys(definition.properties).length
58+
Object.keys(definition.properties).length > 0
5959
) {
6060
const additionalPropertiesType =
6161
typeof definition.additionalProperties === 'object' &&
@@ -64,7 +64,7 @@ export const getAdditionalPropertiesModel = ({
6464
? definition.additionalProperties.type
6565
: apModel.base;
6666
const additionalProperties = [
67-
additionalPropertiesType,
67+
getType({ type: additionalPropertiesType }).base,
6868
...model.properties.map((property) => property.base),
6969
];
7070
apModel.base = additionalProperties.filter(unique).join(' | ');

packages/openapi-ts/src/openApi/v3/parser/getOperationRequestBody.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,12 @@ import { getModel } from './getModel';
99

1010
export const getOperationRequestBody = ({
1111
body,
12+
debug,
1213
openApi,
1314
types,
1415
}: {
1516
body: OpenApiRequestBody;
17+
debug?: boolean;
1618
openApi: OpenApi;
1719
types: Client['types'];
1820
}): OperationParameter => {
@@ -73,7 +75,7 @@ export const getOperationRequestBody = ({
7375
}
7476

7577
const model = getModel({
76-
debug: true,
78+
debug,
7779
definition: content.schema,
7880
openApi,
7981
types,

packages/openapi-ts/src/openApi/v3/parser/operation.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ const mergeParameters = (
4040
};
4141

4242
export const getOperation = ({
43+
debug,
4344
method,
4445
op,
4546
openApi,
@@ -48,6 +49,7 @@ export const getOperation = ({
4849
types,
4950
url,
5051
}: {
52+
debug?: boolean;
5153
method: Lowercase<Operation['method']>;
5254
op: OpenApiOperation;
5355
openApi: OpenApi;
@@ -117,6 +119,7 @@ export const getOperation = ({
117119
const requestBodyDef = getRef<OpenApiRequestBody>(openApi, op.requestBody);
118120
const requestBody = getOperationRequestBody({
119121
body: requestBodyDef,
122+
debug,
120123
openApi,
121124
types,
122125
});

packages/openapi-ts/test/__snapshots__/test/generated/v3-hey-api-client-axios-bundle/types.gen.ts.snap

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1057,6 +1057,11 @@ export type AdditionalPropertiesUnknownIssue3 = string & {
10571057
};
10581058
};
10591059

1060+
export type AdditionalPropertiesIntegerIssue = {
1061+
value: number;
1062+
[key: string]: (number) | undefined;
1063+
};
1064+
10601065
/**
10611066
* This is a reusable parameter
10621067
*/

packages/openapi-ts/test/__snapshots__/test/generated/v3-hey-api-client-axios-class/types.gen.ts.snap

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1057,6 +1057,11 @@ export type AdditionalPropertiesUnknownIssue3 = string & {
10571057
};
10581058
};
10591059

1060+
export type AdditionalPropertiesIntegerIssue = {
1061+
value: number;
1062+
[key: string]: (number) | undefined;
1063+
};
1064+
10601065
/**
10611066
* This is a reusable parameter
10621067
*/

packages/openapi-ts/test/__snapshots__/test/generated/v3-hey-api-client-axios-plugin-tanstack-react-query/types.gen.ts.snap

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1057,6 +1057,11 @@ export type AdditionalPropertiesUnknownIssue3 = string & {
10571057
};
10581058
};
10591059

1060+
export type AdditionalPropertiesIntegerIssue = {
1061+
value: number;
1062+
[key: string]: (number) | undefined;
1063+
};
1064+
10601065
/**
10611066
* This is a reusable parameter
10621067
*/

0 commit comments

Comments
 (0)