Files
reader-star/packages/axios/src/options.ts
2026-01-16 13:06:44 +08:00

62 lines
1.6 KiB
TypeScript

import type { CreateAxiosDefaults } from 'axios'
import type { IAxiosRetryConfig } from 'axios-retry'
import type { RequestOption } from './type'
import { stringify } from 'qs'
import { isHttpSuccess } from './shared'
export function createDefaultOptions<
ResponseData,
ApiData = ResponseData,
State extends Record<string, unknown> = Record<string, unknown>,
>(options?: Partial<RequestOption<ResponseData, ApiData, State>>) {
const opts: RequestOption<ResponseData, ApiData, State> = {
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<CreateAxiosDefaults>) {
const retryConfig: IAxiosRetryConfig = {
retries: 0,
}
Object.assign(retryConfig, config)
return retryConfig
}
export function createAxiosConfig(config?: Partial<CreateAxiosDefaults>) {
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
}