Skip to content

Commit 78d6876

Browse files
committed
- Fixed issue ferdikoomen#869
1 parent fa2bab0 commit 78d6876

File tree

5 files changed

+44
-16
lines changed

5 files changed

+44
-16
lines changed

src/openApi/v2/parser/getOperationParameter.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@ import type { OperationParameter } from '../../../client/interfaces/OperationPar
22
import { getPattern } from '../../../utils/getPattern';
33
import type { OpenApi } from '../interfaces/OpenApi';
44
import type { OpenApiParameter } from '../interfaces/OpenApiParameter';
5+
import type { OpenApiSchema } from '../interfaces/OpenApiSchema';
56
import { extendEnum } from './extendEnum';
67
import { getComment } from './getComment';
78
import { getEnum } from './getEnum';
89
import { getEnumFromDescription } from './getEnumFromDescription';
910
import { getModel } from './getModel';
1011
import { getOperationParameterDefault } from './getOperationParameterDefault';
1112
import { getOperationParameterName } from './getOperationParameterName';
13+
import { getRef } from './getRef';
1214
import { getType } from './getType';
1315

1416
export function getOperationParameter(openApi: OpenApi, parameter: OpenApiParameter): OperationParameter {
@@ -103,9 +105,13 @@ export function getOperationParameter(openApi: OpenApi, parameter: OpenApiParame
103105
return operationParameter;
104106
}
105107

106-
if (parameter.schema) {
107-
if (parameter.schema.$ref) {
108-
const model = getType(parameter.schema.$ref);
108+
let schema = parameter.schema;
109+
if (schema) {
110+
if (schema.$ref?.startsWith('#/parameters/')) {
111+
schema = getRef<OpenApiSchema>(openApi, schema);
112+
}
113+
if (schema.$ref) {
114+
const model = getType(schema.$ref);
109115
operationParameter.export = 'reference';
110116
operationParameter.type = model.type;
111117
operationParameter.base = model.base;
@@ -114,7 +120,7 @@ export function getOperationParameter(openApi: OpenApi, parameter: OpenApiParame
114120
operationParameter.default = getOperationParameterDefault(parameter, operationParameter);
115121
return operationParameter;
116122
} else {
117-
const model = getModel(openApi, parameter.schema);
123+
const model = getModel(openApi, schema);
118124
operationParameter.export = model.export;
119125
operationParameter.type = model.type;
120126
operationParameter.base = model.base;

src/openApi/v2/parser/getOperationResponse.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@ import type { OperationResponse } from '../../../client/interfaces/OperationResp
22
import { getPattern } from '../../../utils/getPattern';
33
import type { OpenApi } from '../interfaces/OpenApi';
44
import type { OpenApiResponse } from '../interfaces/OpenApiResponse';
5+
import type { OpenApiSchema } from '../interfaces/OpenApiSchema';
56
import { getComment } from './getComment';
67
import { getModel } from './getModel';
8+
import { getRef } from './getRef';
79
import { getType } from './getType';
810

911
export function getOperationResponse(openApi: OpenApi, response: OpenApiResponse, responseCode: number): OperationResponse {
@@ -31,17 +33,21 @@ export function getOperationResponse(openApi: OpenApi, response: OpenApiResponse
3133
// if this is a reference then the parameter is just the 'name' of
3234
// this reference type. Otherwise it might be a complex schema and
3335
// then we need to parse the schema!
34-
if (response.schema) {
35-
if (response.schema.$ref) {
36-
const model = getType(response.schema.$ref);
36+
let schema = response.schema;
37+
if (schema) {
38+
if (schema.$ref?.startsWith('#/responses/')) {
39+
schema = getRef<OpenApiSchema>(openApi, schema);
40+
}
41+
if (schema.$ref) {
42+
const model = getType(schema.$ref);
3743
operationResponse.export = 'reference';
3844
operationResponse.type = model.type;
3945
operationResponse.base = model.base;
4046
operationResponse.template = model.template;
4147
operationResponse.imports.push(...model.imports);
4248
return operationResponse;
4349
} else {
44-
const model = getModel(openApi, response.schema);
50+
const model = getModel(openApi, schema);
4551
operationResponse.export = model.export;
4652
operationResponse.type = model.type;
4753
operationResponse.base = model.base;

src/openApi/v3/parser/getOperationParameter.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@ import type { OperationParameter } from '../../../client/interfaces/OperationPar
22
import { getPattern } from '../../../utils/getPattern';
33
import type { OpenApi } from '../interfaces/OpenApi';
44
import type { OpenApiParameter } from '../interfaces/OpenApiParameter';
5+
import type { OpenApiSchema } from '../interfaces/OpenApiSchema';
56
import { getComment } from './getComment';
67
import { getModel } from './getModel';
78
import { getModelDefault } from './getModelDefault';
89
import { getOperationParameterName } from './getOperationParameterName';
10+
import { getRef } from './getRef';
911
import { getType } from './getType';
1012

1113
export function getOperationParameter(openApi: OpenApi, parameter: OpenApiParameter): OperationParameter {
@@ -40,18 +42,22 @@ export function getOperationParameter(openApi: OpenApi, parameter: OpenApiParame
4042
return operationParameter;
4143
}
4244

43-
if (parameter.schema) {
44-
if (parameter.schema.$ref) {
45-
const model = getType(parameter.schema.$ref);
45+
let schema = parameter.schema;
46+
if (schema) {
47+
if (schema.$ref?.startsWith('#/components/parameters/')) {
48+
schema = getRef<OpenApiSchema>(openApi, schema);
49+
}
50+
if (schema.$ref) {
51+
const model = getType(schema.$ref);
4652
operationParameter.export = 'reference';
4753
operationParameter.type = model.type;
4854
operationParameter.base = model.base;
4955
operationParameter.template = model.template;
5056
operationParameter.imports.push(...model.imports);
51-
operationParameter.default = getModelDefault(parameter.schema);
57+
operationParameter.default = getModelDefault(schema);
5258
return operationParameter;
5359
} else {
54-
const model = getModel(openApi, parameter.schema);
60+
const model = getModel(openApi, schema);
5561
operationParameter.export = model.export;
5662
operationParameter.type = model.type;
5763
operationParameter.base = model.base;

src/openApi/v3/parser/getOperationResponse.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@ import type { OperationResponse } from '../../../client/interfaces/OperationResp
22
import { getPattern } from '../../../utils/getPattern';
33
import type { OpenApi } from '../interfaces/OpenApi';
44
import type { OpenApiResponse } from '../interfaces/OpenApiResponse';
5+
import type { OpenApiSchema } from '../interfaces/OpenApiSchema';
56
import { getComment } from './getComment';
67
import { getContent } from './getContent';
78
import { getModel } from './getModel';
9+
import { getRef } from './getRef';
810
import { getType } from './getType';
911

1012
export function getOperationResponse(openApi: OpenApi, response: OpenApiResponse, responseCode: number): OperationResponse {
@@ -29,9 +31,12 @@ export function getOperationResponse(openApi: OpenApi, response: OpenApiResponse
2931
};
3032

3133
if (response.content) {
32-
const schema = getContent(openApi, response.content);
34+
let schema = getContent(openApi, response.content);
3335
if (schema) {
34-
if (schema?.$ref) {
36+
if (schema.$ref?.startsWith('#/components/responses/')) {
37+
schema = getRef<OpenApiSchema>(openApi, schema);
38+
}
39+
if (schema.$ref) {
3540
const model = getType(schema.$ref);
3641
operationResponse.export = 'reference';
3742
operationResponse.type = model.type;

yarn.lock

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1363,6 +1363,11 @@
13631363
jest-diff "^27.0.0"
13641364
pretty-format "^27.0.0"
13651365

1366+
1367+
version "4.0.4"
1368+
resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-4.0.4.tgz#cc38781257612581a1a0eb25f1709d2b06812fce"
1369+
integrity sha512-AuHubXUmg0AzkXH0Mx6sIxeY/1C110mm/EkE/gB1sTRz3h2dao2W/63q42SlVST+lICxz5Oki2hzYA6+KnnieQ==
1370+
13661371
"@types/json-schema@^7.0.6", "@types/json-schema@^7.0.9":
13671372
version "7.0.9"
13681373
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d"
@@ -3534,7 +3539,7 @@ [email protected], js-yaml@^3.13.1:
35343539
argparse "^1.0.7"
35353540
esprima "^4.0.0"
35363541

3537-
js-yaml@^4.1.0:
3542+
js-yaml@4.1.0, js-yaml@^4.1.0:
35383543
version "4.1.0"
35393544
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
35403545
integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==

0 commit comments

Comments
 (0)