Skip to content

Commit 55a48cc

Browse files
committed
feat(client): Do not replace body with its serialized version in request options
1 parent 1f9ec97 commit 55a48cc

File tree

5 files changed

+34
-11
lines changed

5 files changed

+34
-11
lines changed

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { Client, Config, RequestOptions } from './types';
1+
import type { Client, Config, ResolvedRequestOptions } from './types';
22
import {
33
buildUrl,
44
createConfig,
@@ -28,7 +28,7 @@ export const createClient = (config: Config = {}): Client => {
2828
Request,
2929
Response,
3030
unknown,
31-
RequestOptions
31+
ResolvedRequestOptions
3232
>();
3333

3434
const request: Client['request'] = async (options) => {
@@ -37,6 +37,7 @@ export const createClient = (config: Config = {}): Client => {
3737
...options,
3838
fetch: options.fetch ?? _config.fetch ?? globalThis.fetch,
3939
headers: mergeHeaders(_config.headers, options.headers),
40+
serializedBody: undefined,
4041
};
4142

4243
if (opts.security) {
@@ -51,18 +52,19 @@ export const createClient = (config: Config = {}): Client => {
5152
}
5253

5354
if (opts.body && opts.bodySerializer) {
54-
opts.body = opts.bodySerializer(opts.body);
55+
opts.serializedBody = opts.bodySerializer(opts.body);
5556
}
5657

5758
// remove Content-Type header if body is empty to avoid sending invalid requests
58-
if (opts.body === undefined || opts.body === '') {
59+
if (opts.serializedBody === undefined || opts.serializedBody === '') {
5960
opts.headers.delete('Content-Type');
6061
}
6162

6263
const url = buildUrl(opts);
6364
const requestInit: ReqInit = {
6465
redirect: 'follow',
6566
...opts,
67+
body: opts.serializedBody,
6668
};
6769

6870
let request = new Request(url, requestInit);

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ export type {
1616
OptionsLegacyParser,
1717
RequestOptions,
1818
RequestResult,
19+
ResolvedRequestOptions,
1920
ResponseStyle,
2021
TDataShape,
2122
} from './types';

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,14 @@ export interface RequestOptions<
8181
url: Url;
8282
}
8383

84+
export interface ResolvedRequestOptions<
85+
TResponseStyle extends ResponseStyle = 'fields',
86+
ThrowOnError extends boolean = boolean,
87+
Url extends string = string,
88+
> extends RequestOptions<TResponseStyle, ThrowOnError, Url> {
89+
serializedBody?: string;
90+
}
91+
8492
export type RequestResult<
8593
TData = unknown,
8694
TError = unknown,
@@ -163,7 +171,7 @@ type BuildUrlFn = <
163171
) => string;
164172

165173
export type Client = CoreClient<RequestFn, Config, MethodFn, BuildUrlFn> & {
166-
interceptors: Middleware<Request, Response, unknown, RequestOptions>;
174+
interceptors: Middleware<Request, Response, unknown, ResolvedRequestOptions>;
167175
};
168176

169177
/**

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

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { Client, Config, RequestOptions } from './types';
1+
import type { Client, Config, ResolvedRequestOptions } from './types';
22
import {
33
buildUrl,
44
createConfig,
@@ -24,7 +24,11 @@ export const createClient = (config: Config = {}): Client => {
2424
return getConfig();
2525
};
2626

27-
const interceptors = createInterceptors<Response, unknown, RequestOptions>();
27+
const interceptors = createInterceptors<
28+
Response,
29+
unknown,
30+
ResolvedRequestOptions
31+
>();
2832

2933
// @ts-expect-error
3034
const request: Client['request'] = async (options) => {
@@ -33,6 +37,7 @@ export const createClient = (config: Config = {}): Client => {
3337
...options,
3438
fetch: options.fetch ?? _config.fetch ?? globalThis.fetch,
3539
headers: mergeHeaders(_config.headers, options.headers),
40+
serializedBody: undefined,
3641
};
3742

3843
if (opts.security) {
@@ -47,11 +52,11 @@ export const createClient = (config: Config = {}): Client => {
4752
}
4853

4954
if (opts.body && opts.bodySerializer) {
50-
opts.body = opts.bodySerializer(opts.body);
55+
opts.serializedBody = opts.bodySerializer(opts.body);
5156
}
5257

5358
// remove Content-Type header if body is empty to avoid sending invalid requests
54-
if (opts.body === undefined || opts.body === '') {
59+
if (opts.serializedBody === undefined || opts.serializedBody === '') {
5560
opts.headers.delete('Content-Type');
5661
}
5762

@@ -67,7 +72,7 @@ export const createClient = (config: Config = {}): Client => {
6772
const _fetch = opts.fetch!;
6873
let response = await _fetch(url, {
6974
...opts,
70-
body: opts.body as ReqInit['body'],
75+
body: opts.serializedBody as ReqInit['body'],
7176
});
7277

7378
for (const fn of interceptors.response._fns) {

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,13 @@ export interface RequestOptions<
6464
url: Url;
6565
}
6666

67+
export interface ResolvedRequestOptions<
68+
ThrowOnError extends boolean = boolean,
69+
Url extends string = string,
70+
> extends RequestOptions<ThrowOnError, Url> {
71+
serializedBody?: string;
72+
}
73+
6774
export type RequestResult<
6875
TData = unknown,
6976
TError = unknown,
@@ -126,7 +133,7 @@ type BuildUrlFn = <
126133
) => string;
127134

128135
export type Client = CoreClient<RequestFn, Config, MethodFn, BuildUrlFn> & {
129-
interceptors: Middleware<Response, unknown, RequestOptions>;
136+
interceptors: Middleware<Response, unknown, ResolvedRequestOptions>;
130137
};
131138

132139
/**

0 commit comments

Comments
 (0)