Skip to content

Commit 47231c4

Browse files
committed
fix(client): handle empty response bodies for various content types
1 parent a3e7f6d commit 47231c4

File tree

2 files changed

+49
-13
lines changed
  • packages/openapi-ts/src/plugins/@hey-api

2 files changed

+49
-13
lines changed

packages/openapi-ts/src/plugins/@hey-api/client-fetch/bundle/client.ts

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

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

121-
const parseAs =
122-
(opts.parseAs === 'auto'
123-
? getParseAs(response.headers.get('Content-Type'))
124-
: opts.parseAs) ?? 'json';
125-
126144
let data: any;
127145
switch (parseAs) {
128146
case 'arrayBuffer':

packages/openapi-ts/src/plugins/@hey-api/client-next/bundle/client.ts

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -101,21 +101,39 @@ export const createClient = (config: Config = {}): Client => {
101101
};
102102

103103
if (response.ok) {
104+
const parseAs =
105+
(opts.parseAs === 'auto'
106+
? getParseAs(response.headers.get('Content-Type'))
107+
: opts.parseAs) ?? 'json';
108+
104109
if (
105110
response.status === 204 ||
106111
response.headers.get('Content-Length') === '0'
107112
) {
113+
let emptyData: any;
114+
switch (parseAs) {
115+
case 'arrayBuffer':
116+
case 'blob':
117+
case 'text':
118+
emptyData = await response[parseAs]();
119+
break;
120+
case 'formData':
121+
emptyData = new FormData();
122+
break;
123+
case 'stream':
124+
emptyData = response.body;
125+
break;
126+
case 'json':
127+
default:
128+
emptyData = {};
129+
break;
130+
}
108131
return {
109-
data: {},
132+
data: emptyData,
110133
...result,
111134
};
112135
}
113136

114-
const parseAs =
115-
(opts.parseAs === 'auto'
116-
? getParseAs(response.headers.get('Content-Type'))
117-
: opts.parseAs) ?? 'json';
118-
119137
let data: any;
120138
switch (parseAs) {
121139
case 'arrayBuffer':

0 commit comments

Comments
 (0)