UNPKG

@fast-china/axios

Version:

Fast Axios 请求工具库.

3 lines (2 loc) 4.2 kB
import e,{AxiosError as r}from"axios";import{isString as s,isNil as o,isObject as t}from"lodash-unified";import{createUniAppAxiosAdapter as a}from"../uni-adapter/index.mjs";import{useFastAxios as n}from"./fastAxios.mjs";import{createFastAxios as i}from"./fastAxios.mjs";import"./types/options.mjs";const c={cancelDuplicateRequest:!0,loading:!1,loadingText:"加载中...",cache:!1,getMethodCacheHandle:!0,simpleDataFormat:!0,showErrorMessage:!0,showCodeMessage:!0,autoDownloadFile:!0,restfulResult:!0},l=/* @__PURE__ */new Map,p=e=>{if(l.has(e)){l.get(e)(e),l.delete(e)}},m=e=>{if("undefined"!=typeof uni);else{const r=new Blob([e.data],{type:"application/octet-stream;charset=UTF-8"}),s=e.headers["content-disposition"],o=/filename=([^;]+\.[^.;]+);*/.exec(s)[1],t=document.createElement("a"),a=window.URL.createObjectURL(r),n=/^"(.*)"$/g;t.style.display="none",t.href=a,t.download=decodeURI(o.replace(n,"$1")),document.body.appendChild(t),t.click(),document.body.removeChild(t),window.URL.revokeObjectURL(a)}},d={request:i=>{const d=n(),u={...c,...i};if(o(u.requestCipher)&&(u.requestCipher=d.requestCipher),u.cache&&"GET"===u.method.toUpperCase()&&u.restfulResult&&u.simpleDataFormat){if(u.params&&console.warn("[Fast.Axios] 如果使用 Http Cache,则不能存在任何 'params' 参数"),d.cache?.get){const e=d.cache.get(u.url);if(e)return Promise.resolve(e)}}else u.cache=!1;const f=(e=>{let{data:r}=e;const{url:o,method:t,params:a}=e;return s(r)&&(r=JSON.parse(r)),[o,t,JSON.stringify(a),JSON.stringify(r)].join("&")})(i),g=Date.now(),h=e.create({adapter:"undefined"!=typeof uni?a():void 0,baseURL:d.baseUrl,timeout:d.timeout,headers:d.headers,responseType:"json"});return h.interceptors.request.use(r=>(p(f),u.cancelDuplicateRequest&&((r,s)=>{s.cancelToken=s.cancelToken||new e.CancelToken(e=>{l.has(r)||l.set(r,e)})})(f,r),d.interceptors?.request(r),u.loading&&d.loading?.show(u.loadingText),"json"===r.responseType&&(u.requestCipher?d.crypto?.encrypt(r,g):u.getMethodCacheHandle&&"GET"===r.method.toUpperCase()&&(r.params=r.params||{},r.params._=g)),r),e=>(console.error("[Fast.Axios]",e),Promise.reject(e))),h.interceptors.response.use(e=>{if(p(f),u.loading&&d.loading?.close(u),d.interceptors?.response)try{const r=d.interceptors.response(e,u);if(!o(r))return Promise.resolve(r)}catch(s){return console.error("[Fast.Axios]",s),Promise.reject(s)}if("blob"===e.config.responseType||"DOWNLOAD"===u.method.toUpperCase())return 200===e.status?(u.autoDownloadFile&&m(e),Promise.resolve(e)):(d.message?.error(d.errorCode.fileDownloadError),Promise.reject(e));if("json"===e.config.responseType){let s=e.data;if(u.restfulResult){const o=s,a=o?.code??e.status;if(a<200||a>299||!1===o?.success)return u.showCodeMessage&&o?.message&&(t(o?.message)?d.message?.error(JSON.stringify(o?.message)):d.message?.error(o?.message)),console.error("[Fast.Axios]",new r(o?.message??"服务器内部错误!")),Promise.reject(new r(o?.message??"服务器内部错误!"))}return u.requestCipher&&(s=d.crypto?.decrypt(e,u)),u.cache&&u.restfulResult&&u.simpleDataFormat&&d.cache?.set(u.url,s?.data),u.simpleDataFormat?Promise.resolve(s?.data):Promise.resolve(s)}return u.simpleDataFormat?Promise.resolve(e.data):Promise.resolve(e)},async r=>{if(p(f),u.loading&&d.loading?.close(u),e.isCancel(r))return console.warn(`[Fast.Axios] ${d.errorCode.cancelDuplicate}`),Promise.reject();if(!1===globalThis?.navigator?.onLine)return d.message?.error(d.errorCode.offLine),Promise.reject();if(d.interceptors?.responseError)try{const e=d.interceptors.responseError(r,u);if(!o(e))return Promise.reject(e)}catch(s){return console.error("[Fast.Axios]",s),Promise.reject(s)}if(u.showErrorMessage){const e=await(async e=>{let r="";const s=e?.response?.data?.code||e?.response?.status||e?.code||e?.message||"default";if("blob"===e?.request?.responseType)try{r=JSON.parse(await(e?.response?.data?.text()))?.message}catch{r=e?.response?.data?.message||n().errorCode[s]}else r=e?.response?.data?.message||n().errorCode[s];return r})(r);d.message?.error(e)}return console.error("[Fast.Axios]",r),Promise.reject(r)}),h(u)},downloadFile:m};export{d as axiosUtil,i as createFastAxios,n as useFastAxios}; //# sourceMappingURL=index.mjs.map