{"version":3,"file":"ajax.mjs","sources":["../../../../../../packages/components/upload/src/ajax.ts"],"sourcesContent":["import { hasOwn } from '@element-plus/utils'\nimport type {\n  ElUploadProgressEvent,\n  ElUploadRequestOptions,\n  ElUploadAjaxError,\n} from './upload.type'\n\nfunction getError(\n  action: string,\n  option: ElUploadRequestOptions,\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  const err = new Error(msg) as ElUploadAjaxError\n  err.status = xhr.status\n  err.method = option.method\n  err.url = action\n  return err\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 (e) {\n    return text\n  }\n}\n\nexport default function upload(option: ElUploadRequestOptions) {\n  if (typeof XMLHttpRequest === 'undefined') {\n    return\n  }\n\n  const xhr = new XMLHttpRequest()\n  const action = option.action\n\n  if (xhr.upload) {\n    xhr.upload.onprogress = function progress(e) {\n      if (e.total > 0) {\n        ;(e as ElUploadProgressEvent).percent = (e.loaded / e.total) * 100\n      }\n      option.onProgress(e)\n    }\n  }\n\n  const formData = new FormData()\n\n  if (option.data) {\n    Object.keys(option.data).forEach((key) => {\n      formData.append(key, option.data[key])\n    })\n  }\n\n  formData.append(option.filename, option.file, option.file.name)\n\n  xhr.onerror = function error() {\n    option.onError(getError(action, option, xhr))\n  }\n\n  xhr.onload = function onload() {\n    if (xhr.status < 200 || xhr.status >= 300) {\n      return option.onError(getError(action, option, xhr))\n    }\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\n  for (const item in headers) {\n    if (hasOwn(headers, item) && headers[item] !== null) {\n      xhr.setRequestHeader(item, headers[item])\n    }\n  }\n\n  if (headers instanceof Headers) {\n    headers.forEach((value, key) => {\n      xhr.setRequestHeader(key, value)\n    })\n  }\n\n  xhr.send(formData)\n  return xhr\n}\n"],"names":[],"mappings":"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"}