{"version":3,"file":"ajax.mjs","sources":["../../../../../packages/components/upload/src/ajax.ts"],"sourcesContent":["import { hasOwn } from '@element-ultra/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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"}