Skip to content

Commit f11f0ae

Browse files
authored
Merge pull request #3471 from hey-api/copilot/support-strict-unknown-typing
fix: change BodySerializer from `any` to `unknown` for strict TypeScript support
2 parents d3dd270 + ad11be2 commit f11f0ae

488 files changed

Lines changed: 2041 additions & 2550 deletions

File tree

Some content is hidden

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

.changeset/weak-swans-fetch.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+
**client**: fix: change serializer types from `any` to `unknown`

examples/openapi-ts-angular-common/src/client/client/client.gen.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ export const createClient = (config: Config = {}): Client => {
6666
...options,
6767
headers: mergeHeaders(_config.headers, options.headers),
6868
httpClient: options.httpClient ?? _config.httpClient,
69-
serializedBody: undefined,
69+
serializedBody: undefined as string | undefined,
7070
};
7171

7272
if (!opts.httpClient) {
@@ -79,7 +79,7 @@ export const createClient = (config: Config = {}): Client => {
7979
}
8080

8181
if (opts.body !== undefined && opts.bodySerializer) {
82-
opts.serializedBody = opts.bodySerializer(opts.body);
82+
opts.serializedBody = opts.bodySerializer(opts.body) as string | undefined;
8383
}
8484

8585
// remove Content-Type header if body is empty to avoid sending invalid requests

examples/openapi-ts-angular-common/src/client/core/bodySerializer.gen.ts

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import type { ArrayStyle, ObjectStyle, SerializerOptions } from './pathSerialize
44

55
export type QuerySerializer = (query: Record<string, unknown>) => string;
66

7-
export type BodySerializer = (body: any) => any;
7+
export type BodySerializer = (body: unknown) => unknown;
88

99
type QuerySerializerOptionsObject = {
1010
allowReserved?: boolean;
@@ -39,12 +39,10 @@ const serializeUrlSearchParamsPair = (data: URLSearchParams, key: string, value:
3939
};
4040

4141
export const formDataBodySerializer = {
42-
bodySerializer: <T extends Record<string, any> | Array<Record<string, any>>>(
43-
body: T,
44-
): FormData => {
42+
bodySerializer: (body: unknown): FormData => {
4543
const data = new FormData();
4644

47-
Object.entries(body).forEach(([key, value]) => {
45+
Object.entries(body as Record<string, unknown>).forEach(([key, value]) => {
4846
if (value === undefined || value === null) {
4947
return;
5048
}
@@ -60,15 +58,15 @@ export const formDataBodySerializer = {
6058
};
6159

6260
export const jsonBodySerializer = {
63-
bodySerializer: <T>(body: T): string =>
61+
bodySerializer: (body: unknown): string =>
6462
JSON.stringify(body, (_key, value) => (typeof value === 'bigint' ? value.toString() : value)),
6563
};
6664

6765
export const urlSearchParamsBodySerializer = {
68-
bodySerializer: <T extends Record<string, any> | Array<Record<string, any>>>(body: T): string => {
66+
bodySerializer: (body: unknown): string => {
6967
const data = new URLSearchParams();
7068

71-
Object.entries(body).forEach(([key, value]) => {
69+
Object.entries(body as Record<string, unknown>).forEach(([key, value]) => {
7270
if (value === undefined || value === null) {
7371
return;
7472
}

examples/openapi-ts-angular/src/client/client/client.gen.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ export const createClient = (config: Config = {}): Client => {
6666
...options,
6767
headers: mergeHeaders(_config.headers, options.headers),
6868
httpClient: options.httpClient ?? _config.httpClient,
69-
serializedBody: undefined,
69+
serializedBody: undefined as string | undefined,
7070
};
7171

7272
if (!opts.httpClient) {
@@ -79,7 +79,7 @@ export const createClient = (config: Config = {}): Client => {
7979
}
8080

8181
if (opts.body !== undefined && opts.bodySerializer) {
82-
opts.serializedBody = opts.bodySerializer(opts.body);
82+
opts.serializedBody = opts.bodySerializer(opts.body) as string | undefined;
8383
}
8484

8585
// remove Content-Type header if body is empty to avoid sending invalid requests

examples/openapi-ts-angular/src/client/core/bodySerializer.gen.ts

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import type { ArrayStyle, ObjectStyle, SerializerOptions } from './pathSerialize
44

55
export type QuerySerializer = (query: Record<string, unknown>) => string;
66

7-
export type BodySerializer = (body: any) => any;
7+
export type BodySerializer = (body: unknown) => unknown;
88

99
type QuerySerializerOptionsObject = {
1010
allowReserved?: boolean;
@@ -39,12 +39,10 @@ const serializeUrlSearchParamsPair = (data: URLSearchParams, key: string, value:
3939
};
4040

4141
export const formDataBodySerializer = {
42-
bodySerializer: <T extends Record<string, any> | Array<Record<string, any>>>(
43-
body: T,
44-
): FormData => {
42+
bodySerializer: (body: unknown): FormData => {
4543
const data = new FormData();
4644

47-
Object.entries(body).forEach(([key, value]) => {
45+
Object.entries(body as Record<string, unknown>).forEach(([key, value]) => {
4846
if (value === undefined || value === null) {
4947
return;
5048
}
@@ -60,15 +58,15 @@ export const formDataBodySerializer = {
6058
};
6159

6260
export const jsonBodySerializer = {
63-
bodySerializer: <T>(body: T): string =>
61+
bodySerializer: (body: unknown): string =>
6462
JSON.stringify(body, (_key, value) => (typeof value === 'bigint' ? value.toString() : value)),
6563
};
6664

6765
export const urlSearchParamsBodySerializer = {
68-
bodySerializer: <T extends Record<string, any> | Array<Record<string, any>>>(body: T): string => {
66+
bodySerializer: (body: unknown): string => {
6967
const data = new URLSearchParams();
7068

71-
Object.entries(body).forEach(([key, value]) => {
69+
Object.entries(body as Record<string, unknown>).forEach(([key, value]) => {
7270
if (value === undefined || value === null) {
7371
return;
7472
}

examples/openapi-ts-axios/src/client/core/bodySerializer.gen.ts

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import type { ArrayStyle, ObjectStyle, SerializerOptions } from './pathSerialize
44

55
export type QuerySerializer = (query: Record<string, unknown>) => string;
66

7-
export type BodySerializer = (body: any) => any;
7+
export type BodySerializer = (body: unknown) => unknown;
88

99
type QuerySerializerOptionsObject = {
1010
allowReserved?: boolean;
@@ -39,12 +39,10 @@ const serializeUrlSearchParamsPair = (data: URLSearchParams, key: string, value:
3939
};
4040

4141
export const formDataBodySerializer = {
42-
bodySerializer: <T extends Record<string, any> | Array<Record<string, any>>>(
43-
body: T,
44-
): FormData => {
42+
bodySerializer: (body: unknown): FormData => {
4543
const data = new FormData();
4644

47-
Object.entries(body).forEach(([key, value]) => {
45+
Object.entries(body as Record<string, unknown>).forEach(([key, value]) => {
4846
if (value === undefined || value === null) {
4947
return;
5048
}
@@ -60,15 +58,15 @@ export const formDataBodySerializer = {
6058
};
6159

6260
export const jsonBodySerializer = {
63-
bodySerializer: <T>(body: T): string =>
61+
bodySerializer: (body: unknown): string =>
6462
JSON.stringify(body, (_key, value) => (typeof value === 'bigint' ? value.toString() : value)),
6563
};
6664

6765
export const urlSearchParamsBodySerializer = {
68-
bodySerializer: <T extends Record<string, any> | Array<Record<string, any>>>(body: T): string => {
66+
bodySerializer: (body: unknown): string => {
6967
const data = new URLSearchParams();
7068

71-
Object.entries(body).forEach(([key, value]) => {
69+
Object.entries(body as Record<string, unknown>).forEach(([key, value]) => {
7270
if (value === undefined || value === null) {
7371
return;
7472
}

examples/openapi-ts-fastify/src/client/client/client.gen.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +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,
40+
serializedBody: undefined as string | undefined,
4141
};
4242

4343
if (opts.security) {
@@ -52,7 +52,7 @@ export const createClient = (config: Config = {}): Client => {
5252
}
5353

5454
if (opts.body !== undefined && opts.bodySerializer) {
55-
opts.serializedBody = opts.bodySerializer(opts.body);
55+
opts.serializedBody = opts.bodySerializer(opts.body) as string | undefined;
5656
}
5757

5858
// remove Content-Type header if body is empty to avoid sending invalid requests

examples/openapi-ts-fastify/src/client/core/bodySerializer.gen.ts

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import type { ArrayStyle, ObjectStyle, SerializerOptions } from './pathSerialize
44

55
export type QuerySerializer = (query: Record<string, unknown>) => string;
66

7-
export type BodySerializer = (body: any) => any;
7+
export type BodySerializer = (body: unknown) => unknown;
88

99
type QuerySerializerOptionsObject = {
1010
allowReserved?: boolean;
@@ -39,12 +39,10 @@ const serializeUrlSearchParamsPair = (data: URLSearchParams, key: string, value:
3939
};
4040

4141
export const formDataBodySerializer = {
42-
bodySerializer: <T extends Record<string, any> | Array<Record<string, any>>>(
43-
body: T,
44-
): FormData => {
42+
bodySerializer: (body: unknown): FormData => {
4543
const data = new FormData();
4644

47-
Object.entries(body).forEach(([key, value]) => {
45+
Object.entries(body as Record<string, unknown>).forEach(([key, value]) => {
4846
if (value === undefined || value === null) {
4947
return;
5048
}
@@ -60,15 +58,15 @@ export const formDataBodySerializer = {
6058
};
6159

6260
export const jsonBodySerializer = {
63-
bodySerializer: <T>(body: T): string =>
61+
bodySerializer: (body: unknown): string =>
6462
JSON.stringify(body, (_key, value) => (typeof value === 'bigint' ? value.toString() : value)),
6563
};
6664

6765
export const urlSearchParamsBodySerializer = {
68-
bodySerializer: <T extends Record<string, any> | Array<Record<string, any>>>(body: T): string => {
66+
bodySerializer: (body: unknown): string => {
6967
const data = new URLSearchParams();
7068

71-
Object.entries(body).forEach(([key, value]) => {
69+
Object.entries(body as Record<string, unknown>).forEach(([key, value]) => {
7270
if (value === undefined || value === null) {
7371
return;
7472
}

examples/openapi-ts-fetch/src/client/client/client.gen.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +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,
40+
serializedBody: undefined as string | undefined,
4141
};
4242

4343
if (opts.security) {
@@ -52,7 +52,7 @@ export const createClient = (config: Config = {}): Client => {
5252
}
5353

5454
if (opts.body !== undefined && opts.bodySerializer) {
55-
opts.serializedBody = opts.bodySerializer(opts.body);
55+
opts.serializedBody = opts.bodySerializer(opts.body) as string | undefined;
5656
}
5757

5858
// remove Content-Type header if body is empty to avoid sending invalid requests

examples/openapi-ts-fetch/src/client/core/bodySerializer.gen.ts

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import type { ArrayStyle, ObjectStyle, SerializerOptions } from './pathSerialize
44

55
export type QuerySerializer = (query: Record<string, unknown>) => string;
66

7-
export type BodySerializer = (body: any) => any;
7+
export type BodySerializer = (body: unknown) => unknown;
88

99
type QuerySerializerOptionsObject = {
1010
allowReserved?: boolean;
@@ -39,12 +39,10 @@ const serializeUrlSearchParamsPair = (data: URLSearchParams, key: string, value:
3939
};
4040

4141
export const formDataBodySerializer = {
42-
bodySerializer: <T extends Record<string, any> | Array<Record<string, any>>>(
43-
body: T,
44-
): FormData => {
42+
bodySerializer: (body: unknown): FormData => {
4543
const data = new FormData();
4644

47-
Object.entries(body).forEach(([key, value]) => {
45+
Object.entries(body as Record<string, unknown>).forEach(([key, value]) => {
4846
if (value === undefined || value === null) {
4947
return;
5048
}
@@ -60,15 +58,15 @@ export const formDataBodySerializer = {
6058
};
6159

6260
export const jsonBodySerializer = {
63-
bodySerializer: <T>(body: T): string =>
61+
bodySerializer: (body: unknown): string =>
6462
JSON.stringify(body, (_key, value) => (typeof value === 'bigint' ? value.toString() : value)),
6563
};
6664

6765
export const urlSearchParamsBodySerializer = {
68-
bodySerializer: <T extends Record<string, any> | Array<Record<string, any>>>(body: T): string => {
66+
bodySerializer: (body: unknown): string => {
6967
const data = new URLSearchParams();
7068

71-
Object.entries(body).forEach(([key, value]) => {
69+
Object.entries(body as Record<string, unknown>).forEach(([key, value]) => {
7270
if (value === undefined || value === null) {
7371
return;
7472
}

0 commit comments

Comments
 (0)