{"version":3,"file":"ajax.mjs","names":[],"sources":["../../../../../../packages/components/upload/src/ajax.ts"],"sourcesContent":["import { isNil } from 'lodash-unified'\nimport { isArray, isString, throwError } from '@element-plus/utils'\n\nimport type {\n  UploadProgressEvent,\n  UploadRequestHandler,\n  UploadRequestOptions,\n} from './upload'\n\nconst SCOPE = 'ElUpload'\n\nexport class UploadAjaxError extends Error {\n  name = 'UploadAjaxError'\n  status: number\n  method: string\n  url: string\n\n  constructor(message: string, status: number, method: string, url: string) {\n    super(message)\n    this.status = status\n    this.method = method\n    this.url = url\n  }\n}\n\nfunction getError(\n  action: string,\n  option: UploadRequestOptions,\n  xhr: XMLHttpRequest\n) {\n  let msg: string\n  if (xhr.response) {\n    msg = `${xhr.response.error || xhr.response}`\n  } else if (xhr.responseText) {\n    msg = `${xhr.responseText}`\n  } else {\n    msg = `fail to ${option.method} ${action} ${xhr.status}`\n  }\n\n  return new UploadAjaxError(msg, xhr.status, option.method, action)\n}\n\nfunction getBody(xhr: XMLHttpRequest): XMLHttpRequestResponseType {\n  const text = xhr.responseText || xhr.response\n  if (!text) {\n    return text\n  }\n\n  try {\n    return JSON.parse(text)\n  } catch {\n    return text\n  }\n}\n\nexport const ajaxUpload: UploadRequestHandler = (option) => {\n  if (typeof XMLHttpRequest === 'undefined')\n    throwError(SCOPE, 'XMLHttpRequest is undefined')\n\n  const xhr = new XMLHttpRequest()\n  const action = option.action\n\n  if (xhr.upload) {\n    xhr.upload.addEventListener('progress', (evt) => {\n      const progressEvt = evt as UploadProgressEvent\n      progressEvt.percent = evt.total > 0 ? (evt.loaded / evt.total) * 100 : 0\n      option.onProgress(progressEvt)\n    })\n  }\n\n  const formData = new FormData()\n  if (option.data) {\n    for (const [key, value] of Object.entries(option.data)) {\n      if (isArray(value)) {\n        if (\n          value.length === 2 &&\n          value[0] instanceof Blob &&\n          isString(value[1])\n        ) {\n          formData.append(key, value[0], value[1])\n        } else {\n          value.forEach((item) => {\n            formData.append(key, item)\n          })\n        }\n      } else formData.append(key, value)\n    }\n  }\n  formData.append(option.filename, option.file, option.file.name)\n\n  xhr.addEventListener('error', () => {\n    option.onError(getError(action, option, xhr))\n  })\n\n  xhr.addEventListener('load', () => {\n    if (xhr.status < 200 || xhr.status >= 300) {\n      return option.onError(getError(action, option, xhr))\n    }\n    option.onSuccess(getBody(xhr))\n  })\n\n  xhr.open(option.method, action, true)\n\n  if (option.withCredentials && 'withCredentials' in xhr) {\n    xhr.withCredentials = true\n  }\n\n  const headers = option.headers || {}\n  if (headers instanceof Headers) {\n    headers.forEach((value, key) => xhr.setRequestHeader(key, value))\n  } else {\n    for (const [key, value] of Object.entries(headers)) {\n      if (isNil(value)) continue\n      xhr.setRequestHeader(key, String(value))\n    }\n  }\n\n  xhr.send(formData)\n  return xhr\n}\n"],"mappings":";;;;AASA,MAAM,QAAQ;AAEd,IAAa,kBAAb,cAAqC,MAAM;CAMzC,YAAY,SAAiB,QAAgB,QAAgB,KAAa;EACxE,MAAM,OAAO;EANR,KAAA,OAAA;EAOL,KAAK,SAAS;EACd,KAAK,SAAS;EACd,KAAK,MAAM;CACb;AACF;AAEA,SAAS,SACP,QACA,QACA,KACA;CACA,IAAI;CACJ,IAAI,IAAI,UACN,MAAM,GAAG,IAAI,SAAS,SAAS,IAAI;MAC9B,IAAI,IAAI,cACb,MAAM,GAAG,IAAI;MAEb,MAAM,WAAW,OAAO,OAAO,GAAG,OAAO,GAAG,IAAI;CAGlD,OAAO,IAAI,gBAAgB,KAAK,IAAI,QAAQ,OAAO,QAAQ,MAAM;AACnE;AAEA,SAAS,QAAQ,KAAiD;CAChE,MAAM,OAAO,IAAI,gBAAgB,IAAI;CACrC,IAAI,CAAC,MACH,OAAO;CAGT,IAAI;EACF,OAAO,KAAK,MAAM,IAAI;CACxB,QAAQ;EACN,OAAO;CACT;AACF;AAEA,MAAa,cAAoC,WAAW;CAC1D,IAAI,OAAO,mBAAmB,aAC5B,WAAW,OAAO,6BAA6B;CAEjD,MAAM,MAAM,IAAI,eAAe;CAC/B,MAAM,SAAS,OAAO;CAEtB,IAAI,IAAI,QACN,IAAI,OAAO,iBAAiB,aAAa,QAAQ;EAC/C,MAAM,cAAc;EACpB,YAAY,UAAU,IAAI,QAAQ,IAAK,IAAI,SAAS,IAAI,QAAS,MAAM;EACvE,OAAO,WAAW,WAAW;CAC/B,CAAC;CAGH,MAAM,WAAW,IAAI,SAAS;CAC9B,IAAI,OAAO,MACT,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,OAAO,IAAI,GACnD,IAAI,QAAQ,KAAK,GAAG;EAClB,IACE,MAAM,WAAW,KACjB,MAAM,cAAc,QACpB,SAAS,MAAM,EAAE,GAEjB,SAAS,OAAO,KAAK,MAAM,IAAI,MAAM,EAAE;OAEvC,MAAM,SAAS,SAAS;GACtB,SAAS,OAAO,KAAK,IAAI;EAC3B,CAAC;CAEL,OAAO,SAAS,OAAO,KAAK,KAAK;CAGrC,SAAS,OAAO,OAAO,UAAU,OAAO,MAAM,OAAO,KAAK,IAAI;CAE9D,IAAI,iBAAiB,eAAe;EAClC,OAAO,QAAQ,SAAS,QAAQ,QAAQ,GAAG,CAAC;CAC9C,CAAC;CAED,IAAI,iBAAiB,cAAc;EACjC,IAAI,IAAI,SAAS,OAAO,IAAI,UAAU,KACpC,OAAO,OAAO,QAAQ,SAAS,QAAQ,QAAQ,GAAG,CAAC;EAErD,OAAO,UAAU,QAAQ,GAAG,CAAC;CAC/B,CAAC;CAED,IAAI,KAAK,OAAO,QAAQ,QAAQ,IAAI;CAEpC,IAAI,OAAO,mBAAmB,qBAAqB,KACjD,IAAI,kBAAkB;CAGxB,MAAM,UAAU,OAAO,WAAW,CAAC;CACnC,IAAI,mBAAmB,SACrB,QAAQ,SAAS,OAAO,QAAQ,IAAI,iBAAiB,KAAK,KAAK,CAAC;MAEhE,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,OAAO,GAAG;EAClD,IAAI,MAAM,KAAK,GAAG;EAClB,IAAI,iBAAiB,KAAK,OAAO,KAAK,CAAC;CACzC;CAGF,IAAI,KAAK,QAAQ;CACjB,OAAO;AACT"}