{"version":3,"file":"request.cjs","sources":["../../../../../../packages/vue-components/vc-upload/src/request.ts"],"sourcesContent":["import type { UploadProgressEvent, UploadRequestError, UploadRequestOption } from './interface';\n\nfunction getError(option: UploadRequestOption, xhr: XMLHttpRequest) {\n  const msg = `cannot ${option.method} ${option.action} ${xhr.status}'`;\n  const err = new Error(msg) as UploadRequestError;\n  err.status = xhr.status;\n  err.method = option.method;\n  err.url = option.action;\n  return err;\n}\n\nfunction getBody(xhr: XMLHttpRequest) {\n  const text = xhr.responseText || xhr.response;\n  if (!text)\n    return text;\n\n  try {\n    return JSON.parse(text);\n  } catch (e) {\n    return text;\n  }\n}\n\nexport default function upload(option: UploadRequestOption) {\n  const xhr = new XMLHttpRequest();\n\n  if (option.onProgress && xhr.upload) {\n    xhr.upload.onprogress = function progress(e: UploadProgressEvent) {\n      if (e.total > 0)\n        e.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      const value = option.data[key];\n      // support key-value array data\n      if (Array.isArray(value)) {\n        value.forEach((item) => {\n          // { list: [ 11, 22 ] }\n          // formData.append('list[]', 11);\n          formData.append(`${key}[]`, item);\n        });\n        return;\n      }\n\n      formData.append(key, value as string | Blob);\n    });\n  }\n\n  if (option.file instanceof Blob)\n    formData.append(option.filename, option.file, (option.file as any).name);\n  else\n    formData.append(option.filename, option.file);\n\n  xhr.onerror = function error(e) {\n    option.onError(e);\n  };\n\n  xhr.onload = function onload() {\n    // allow success when 2xx status\n    // see https://github.com/react-component/upload/issues/34\n    if (xhr.status < 200 || xhr.status >= 300)\n      return option.onError(getError(option, xhr), getBody(xhr));\n\n    return option.onSuccess(getBody(xhr), xhr);\n  };\n\n  xhr.open(option.method, option.action, true);\n\n  // Has to be after `.open()`. See https://github.com/enyo/dropzone/issues/179\n  if (option.withCredentials && 'withCredentials' in xhr)\n    xhr.withCredentials = true;\n\n  const headers = option.headers || {};\n\n  // when set headers['X-Requested-With'] = null , can close default XHR header\n  // see https://github.com/react-component/upload/issues/33\n  if (headers['X-Requested-With'] !== null)\n    xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n\n  Object.keys(headers).forEach((h) => {\n    if (headers[h] !== null)\n      xhr.setRequestHeader(h, headers[h]);\n  });\n\n  xhr.send(formData);\n\n  return {\n    abort() {\n      xhr.abort();\n    },\n  };\n}\n"],"names":[],"mappings":"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"}