{"version":3,"file":"axios-shortcut.mjs","sources":["../src/index.ts"],"sourcesContent":["import type { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios'\n\nfunction plainObjectToFormData(plainObject: Record<string, any>): FormData | undefined {\n  if (Object.getOwnPropertyNames(plainObject).length) {\n    const formData = new FormData()\n    for (const k in plainObject) {\n      formData.append(k, plainObject[k])\n    }\n    return formData\n  }\n}\n\n// TRACE & CONNECTED are unsupported\nconst methods = ['GET', 'PUT', 'POST', 'HEAD', 'DELETE', 'OPTIONS']\nconst methodsHaveRequestBody = ['PUT', 'POST', 'PATCH']\nconst methodsHaveResponseBody = ['GET', 'POST', 'PATCH', 'OPTIONS']\n\ntype Method = (\n  url: string,\n  dataOrParams?: any,\n  config?: AxiosRequestConfig<any>,\n) => Promise<AxiosResponse<any>>\n\ninterface MethodCanUpload {\n  (url: string, dataOrParams?: any, config?: AxiosRequestConfig<any>): Promise<AxiosResponse<any>>\n  upload: (\n    url: string,\n    dataOrParams?: any,\n    config?: AxiosRequestConfig<any>,\n  ) => Promise<AxiosResponse<any>>\n}\n\ninterface MethodCanDownload {\n  (url: string, dataOrParams?: any, config?: AxiosRequestConfig<any>): Promise<AxiosResponse<any>>\n  download: (\n    url: string,\n    dataOrParams?: any,\n    config?: AxiosRequestConfig<any>,\n  ) => Promise<AxiosResponse<any>>\n}\n\nexport default (axios: AxiosInstance) => ({\n  ...Object.fromEntries(\n    Array.from(methods, (method) => {\n      const value = <Method>((url, dataOrParams, config) =>\n        axios({\n          // config 放在前面的原因: 在 config 中二次指定 method / url / data 是无效的\n          // axios.post('123', { a: 1 }, { method: 'put', url: '456', data: { a: 2 } })\n          ...config,\n          ...(methodsHaveRequestBody.includes(method.toUpperCase())\n            ? { data: dataOrParams }\n            : { params: dataOrParams }),\n          method,\n          url,\n        }))\n\n      if (methodsHaveRequestBody.includes(method)) {\n        (value as MethodCanUpload).upload = (url, dataOrParams, config) =>\n          axios({\n            ...config,\n            data: plainObjectToFormData(dataOrParams),\n            method,\n            url,\n          })\n      }\n\n      if (methodsHaveResponseBody.includes(method)) {\n        (value as MethodCanDownload).download = (url, dataOrParams, config) =>\n          axios({\n            ...config,\n            ...(methodsHaveRequestBody.includes(method.toUpperCase())\n              ? { data: dataOrParams }\n              : { params: dataOrParams }),\n            responseType: 'blob',\n            method,\n            url,\n          })\n      }\n\n      return [method, value]\n    }),\n  ),\n  DOWNLOAD: (url: string, fileName = ''): void => {\n    // 如果是浏览器支持预览的文件会优先预览，否则才会下载\n    // window.open(url + stringify(params, { addQueryPrefix: true }))\n\n    const a = document.createElement('a')\n    a.style.display = 'none'\n    a.href = url\n\n    // Content-Disposition 响应头中指定的文件名优先级更高\n    a.download = fileName\n\n    // appendChild 和 remove 操作主要是为了兼容 Firefox 浏览器\n    // 在 Firefox 浏览器下调用该方法如果不将创建的 <a> 标签添加到 body 里，点击链接不会有任何反应，无法触发下载\n    // 而在 Chrome 浏览器中则不受此影响\n    document.body.appendChild(a)\n\n    a.click()\n    URL.revokeObjectURL(a.href)\n    document.body.removeChild(a)\n  },\n})\n"],"names":["plainObjectToFormData","plainObject","formData","k","methods","methodsHaveRequestBody","methodsHaveResponseBody","index","axios","method","value","url","dataOrParams","config","fileName","a"],"mappings":"AAEA,SAASA,EAAsBC,GAAwD;AACrF,MAAI,OAAO,oBAAoBA,CAAW,EAAE,QAAQ;AAC5C,UAAAC,IAAW,IAAI;AACrB,eAAWC,KAAKF;AACd,MAAAC,EAAS,OAAOC,GAAGF,EAAYE,CAAC,CAAC;AAE5B,WAAAD;AAAA,EACT;AACF;AAGA,MAAME,IAAU,CAAC,OAAO,OAAO,QAAQ,QAAQ,UAAU,SAAS,GAC5DC,IAAyB,CAAC,OAAO,QAAQ,OAAO,GAChDC,IAA0B,CAAC,OAAO,QAAQ,SAAS,SAAS,GA0BnDC,IAAA,CAACC,OAA0B;AAAA,EACxC,GAAG,OAAO;AAAA,IACR,MAAM,KAAKJ,GAAS,CAACK,MAAW;AAC9B,YAAMC,IAAiB,CAACC,GAAKC,GAAcC,MACzCL,EAAM;AAAA;AAAA;AAAA,QAGJ,GAAGK;AAAA,QACH,GAAIR,EAAuB,SAASI,EAAO,YAAa,CAAA,IACpD,EAAE,MAAMG,EAAA,IACR,EAAE,QAAQA,EAAa;AAAA,QAC3B,QAAAH;AAAA,QACA,KAAAE;AAAA,MAAA,CACD;AAEC,aAAAN,EAAuB,SAASI,CAAM,MACvCC,EAA0B,SAAS,CAACC,GAAKC,GAAcC,MACtDL,EAAM;AAAA,QACJ,GAAGK;AAAA,QACH,MAAMb,EAAsBY,CAAY;AAAA,QACxC,QAAAH;AAAA,QACA,KAAAE;AAAA,MAAA,CACD,IAGDL,EAAwB,SAASG,CAAM,MACxCC,EAA4B,WAAW,CAACC,GAAKC,GAAcC,MAC1DL,EAAM;AAAA,QACJ,GAAGK;AAAA,QACH,GAAIR,EAAuB,SAASI,EAAO,YAAa,CAAA,IACpD,EAAE,MAAMG,EAAA,IACR,EAAE,QAAQA,EAAa;AAAA,QAC3B,cAAc;AAAA,QACd,QAAAH;AAAA,QACA,KAAAE;AAAA,MAAA,CACD,IAGE,CAACF,GAAQC,CAAK;AAAA,IAAA,CACtB;AAAA,EACH;AAAA,EACA,UAAU,CAACC,GAAaG,IAAW,OAAa;AAIxC,UAAAC,IAAI,SAAS,cAAc,GAAG;AACpC,IAAAA,EAAE,MAAM,UAAU,QAClBA,EAAE,OAAOJ,GAGTI,EAAE,WAAWD,GAKJ,SAAA,KAAK,YAAYC,CAAC,GAE3BA,EAAE,MAAM,GACJ,IAAA,gBAAgBA,EAAE,IAAI,GACjB,SAAA,KAAK,YAAYA,CAAC;AAAA,EAC7B;AACF;"}