import type { CreateAxiosDefaults } from 'axios'; import type { IAxiosRetryConfig } from 'axios-retry'; import { stringify } from 'qs'; import { isHttpSuccess } from './shared'; import type { RequestOption } from './type'; export function createDefaultOptions< ResponseData, ApiData = ResponseData, State extends Record = Record >(options?: Partial>) { const opts: RequestOption = { defaultState: {} as State, transform: async response => response.data as unknown as ApiData, transformBackendResponse: async response => response.data as unknown as ApiData, onRequest: async config => config, isBackendSuccess: _response => true, onBackendFail: async () => {}, onError: async () => {} }; if (options?.transform) { opts.transform = options.transform; } else { opts.transform = options?.transformBackendResponse || opts.transform; } Object.assign(opts, options); return opts; } export function createRetryOptions(config?: Partial) { const retryConfig: IAxiosRetryConfig = { retries: 0 }; Object.assign(retryConfig, config); return retryConfig; } export function createAxiosConfig(config?: Partial) { const TEN_SECONDS = 10 * 1000; const axiosConfig: CreateAxiosDefaults = { timeout: TEN_SECONDS, headers: { 'Content-Type': 'application/json' }, validateStatus: isHttpSuccess, paramsSerializer: params => { return stringify(params); } }; Object.assign(axiosConfig, config); return axiosConfig; }