{"version":3,"file":"request-client.mjs","sources":["../../../../../../packages/utils/http/core/request-client.ts"],"sourcesContent":["import type { AxiosInstance, AxiosResponse } from 'axios'\nimport type {\n  RequestClientConfig,\n  RequestClientOptions,\n  HttpSuccessResponse,\n} from './types'\nimport defu from 'defu'\nimport axios from 'axios'\n// import qs from 'qs'\nimport * as qs from 'qs'\nimport { isString } from '@vue/shared'\nimport { bindMethods } from '@el-plus/utils/utils'\nimport { InterceptorManager } from './modules/interceptor'\nfunction getParamsSerializer(\n  paramsSerializer: RequestClientOptions['paramsSerializer'],\n) {\n  if (isString(paramsSerializer)) {\n    switch (paramsSerializer) {\n      case 'brackets': {\n        return (params: any) =>\n          qs.stringify(params, { arrayFormat: 'brackets' })\n      }\n      case 'comma': {\n        return (params: any) => qs.stringify(params, { arrayFormat: 'comma' })\n      }\n      case 'indices': {\n        return (params: any) => qs.stringify(params, { arrayFormat: 'indices' })\n      }\n      case 'repeat': {\n        return (params: any) => qs.stringify(params, { arrayFormat: 'repeat' })\n      }\n    }\n  }\n  return paramsSerializer\n}\n\nclass RequestClient {\n  public readonly instance: AxiosInstance\n  // 拦截器\n  public addRequestInterceptor: InterceptorManager['addRequestInterceptor']\n  public addResponseInterceptor: InterceptorManager['addResponseInterceptor']\n  constructor(options: RequestClientOptions = {}) {\n    // 合并默认配置和传入的配置\n    const defaultConfig: RequestClientOptions = {\n      headers: {\n        'Content-Type': 'application/json;charset=utf-8',\n      },\n      responseReturn: 'raw',\n      // 默认超时时间10s\n      timeout: 10_000,\n    }\n    const { ...axiosConfig } = options\n    const requestConfig = defu(axiosConfig, defaultConfig)\n    // requestConfig.paramsSerializer = getParamsSerializer(\n    //   requestConfig.paramsSerializer,\n    // )\n    this.instance = axios.create(requestConfig)\n\n    bindMethods(this)\n\n    // 实例化拦截器管理器\n    const interceptorManager = new InterceptorManager(this.instance)\n    this.addRequestInterceptor =\n      interceptorManager.addRequestInterceptor.bind(interceptorManager)\n    this.addResponseInterceptor =\n      interceptorManager.addResponseInterceptor.bind(interceptorManager)\n  }\n\n  /**\n   * DELETE请求方法\n   */\n  public delete<T = any, R = HttpSuccessResponse<T>>(\n    url: string,\n    data?: any,\n    config?: RequestClientConfig,\n  ): Promise<R> {\n    return this.request<T>(url, {\n      ...config,\n      data,\n      method: 'DELETE',\n    }) as Promise<R>\n  }\n\n  /**\n   * GET请求方法\n   */\n  public get<T = any, R = HttpSuccessResponse<T>>(\n    url: string,\n    params?: any,\n    config?: RequestClientConfig,\n  ): Promise<R> {\n    return this.request<T>(url, {\n      ...config,\n      method: 'GET',\n      params,\n    }) as Promise<R>\n  }\n\n  /**\n   * 获取基础URL\n   */\n  public getBaseUrl() {\n    return this.instance.defaults.baseURL\n  }\n\n  /**\n   * POST请求方法\n   */\n  public post<T = any, R = HttpSuccessResponse<T>>(\n    url: string,\n    data?: any,\n    config?: RequestClientConfig,\n  ): Promise<R> {\n    return this.request(url, { ...config, data, method: 'POST' }) as Promise<R>\n  }\n\n  /**\n   * PUT请求方法\n   */\n  public put<T = any, R = HttpSuccessResponse<T>>(\n    url: string,\n    data?: any,\n    config?: RequestClientConfig,\n  ): Promise<R> {\n    return this.request(url, { ...config, data, method: 'PUT' }) as Promise<R>\n  }\n\n  /**\n   * 通用的请求方法\n   */\n  public async request<T, R = HttpSuccessResponse<T>>(\n    url: string,\n    config: RequestClientConfig,\n  ): Promise<R> {\n    try {\n      const response: AxiosResponse<R> = await this.instance({\n        url,\n        ...config,\n        // ...(config.paramsSerializer\n        //   ? { paramsSerializer: getParamsSerializer(config.paramsSerializer) }\n        //   : {}),\n      })\n      return response as R\n    } catch (error: any) {\n      throw error.response ? error.response.data : error\n    }\n  }\n}\nexport { RequestClient }\n"],"names":[],"mappings":";;;;;AAoCA,MAAM,aAAA,CAAc;AAAA,EAKlB,WAAA,CAAY,OAAA,GAAgC,EAAC,EAAG;AAE9C,IAAA,MAAM,aAAA,GAAsC;AAAA,MAC1C,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB;AAAA,OAClB;AAAA,MACA,cAAA,EAAgB,KAAA;AAAA;AAAA,MAEhB,OAAA,EAAS;AAAA,KACX;AACA,IAAA,MAAM,EAAE,GAAG,WAAA,EAAY,GAAI,OAAA;AAC3B,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,WAAA,EAAa,aAAa,CAAA;AAIrD,IAAA,IAAA,CAAK,QAAA,GAAW,KAAA,CAAM,MAAA,CAAO,aAAa,CAAA;AAE1C,IAAA,WAAA,CAAY,IAAI,CAAA;AAGhB,IAAA,MAAM,kBAAA,GAAqB,IAAI,kBAAA,CAAmB,IAAA,CAAK,QAAQ,CAAA;AAC/D,IAAA,IAAA,CAAK,qBAAA,GACH,kBAAA,CAAmB,qBAAA,CAAsB,IAAA,CAAK,kBAAkB,CAAA;AAClE,IAAA,IAAA,CAAK,sBAAA,GACH,kBAAA,CAAmB,sBAAA,CAAuB,IAAA,CAAK,kBAAkB,CAAA;AAAA,EACrE;AAAA;AAAA;AAAA;AAAA,EAKO,MAAA,CACL,GAAA,EACA,IAAA,EACA,MAAA,EACY;AACZ,IAAA,OAAO,IAAA,CAAK,QAAW,GAAA,EAAK;AAAA,MAC1B,GAAG,MAAA;AAAA,MACH,IAAA;AAAA,MACA,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKO,GAAA,CACL,GAAA,EACA,MAAA,EACA,MAAA,EACY;AACZ,IAAA,OAAO,IAAA,CAAK,QAAW,GAAA,EAAK;AAAA,MAC1B,GAAG,MAAA;AAAA,MACH,MAAA,EAAQ,KAAA;AAAA,MACR;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKO,UAAA,GAAa;AAClB,IAAA,OAAO,IAAA,CAAK,SAAS,QAAA,CAAS,OAAA;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA,EAKO,IAAA,CACL,GAAA,EACA,IAAA,EACA,MAAA,EACY;AACZ,IAAA,OAAO,IAAA,CAAK,QAAQ,GAAA,EAAK,EAAE,GAAG,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAQ,MAAA,EAAQ,CAAA;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA,EAKO,GAAA,CACL,GAAA,EACA,IAAA,EACA,MAAA,EACY;AACZ,IAAA,OAAO,IAAA,CAAK,QAAQ,GAAA,EAAK,EAAE,GAAG,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,CAAA;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,OAAA,CACX,GAAA,EACA,MAAA,EACY;AACZ,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAA6B,MAAM,IAAA,CAAK,QAAA,CAAS;AAAA,QACrD,GAAA;AAAA,QACA,GAAG;AAAA;AAAA;AAAA;AAAA,OAIJ,CAAA;AACD,MAAA,OAAO,QAAA;AAAA,IACT,SAAS,KAAA,EAAY;AACnB,MAAA,MAAM,KAAA,CAAM,QAAA,GAAW,KAAA,CAAM,QAAA,CAAS,IAAA,GAAO,KAAA;AAAA,IAC/C;AAAA,EACF;AACF;;;;"}