import axios from 'axios' import { wxAdatper } from './adapters/index' import addCompatibleMethods from './compatibleMethods' import { addInstanceExtendMethod, proxyAjaxCanceler, proxyAxiosInstanceAttrs } from './helpers' import { generateMethod } from './methods' import type { AjaxInstance, AjaxOption, AxiosMethods, RequestMethods } from './types' import type * as AxiosTypes from 'axios' export type { AxiosTypes } export { axios } declare const wx: any function isWxapp(): boolean { return typeof wx !== 'undefined' && typeof wx.request === 'function' } export default function initAjax( options: AjaxOption & CusOpts ): AjaxInstance { const ajax = {} as AjaxInstance ajax.$options = options // 检测wx如果没有自定义的适配器,则使用默认适配器 const adapter = ajax.$options.adapter || (isWxapp() ? wxAdatper : undefined) ajax.$options.adapter = adapter ajax.$engine = axios.create() const requestMethods: AxiosMethods[] = ['POST', 'PUT', 'PATCH', 'DELETE', 'GET', 'HEAD'] requestMethods.forEach((name: AxiosMethods) => { const queryMethods = name.toLocaleLowerCase() as RequestMethods ajax[queryMethods] = generateMethod(ajax, name) }) // 挂载请求的手动取消函数 proxyAjaxCanceler(ajax) // 把ajax实例上的'request', 'interceptors', defaults属性代理到axios实例上去 proxyAxiosInstanceAttrs(ajax, ajax.$engine) addCompatibleMethods(ajax) // 添加extend方法,用于扩展ajax实例 addInstanceExtendMethod(ajax) return ajax }