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