Skip to content

Commit 995f107

Browse files
authored
Merge pull request #2519 from volesen/volesen/handle-empty-responses
fix(client): handle empty response bodies for various content types
2 parents 533e44b + 95f00fa commit 995f107

File tree

135 files changed

+3470
-922
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

135 files changed

+3470
-922
lines changed

.changeset/six-pants-float.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(client): improve empty response body handling

packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/body-response-text-plain/client/client.gen.ts

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -108,23 +108,41 @@ export const createClient = (config: Config = {}): Client => {
108108
};
109109

110110
if (response.ok) {
111+
const parseAs =
112+
(opts.parseAs === 'auto'
113+
? getParseAs(response.headers.get('Content-Type'))
114+
: opts.parseAs) ?? 'json';
115+
111116
if (
112117
response.status === 204 ||
113118
response.headers.get('Content-Length') === '0'
114119
) {
120+
let emptyData: any;
121+
switch (parseAs) {
122+
case 'arrayBuffer':
123+
case 'blob':
124+
case 'text':
125+
emptyData = await response[parseAs]();
126+
break;
127+
case 'formData':
128+
emptyData = new FormData();
129+
break;
130+
case 'stream':
131+
emptyData = response.body;
132+
break;
133+
case 'json':
134+
default:
135+
emptyData = {};
136+
break;
137+
}
115138
return opts.responseStyle === 'data'
116-
? {}
139+
? emptyData
117140
: {
118-
data: {},
141+
data: emptyData,
119142
...result,
120143
};
121144
}
122145

123-
const parseAs =
124-
(opts.parseAs === 'auto'
125-
? getParseAs(response.headers.get('Content-Type'))
126-
: opts.parseAs) ?? 'json';
127-
128146
let data: any;
129147
switch (parseAs) {
130148
case 'arrayBuffer':

packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/form-data/client/client.gen.ts

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -108,23 +108,41 @@ export const createClient = (config: Config = {}): Client => {
108108
};
109109

110110
if (response.ok) {
111+
const parseAs =
112+
(opts.parseAs === 'auto'
113+
? getParseAs(response.headers.get('Content-Type'))
114+
: opts.parseAs) ?? 'json';
115+
111116
if (
112117
response.status === 204 ||
113118
response.headers.get('Content-Length') === '0'
114119
) {
120+
let emptyData: any;
121+
switch (parseAs) {
122+
case 'arrayBuffer':
123+
case 'blob':
124+
case 'text':
125+
emptyData = await response[parseAs]();
126+
break;
127+
case 'formData':
128+
emptyData = new FormData();
129+
break;
130+
case 'stream':
131+
emptyData = response.body;
132+
break;
133+
case 'json':
134+
default:
135+
emptyData = {};
136+
break;
137+
}
115138
return opts.responseStyle === 'data'
116-
? {}
139+
? emptyData
117140
: {
118-
data: {},
141+
data: emptyData,
119142
...result,
120143
};
121144
}
122145

123-
const parseAs =
124-
(opts.parseAs === 'auto'
125-
? getParseAs(response.headers.get('Content-Type'))
126-
: opts.parseAs) ?? 'json';
127-
128146
let data: any;
129147
switch (parseAs) {
130148
case 'arrayBuffer':

packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/client/client.gen.ts

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -108,23 +108,41 @@ export const createClient = (config: Config = {}): Client => {
108108
};
109109

110110
if (response.ok) {
111+
const parseAs =
112+
(opts.parseAs === 'auto'
113+
? getParseAs(response.headers.get('Content-Type'))
114+
: opts.parseAs) ?? 'json';
115+
111116
if (
112117
response.status === 204 ||
113118
response.headers.get('Content-Length') === '0'
114119
) {
120+
let emptyData: any;
121+
switch (parseAs) {
122+
case 'arrayBuffer':
123+
case 'blob':
124+
case 'text':
125+
emptyData = await response[parseAs]();
126+
break;
127+
case 'formData':
128+
emptyData = new FormData();
129+
break;
130+
case 'stream':
131+
emptyData = response.body;
132+
break;
133+
case 'json':
134+
default:
135+
emptyData = {};
136+
break;
137+
}
115138
return opts.responseStyle === 'data'
116-
? {}
139+
? emptyData
117140
: {
118-
data: {},
141+
data: emptyData,
119142
...result,
120143
};
121144
}
122145

123-
const parseAs =
124-
(opts.parseAs === 'auto'
125-
? getParseAs(response.headers.get('Content-Type'))
126-
: opts.parseAs) ?? 'json';
127-
128146
let data: any;
129147
switch (parseAs) {
130148
case 'arrayBuffer':

packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes/client/client.gen.ts

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -108,23 +108,41 @@ export const createClient = (config: Config = {}): Client => {
108108
};
109109

110110
if (response.ok) {
111+
const parseAs =
112+
(opts.parseAs === 'auto'
113+
? getParseAs(response.headers.get('Content-Type'))
114+
: opts.parseAs) ?? 'json';
115+
111116
if (
112117
response.status === 204 ||
113118
response.headers.get('Content-Length') === '0'
114119
) {
120+
let emptyData: any;
121+
switch (parseAs) {
122+
case 'arrayBuffer':
123+
case 'blob':
124+
case 'text':
125+
emptyData = await response[parseAs]();
126+
break;
127+
case 'formData':
128+
emptyData = new FormData();
129+
break;
130+
case 'stream':
131+
emptyData = response.body;
132+
break;
133+
case 'json':
134+
default:
135+
emptyData = {};
136+
break;
137+
}
115138
return opts.responseStyle === 'data'
116-
? {}
139+
? emptyData
117140
: {
118-
data: {},
141+
data: emptyData,
119142
...result,
120143
};
121144
}
122145

123-
const parseAs =
124-
(opts.parseAs === 'auto'
125-
? getParseAs(response.headers.get('Content-Type'))
126-
: opts.parseAs) ?? 'json';
127-
128146
let data: any;
129147
switch (parseAs) {
130148
case 'arrayBuffer':

packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/default/client/client.gen.ts

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -108,23 +108,41 @@ export const createClient = (config: Config = {}): Client => {
108108
};
109109

110110
if (response.ok) {
111+
const parseAs =
112+
(opts.parseAs === 'auto'
113+
? getParseAs(response.headers.get('Content-Type'))
114+
: opts.parseAs) ?? 'json';
115+
111116
if (
112117
response.status === 204 ||
113118
response.headers.get('Content-Length') === '0'
114119
) {
120+
let emptyData: any;
121+
switch (parseAs) {
122+
case 'arrayBuffer':
123+
case 'blob':
124+
case 'text':
125+
emptyData = await response[parseAs]();
126+
break;
127+
case 'formData':
128+
emptyData = new FormData();
129+
break;
130+
case 'stream':
131+
emptyData = response.body;
132+
break;
133+
case 'json':
134+
default:
135+
emptyData = {};
136+
break;
137+
}
115138
return opts.responseStyle === 'data'
116-
? {}
139+
? emptyData
117140
: {
118-
data: {},
141+
data: emptyData,
119142
...result,
120143
};
121144
}
122145

123-
const parseAs =
124-
(opts.parseAs === 'auto'
125-
? getParseAs(response.headers.get('Content-Type'))
126-
: opts.parseAs) ?? 'json';
127-
128146
let data: any;
129147
switch (parseAs) {
130148
case 'arrayBuffer':

packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/instance/client/client.gen.ts

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -108,23 +108,41 @@ export const createClient = (config: Config = {}): Client => {
108108
};
109109

110110
if (response.ok) {
111+
const parseAs =
112+
(opts.parseAs === 'auto'
113+
? getParseAs(response.headers.get('Content-Type'))
114+
: opts.parseAs) ?? 'json';
115+
111116
if (
112117
response.status === 204 ||
113118
response.headers.get('Content-Length') === '0'
114119
) {
120+
let emptyData: any;
121+
switch (parseAs) {
122+
case 'arrayBuffer':
123+
case 'blob':
124+
case 'text':
125+
emptyData = await response[parseAs]();
126+
break;
127+
case 'formData':
128+
emptyData = new FormData();
129+
break;
130+
case 'stream':
131+
emptyData = response.body;
132+
break;
133+
case 'json':
134+
default:
135+
emptyData = {};
136+
break;
137+
}
115138
return opts.responseStyle === 'data'
116-
? {}
139+
? emptyData
117140
: {
118-
data: {},
141+
data: emptyData,
119142
...result,
120143
};
121144
}
122145

123-
const parseAs =
124-
(opts.parseAs === 'auto'
125-
? getParseAs(response.headers.get('Content-Type'))
126-
: opts.parseAs) ?? 'json';
127-
128146
let data: any;
129147
switch (parseAs) {
130148
case 'arrayBuffer':

packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/throwOnError/client/client.gen.ts

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -108,23 +108,41 @@ export const createClient = (config: Config = {}): Client => {
108108
};
109109

110110
if (response.ok) {
111+
const parseAs =
112+
(opts.parseAs === 'auto'
113+
? getParseAs(response.headers.get('Content-Type'))
114+
: opts.parseAs) ?? 'json';
115+
111116
if (
112117
response.status === 204 ||
113118
response.headers.get('Content-Length') === '0'
114119
) {
120+
let emptyData: any;
121+
switch (parseAs) {
122+
case 'arrayBuffer':
123+
case 'blob':
124+
case 'text':
125+
emptyData = await response[parseAs]();
126+
break;
127+
case 'formData':
128+
emptyData = new FormData();
129+
break;
130+
case 'stream':
131+
emptyData = response.body;
132+
break;
133+
case 'json':
134+
default:
135+
emptyData = {};
136+
break;
137+
}
115138
return opts.responseStyle === 'data'
116-
? {}
139+
? emptyData
117140
: {
118-
data: {},
141+
data: emptyData,
119142
...result,
120143
};
121144
}
122145

123-
const parseAs =
124-
(opts.parseAs === 'auto'
125-
? getParseAs(response.headers.get('Content-Type'))
126-
: opts.parseAs) ?? 'json';
127-
128146
let data: any;
129147
switch (parseAs) {
130148
case 'arrayBuffer':

packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/transformers/type-format-valibot/client/client.gen.ts

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -108,23 +108,41 @@ export const createClient = (config: Config = {}): Client => {
108108
};
109109

110110
if (response.ok) {
111+
const parseAs =
112+
(opts.parseAs === 'auto'
113+
? getParseAs(response.headers.get('Content-Type'))
114+
: opts.parseAs) ?? 'json';
115+
111116
if (
112117
response.status === 204 ||
113118
response.headers.get('Content-Length') === '0'
114119
) {
120+
let emptyData: any;
121+
switch (parseAs) {
122+
case 'arrayBuffer':
123+
case 'blob':
124+
case 'text':
125+
emptyData = await response[parseAs]();
126+
break;
127+
case 'formData':
128+
emptyData = new FormData();
129+
break;
130+
case 'stream':
131+
emptyData = response.body;
132+
break;
133+
case 'json':
134+
default:
135+
emptyData = {};
136+
break;
137+
}
115138
return opts.responseStyle === 'data'
116-
? {}
139+
? emptyData
117140
: {
118-
data: {},
141+
data: emptyData,
119142
...result,
120143
};
121144
}
122145

123-
const parseAs =
124-
(opts.parseAs === 'auto'
125-
? getParseAs(response.headers.get('Content-Type'))
126-
: opts.parseAs) ?? 'json';
127-
128146
let data: any;
129147
switch (parseAs) {
130148
case 'arrayBuffer':

0 commit comments

Comments
 (0)