Skip to content

Commit 927cb35

Browse files
committed
feat(parser): return optional success response on 204 status code
1 parent 3275f3b commit 927cb35

File tree

7 files changed

+96
-52
lines changed

7 files changed

+96
-52
lines changed

src/openApi/v2/parser/getOperationResponse.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ export const getOperationResponse = (
1818
code: responseCode,
1919
description: response.description || null,
2020
export: 'generic',
21-
type: 'any',
22-
base: 'any',
21+
type: responseCode !== 204 ? 'any' : 'void',
22+
base: responseCode !== 204 ? 'any' : 'void',
2323
template: null,
2424
link: null,
2525
isDefinition: false,

src/openApi/v2/parser/getOperationResults.ts

Lines changed: 2 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -12,36 +12,14 @@ const areEqual = (a: Model, b: Model): boolean => {
1212
export const getOperationResults = (operationResponses: OperationResponse[]): OperationResponse[] => {
1313
const operationResults: OperationResponse[] = [];
1414

15-
// Filter out success response codes, but skip "204 No Content"
15+
// Filter out success response codes
1616
operationResponses.forEach(operationResponse => {
1717
const { code } = operationResponse;
18-
if (code && code !== 204 && code >= 200 && code < 300) {
18+
if (code && code >= 200 && code < 300) {
1919
operationResults.push(operationResponse);
2020
}
2121
});
2222

23-
if (!operationResults.length) {
24-
operationResults.push({
25-
in: 'response',
26-
name: '',
27-
code: 200,
28-
description: '',
29-
export: 'generic',
30-
type: 'void',
31-
base: 'void',
32-
template: null,
33-
link: null,
34-
isDefinition: false,
35-
isReadOnly: false,
36-
isRequired: false,
37-
isNullable: false,
38-
imports: [],
39-
enum: [],
40-
enums: [],
41-
properties: [],
42-
});
43-
}
44-
4523
return operationResults.filter((operationResult, index, arr) => {
4624
return (
4725
arr.findIndex(item => {

src/openApi/v3/parser/getOperationResponse.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ export const getOperationResponse = (
1919
code: responseCode,
2020
description: response.description || null,
2121
export: 'generic',
22-
type: 'any',
23-
base: 'any',
22+
type: responseCode !== 204 ? 'any' : 'void',
23+
base: responseCode !== 204 ? 'any' : 'void',
2424
template: null,
2525
link: null,
2626
isDefinition: false,

src/openApi/v3/parser/getOperationResults.ts

Lines changed: 2 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -12,36 +12,14 @@ const areEqual = (a: Model, b: Model): boolean => {
1212
export const getOperationResults = (operationResponses: OperationResponse[]): OperationResponse[] => {
1313
const operationResults: OperationResponse[] = [];
1414

15-
// Filter out success response codes, but skip "204 No Content"
15+
// Filter out success response codes
1616
operationResponses.forEach(operationResponse => {
1717
const { code } = operationResponse;
18-
if (code && code !== 204 && code >= 200 && code < 300) {
18+
if (code && code >= 200 && code < 300) {
1919
operationResults.push(operationResponse);
2020
}
2121
});
2222

23-
if (!operationResults.length) {
24-
operationResults.push({
25-
in: 'response',
26-
name: '',
27-
code: 200,
28-
description: '',
29-
export: 'generic',
30-
type: 'void',
31-
base: 'void',
32-
template: null,
33-
link: null,
34-
isDefinition: false,
35-
isReadOnly: false,
36-
isRequired: false,
37-
isNullable: false,
38-
imports: [],
39-
enum: [],
40-
enums: [],
41-
properties: [],
42-
});
43-
}
44-
4523
return operationResults.filter((operationResult, index, arr) => {
4624
return (
4725
arr.findIndex(item => {

test/__snapshots__/index.spec.ts.snap

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2809,6 +2809,16 @@ export class NoContentService {
28092809
url: '/api/v{api-version}/no-content',
28102810
});
28112811
}
2812+
/**
2813+
* @returns any Response is a simple number
2814+
* @throws ApiError
2815+
*/
2816+
public static callWithResponseAndNoContentResponse(): CancelablePromise<any> {
2817+
return __request(OpenAPI, {
2818+
method: 'GET',
2819+
url: '/api/v{api-version}/multiple-tags/response-and-no-content',
2820+
});
2821+
}
28122822
}
28132823
"
28142824
`;
@@ -2913,6 +2923,16 @@ import type { CancelablePromise } from '../core/CancelablePromise';
29132923
import { OpenAPI } from '../core/OpenAPI';
29142924
import { request as __request } from '../core/request';
29152925
export class ResponseService {
2926+
/**
2927+
* @returns any Response is a simple number
2928+
* @throws ApiError
2929+
*/
2930+
public static callWithResponseAndNoContentResponse(): CancelablePromise<any> {
2931+
return __request(OpenAPI, {
2932+
method: 'GET',
2933+
url: '/api/v{api-version}/multiple-tags/response-and-no-content',
2934+
});
2935+
}
29162936
/**
29172937
* @returns ModelWithString Message for default response
29182938
* @throws ApiError
@@ -6985,6 +7005,16 @@ export class NoContentService {
69857005
url: '/api/v{api-version}/no-content',
69867006
});
69877007
}
7008+
/**
7009+
* @returns number Response is a simple number
7010+
* @throws ApiError
7011+
*/
7012+
public static callWithResponseAndNoContentResponse(): CancelablePromise<number> {
7013+
return __request(OpenAPI, {
7014+
method: 'GET',
7015+
url: '/api/v{api-version}/multiple-tags/response-and-no-content',
7016+
});
7017+
}
69887018
}
69897019
"
69907020
`;
@@ -7174,6 +7204,16 @@ import type { CancelablePromise } from '../core/CancelablePromise';
71747204
import { OpenAPI } from '../core/OpenAPI';
71757205
import { request as __request } from '../core/request';
71767206
export class ResponseService {
7207+
/**
7208+
* @returns number Response is a simple number
7209+
* @throws ApiError
7210+
*/
7211+
public static callWithResponseAndNoContentResponse(): CancelablePromise<number> {
7212+
return __request(OpenAPI, {
7213+
method: 'GET',
7214+
url: '/api/v{api-version}/multiple-tags/response-and-no-content',
7215+
});
7216+
}
71777217
/**
71787218
* @returns ModelWithString
71797219
* @throws ApiError

test/spec/v2.json

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -456,6 +456,30 @@
456456
}
457457
}
458458
},
459+
"/api/v{api-version}/multiple-tags/response-and-no-content": {
460+
"get": {
461+
"tags": [
462+
"Response",
463+
"NoContent"
464+
],
465+
"operationId": "CallWithResponseAndNoContentResponse",
466+
"responses": {
467+
"200": {
468+
"description": "Response is a simple number",
469+
"content": {
470+
"application/json": {
471+
"schema": {
472+
"type": "number"
473+
}
474+
}
475+
}
476+
},
477+
"204": {
478+
"description": "Success"
479+
}
480+
}
481+
}
482+
},
459483
"/api/v{api-version}/multiple-tags/a": {
460484
"get": {
461485
"tags": [

test/spec/v3.json

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -663,6 +663,30 @@
663663
}
664664
}
665665
},
666+
"/api/v{api-version}/multiple-tags/response-and-no-content": {
667+
"get": {
668+
"tags": [
669+
"Response",
670+
"NoContent"
671+
],
672+
"operationId": "CallWithResponseAndNoContentResponse",
673+
"responses": {
674+
"200": {
675+
"description": "Response is a simple number",
676+
"content": {
677+
"application/json": {
678+
"schema": {
679+
"type": "number"
680+
}
681+
}
682+
}
683+
},
684+
"204": {
685+
"description": "Success"
686+
}
687+
}
688+
}
689+
},
666690
"/api/v{api-version}/multiple-tags/a": {
667691
"get": {
668692
"tags": [

0 commit comments

Comments
 (0)