import axios, { AxiosInterceptorOptions, AxiosRequestConfig } from 'axios'; export namespace RequestCommon { const _axios = axios.create(); const jsonConfig = { headers: { 'Content-Type': 'application/json', }, }; const formDataConfig = { headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, }; export function getJsonConfig(config?: AxiosRequestConfig): AxiosRequestConfig { return { ...jsonConfig, ...config, }; } export function getFormDataConfig(config?: AxiosRequestConfig): AxiosRequestConfig { return { ...formDataConfig, ...config, }; } export function createFormData(data: object): FormData { const formData = new FormData(); Object.entries(data).forEach(([key, value]) => { if (value || value === false) { if (Array.isArray(value)) { formData.append(key, value.join()); } else if (value.constructor === File) { formData.append(key, value); } else { formData.append(key, value.toString()); } } }); return formData; } export function setAxiosInterceptorsRequest( onFulfilled?: (value: AxiosRequestConfig) => T | Promise, onRejected?: (error: any) => any, options?: AxiosInterceptorOptions, ) { _axios.interceptors.request.use(onFulfilled, onRejected, options); } export function setAxiosInterceptorsResponse( onFulfilled?: (value: AxiosRequestConfig) => T | Promise, onRejected?: (error: any) => any, options?: AxiosInterceptorOptions, ) { _axios.interceptors.response.use(onFulfilled, onRejected, options); } export async function axiosGet(url: string, params: object = {}, config?: AxiosRequestConfig) { return (await _axios.get(url, { params, ...config })).data; } export async function axiosPost(url: string, data: object = {}, config?: AxiosRequestConfig) { return (await _axios.post(url, data, config)).data; } export async function axiosPut(url: string, data: object = {}, config?: AxiosRequestConfig) { return (await _axios.put(url, data, config)).data; } export async function axiosDelete(url: string, data: object = {}, config?: AxiosRequestConfig) { return (await _axios.delete(url, { data, ...config })).data; } export async function axiosPatch(url: string, data: object = {}, config?: AxiosRequestConfig) { return (await _axios.patch(url, data, config)).data; } export async function axiosHead(url: string, config?: AxiosRequestConfig) { return (await _axios.head(url, config)).data; } export async function axiosOptions(url: string, config?: AxiosRequestConfig) { return (await _axios.options(url, config)).data; } }