1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-01-01 00:08:27 +01:00
unleash.unleash/frontend/src/openapi/fetcher.ts

51 lines
1.4 KiB
TypeScript
Raw Normal View History

2023-01-05 11:57:53 +01:00
import { formatApiPath } from 'utils/formatPath';
/**
* Customize HTTP client, use Fetch instead of Axios
* @see https://orval.dev/guides/custom-client
*/
export const fetcher = async <T>({
url,
method,
params,
data,
headers,
credentials = 'include',
}: {
url: string;
method: 'get' | 'post' | 'put' | 'delete' | 'patch';
params?: string | URLSearchParams | Record<string, string> | string[][];
data?: BodyType<unknown>;
headers?: HeadersInit;
credentials?: RequestCredentials;
}): Promise<T> => {
const response = await fetch(
`${formatApiPath(url)}${new URLSearchParams(params)}`,
{
method,
credentials,
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
...headers,
},
...(data ? { body: JSON.stringify(data) } : {}),
},
2023-01-05 11:57:53 +01:00
);
return response.json();
};
export default fetcher;
/**
* In some case with react-query and swr you want to be able to override the return error type so you can also do it here like this
*/
export type ErrorType<Error> = Error;
/**
* In case you want to wrap the body type (optional)
* (if the custom instance is processing data before sending it, like changing the case for example)
*/
export type BodyType<BodyData> = BodyData;