fork of hey-api/openapi-ts because I need some additional things
at feat/skip-token 84 lines 2.5 kB view raw
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};