{"version":3,"file":"xhr.mjs","sources":["../../../../src/_common/js/upload/xhr.ts"],"sourcesContent":["import { isFunction } from 'lodash-es';\n/* eslint-disable no-param-reassign */\nimport log from '../log/log';\nimport { UploadFile, XhrOptions } from './types';\nimport { getCurrentDate } from './utils';\n\nexport default function xhr({\n  method = 'POST',\n  action,\n  withCredentials = false,\n  headers = {},\n  data = {},\n  file,\n  files = [],\n  name = 'file',\n  useMockProgress = true,\n  mockProgressDuration = 300,\n  formatRequest,\n  onError,\n  onProgress,\n  onSuccess,\n}: XhrOptions) {\n  // support files\n  const innerFiles: UploadFile[] = files || [];\n  let percent = 0;\n\n  // eslint-disable-next-line no-shadow\n  const xhr = new XMLHttpRequest();\n  if (withCredentials) {\n    xhr.withCredentials = true;\n  }\n\n  let timer1: NodeJS.Timeout;\n  let timer2: NodeJS.Timeout;\n  if (useMockProgress && files[0]?.status === 'progress') {\n    // 超过 500 毫秒再开启虚拟进度\n    const timer2 = setTimeout(() => {\n      // 只有真实进度一直不存在时才需要模拟进度\n      timer1 = setInterval(() => {\n        if (percent + 10 < 100) {\n          percent = Math.max(percent + 10, percent);\n          if (files[0] && percent !== files[0].percent) {\n            files[0].percent = percent;\n            onProgress({\n              percent,\n              file: file || innerFiles[0],\n              files: innerFiles.map((file) => ({ ...file, percent })),\n              type: 'mock',\n              XMLHttpRequest: xhr,\n            });\n          }\n        } else {\n          clearInterval(timer1);\n        }\n      }, mockProgressDuration);\n      clearTimeout(timer2);\n    }, mockProgressDuration);\n  }\n\n  let requestData: { [key: string]: any } = {};\n  if (data) {\n    const extraData = isFunction(data) ? data(innerFiles) : data;\n    Object.assign(requestData, extraData);\n  }\n  innerFiles.forEach((file, index) => {\n    const fileField = innerFiles.length > 1 ? `${name}[${index}]` : name;\n    requestData[fileField] = file.raw;\n  });\n  if (innerFiles.length === 1) {\n    requestData[name] = innerFiles[0].raw;\n  } else {\n    requestData[name] = innerFiles.map((file) => file.raw);\n  }\n  requestData.length = innerFiles.length;\n\n  if (formatRequest) {\n    requestData = formatRequest(requestData);\n  }\n\n  // set send data\n  const formData = new FormData();\n  Object.keys(requestData).forEach((key) => {\n    formData.append(key, requestData[key]);\n  });\n\n  xhr.open(method, action, true);\n  // custom request headers\n  Object.keys(headers).forEach((key) => {\n    xhr.setRequestHeader(key, headers[key]);\n  });\n\n  xhr.onerror = (event: ProgressEvent) => {\n    onError({ event, file, files: innerFiles, XMLHttpRequest: xhr, });\n    clearInterval(timer1);\n    clearTimeout(timer2);\n  };\n\n  xhr.ontimeout = (event) => {\n    onError({ event, file, files: innerFiles, XMLHttpRequest: xhr, });\n  };\n\n  if (xhr.upload) {\n    xhr.upload.onprogress = (event: ProgressEvent) => {\n      let realPercent = 0;\n      if (event.total > 0) {\n        realPercent = Math.round((event.loaded / event.total) * 100);\n      }\n      percent = Math.max(realPercent, percent);\n      if (percent !== realPercent && innerFiles[0]?.percent !== percent) {\n        const progressFiles = innerFiles.map((item) => ({ ...item, percent }));\n        onProgress({\n          event,\n          percent,\n          file: file || progressFiles[0],\n          files: progressFiles,\n          type: 'real',\n          XMLHttpRequest: xhr,\n        });\n      }\n    };\n  }\n\n  // eslint-disable-next-line consistent-return\n  xhr.onload = (event: ProgressEvent) => {\n    let response: { [key: string]: any } = {};\n    response.XMLHttpRequest = xhr;\n    const isFail = xhr.status < 200 || xhr.status >= 300;\n    if (isFail) {\n      return onError({\n        event,\n        file,\n        files: innerFiles,\n        response,\n        XMLHttpRequest: xhr,\n      });\n    }\n    const text = xhr.responseText || xhr.response;\n    try {\n      response = JSON.parse(text);\n    } catch (e) {\n      response = text;\n      log.error('Upload', 'response does not a valid json');\n    }\n    clearInterval(timer1);\n    clearTimeout(timer2);\n    innerFiles.forEach((file) => {\n      file.percent = 100;\n      file.status = 'success';\n      // 如果上传请求返回结果没有上传日期，则使用电脑当前日期显示\n      file.uploadTime = response?.uploadTime || getCurrentDate();\n    });\n    if (typeof response === 'object') {\n      response.XMLHttpRequest = xhr;\n    }\n    onSuccess({\n      event,\n      file: file || innerFiles[0],\n      files: [...innerFiles],\n      XMLHttpRequest: xhr,\n      response,\n    });\n  };\n\n  xhr.send(formData);\n  // @ts-ignore\n  xhr.upload.requestParams = requestData;\n  // @ts-ignore\n  xhr.upload.requestHeaders = headers;\n\n  return xhr;\n}\n"],"names":["xhr","_ref","_files$","_ref$method","method","action","_ref$withCredentials","withCredentials","_ref$headers","headers","_ref$data","data","file","_ref$files","files","_ref$name","name","_ref$useMockProgress","useMockProgress","_ref$mockProgressDura","mockProgressDuration","formatRequest","onError","onProgress","onSuccess","innerFiles","percent","XMLHttpRequest","timer1","timer2","status","setTimeout","setInterval","Math","max","map","type","clearInterval","clearTimeout","requestData","extraData","isFunction","Object","assign","forEach","index","fileField","length","concat","raw","formData","FormData","keys","key","append","open","setRequestHeader","onerror","event","ontimeout","upload","onprogress","_innerFiles$","realPercent","total","round","loaded","progressFiles","item","onload","response","isFail","text","responseText","JSON","parse","e","log","error","_response","uploadTime","getCurrentDate","_typeof","_toConsumableArray","send","requestParams","requestHeaders"],"mappings":"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"}