fork of hey-api/openapi-ts because I need some additional things
1// This file is auto-generated by @hey-api/openapi-ts
2
3import type {
4 ArrayStyle,
5 ObjectStyle,
6 SerializerOptions,
7} from './pathSerializer.gen';
8
9export type QuerySerializer = (query: Record<string, unknown>) => string;
10
11export type BodySerializer = (body: any) => any;
12
13type QuerySerializerOptionsObject = {
14 allowReserved?: boolean;
15 array?: Partial<SerializerOptions<ArrayStyle>>;
16 object?: Partial<SerializerOptions<ObjectStyle>>;
17};
18
19export type QuerySerializerOptions = QuerySerializerOptionsObject & {
20 /**
21 * Per-parameter serialization overrides. When provided, these settings
22 * override the global array/object settings for specific parameter names.
23 */
24 parameters?: Record<string, QuerySerializerOptionsObject>;
25};
26
27const serializeFormDataPair = (
28 data: FormData,
29 key: string,
30 value: unknown,
31): void => {
32 if (typeof value === 'string' || value instanceof Blob) {
33 data.append(key, value);
34 } else if (value instanceof Date) {
35 data.append(key, value.toISOString());
36 } else {
37 data.append(key, JSON.stringify(value));
38 }
39};
40
41const serializeUrlSearchParamsPair = (
42 data: URLSearchParams,
43 key: string,
44 value: unknown,
45): void => {
46 if (typeof value === 'string') {
47 data.append(key, value);
48 } else {
49 data.append(key, JSON.stringify(value));
50 }
51};
52
53export const formDataBodySerializer = {
54 bodySerializer: <T extends Record<string, any> | Array<Record<string, any>>>(
55 body: T,
56 ): FormData => {
57 const data = new FormData();
58
59 Object.entries(body).forEach(([key, value]) => {
60 if (value === undefined || value === null) {
61 return;
62 }
63 if (Array.isArray(value)) {
64 value.forEach((v) => serializeFormDataPair(data, key, v));
65 } else {
66 serializeFormDataPair(data, key, value);
67 }
68 });
69
70 return data;
71 },
72};
73
74export const jsonBodySerializer = {
75 bodySerializer: <T>(body: T): string =>
76 JSON.stringify(body, (_key, value) =>
77 typeof value === 'bigint' ? value.toString() : value,
78 ),
79};
80
81export const urlSearchParamsBodySerializer = {
82 bodySerializer: <T extends Record<string, any> | Array<Record<string, any>>>(
83 body: T,
84 ): string => {
85 const data = new URLSearchParams();
86
87 Object.entries(body).forEach(([key, value]) => {
88 if (value === undefined || value === null) {
89 return;
90 }
91 if (Array.isArray(value)) {
92 value.forEach((v) => serializeUrlSearchParamsPair(data, key, v));
93 } else {
94 serializeUrlSearchParamsPair(data, key, value);
95 }
96 });
97
98 return data.toString();
99 },
100};