Skip to content

Commit feeb526

Browse files
authored
Merge pull request ferdikoomen#2 from mrlubos/feat/response-204
Optional response type when 204 response exists
2 parents 1f8316c + 827581d commit feeb526

File tree

10 files changed

+437
-271
lines changed

10 files changed

+437
-271
lines changed

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
11
# Changelog
22
All notable changes to this project will be documented in this file.
33

4+
## [0.27.0] - 2024-01-15
5+
### Fixed
6+
- Reverted `@apidevtools/json-schema-ref-parser` to version 10.1.0
7+
8+
## [0.26.0] - 2024-01-07
9+
### Fixed
10+
- Upgraded dependencies
11+
412
## [0.25.0] - 2023-07-05
513
### Fixed
614
- Upgraded dependencies

package-lock.json

Lines changed: 322 additions & 208 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "openapi-typescript-codegen",
3-
"version": "0.26.2",
3+
"version": "0.27.0",
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",
@@ -60,7 +60,7 @@
6060
"docker": "docker build -t eeelenbaas/openapi-typescript-codegen ."
6161
},
6262
"dependencies": {
63-
"@apidevtools/json-schema-ref-parser": "^11.1.0",
63+
"@apidevtools/json-schema-ref-parser": "^10.1.0",
6464
"camelcase": "^6.3.0",
6565
"commander": "^11.1.0",
6666
"fs-extra": "^11.2.0",
@@ -78,9 +78,9 @@
7878
"@angular/platform-browser": "17.0.8",
7979
"@angular/platform-browser-dynamic": "17.0.8",
8080
"@angular/router": "17.0.8",
81-
"@babel/cli": "7.23.4",
82-
"@babel/core": "7.23.7",
83-
"@babel/preset-env": "7.23.8",
81+
"@babel/cli": "7.23.9",
82+
"@babel/core": "7.23.9",
83+
"@babel/preset-env": "7.23.9",
8484
"@babel/preset-typescript": "7.23.3",
8585
"@rollup/plugin-commonjs": "25.0.7",
8686
"@rollup/plugin-node-resolve": "15.2.3",
@@ -91,13 +91,13 @@
9191
"@types/fs-extra": "^11.0.4",
9292
"@types/glob": "8.1.0",
9393
"@types/jest": "29.5.11",
94-
"@types/node": "20.10.8",
94+
"@types/node": "20.11.7",
9595
"@types/node-fetch": "2.6.10",
9696
"@types/qs": "6.9.11",
97-
"@typescript-eslint/eslint-plugin": "6.18.1",
98-
"@typescript-eslint/parser": "6.18.1",
97+
"@typescript-eslint/eslint-plugin": "6.19.1",
98+
"@typescript-eslint/parser": "6.19.1",
9999
"abort-controller": "3.0.0",
100-
"axios": "1.6.5",
100+
"axios": "1.6.7",
101101
"codecov": "3.8.3",
102102
"cross-spawn": "7.0.3",
103103
"eslint": "8.56.0",
@@ -110,8 +110,8 @@
110110
"jest": "29.7.0",
111111
"jest-cli": "29.7.0",
112112
"node-fetch": "2.7.0",
113-
"prettier": "3.1.1",
114-
"puppeteer": "21.7.0",
113+
"prettier": "3.2.4",
114+
"puppeteer": "21.9.0",
115115
"qs": "6.11.2",
116116
"rimraf": "5.0.5",
117117
"rollup": "4.7.0",

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
@@ -7118,6 +7138,16 @@ export class NoContentService {
71187138
url: '/api/v{api-version}/no-content',
71197139
});
71207140
}
7141+
/**
7142+
* @returns number Response is a simple number
7143+
* @throws ApiError
7144+
*/
7145+
public static callWithResponseAndNoContentResponse(): CancelablePromise<number> {
7146+
return __request(OpenAPI, {
7147+
method: 'GET',
7148+
url: '/api/v{api-version}/multiple-tags/response-and-no-content',
7149+
});
7150+
}
71217151
}
71227152
"
71237153
`;
@@ -7307,6 +7337,16 @@ import type { CancelablePromise } from '../core/CancelablePromise';
73077337
import { OpenAPI } from '../core/OpenAPI';
73087338
import { request as __request } from '../core/request';
73097339
export class ResponseService {
7340+
/**
7341+
* @returns number Response is a simple number
7342+
* @throws ApiError
7343+
*/
7344+
public static callWithResponseAndNoContentResponse(): CancelablePromise<number> {
7345+
return __request(OpenAPI, {
7346+
method: 'GET',
7347+
url: '/api/v{api-version}/multiple-tags/response-and-no-content',
7348+
});
7349+
}
73107350
/**
73117351
* @returns ModelWithString
73127352
* @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)