{"version":3,"file":"main.mjs","sources":["../../../../node_modules/@babel/runtime/helpers/esm/toArray.js","../../../../src/_common/js/upload/main.ts"],"sourcesContent":["import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nexport default function _toArray(arr) {\n  return arrayWithHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableRest();\n}","import { isFunction, isNumber } from 'lodash-es';\n/* eslint-disable no-param-reassign */\nimport { getCurrentDate, isOverSizeLimit } from './utils';\nimport xhr from './xhr';\nimport log from '../log/log';\nimport {\n  UploadFile,\n  SizeLimitObj,\n  FileChangeParams,\n  FileChangeReturn,\n  RequestMethodResponse,\n  HandleUploadParams,\n  SuccessContext,\n  handleSuccessParams,\n  UploadTriggerUploadText,\n  ErrorContext,\n  ResponseType,\n} from './types';\n\nexport interface BeforeUploadExtra {\n  /** 图片文件大小限制 */\n  sizeLimit?: number | SizeLimitObj;\n  /** 上传文件之前的钩子，参数为上传的文件，返回值决定是否上传 */\n  beforeUpload?: (file: UploadFile) => boolean | Promise<boolean>;\n}\n\nexport type BeforeUploadPromiseList = [Promise<SizeLimitObj>, undefined | Promise<boolean>]\n\nexport function handleBeforeUpload(\n  file: UploadFile, params: BeforeUploadExtra,\n): Promise<[SizeLimitObj, boolean]> {\n  const { sizeLimit, beforeUpload } = params;\n  // 文件大小校验\n  const sizePromise = new Promise<SizeLimitObj>((resolve) => {\n    let result: SizeLimitObj = null;\n    if (sizeLimit) {\n      const sizeLimitObj: SizeLimitObj = isNumber(sizeLimit)\n        ? { size: sizeLimit, unit: 'KB' }\n        : sizeLimit;\n      const limit = isOverSizeLimit(file.size, sizeLimitObj.size, sizeLimitObj.unit);\n      if (limit) {\n        result = sizeLimitObj;\n      }\n    }\n    resolve(result);\n  });\n\n  // 自定义校验\n  const promiseList: BeforeUploadPromiseList = [sizePromise, undefined];\n  if (isFunction(beforeUpload)) {\n    const r = beforeUpload(file);\n    const p = r instanceof Promise ? r : (new Promise<boolean>((resolve) => resolve(r)));\n    promiseList[1] = p;\n  }\n\n  // 同时进行文件大小校验和自定义校验函数\n  return new Promise((resolve) => {\n    Promise.all(promiseList).then((r) => {\n      resolve(r);\n    });\n  });\n}\n\nexport interface OnErrorParams extends ErrorContext {\n  formatResponse?: HandleUploadParams['formatResponse'];\n}\n\nexport function handleError(options: OnErrorParams) {\n  const { event, files, response, XMLHttpRequest, formatResponse } = options;\n  let res = response;\n  if (isFunction(formatResponse)) {\n    res = formatResponse(response, { file: files[0], currentFiles: files });\n  }\n  files.forEach((file) => {\n    file.status = 'fail';\n    file.response = res;\n  });\n  return { response: res, event, files, XMLHttpRequest };\n}\n\nexport function handleSuccess(params: handleSuccessParams) {\n  const { event, files, response, XMLHttpRequest } = params;\n  if (files?.length <= 0) {\n    log.error('Upload', 'Empty File in Success Callback');\n  }\n  files.forEach((file) => {\n    file.percent = 100;\n    file.status = 'success';\n    delete file.response?.error;\n  });\n  const res = response;\n  files[0].url = res.url || files[0].url;\n  return { response: res, event, files, XMLHttpRequest };\n}\n\nexport type UploadRequestReturn = {\n  status?: 'fail' | 'success';\n  /** 上传失败的文件，需等待继续上传 */\n  failedFiles?: UploadFile[];\n  data?: SuccessContext;\n  /** 批量文件上传，一个文件一个请求的场景下，响应结果的列表 */\n  list?: UploadRequestReturn[];\n}\n\nexport function handleRequestMethodResponse(res: RequestMethodResponse) {\n  if (!res) {\n    log.error('Upload', '`requestMethodResponse` is required.');\n    return false;\n  }\n  if (!res.status) {\n    log.error('Upload', '`requestMethodResponse.status` is missing, which value only can be `success` or `fail`');\n    return false;\n  }\n  if (!['success', 'fail'].includes(res.status)) {\n    log.error('Upload', '`requestMethodResponse.status` must be `success` or `fail`, examples `{ status: \\'success\\', response: { url: \\'\\' } }`');\n    return false;\n  }\n  if (res.status === 'success' && (!res.response || (!res.response.url && !res.response.files))) {\n    log.warn('Upload', '`requestMethodResponse.response.url` or `requestMethodResponse.response.files` is required if `status` is `success`');\n  }\n  return true;\n}\n\n/**\n * 一次上传请求的返回结果\n */\nexport function uploadOneRequest(params: HandleUploadParams): Promise<UploadRequestReturn> {\n  const { action, toUploadFiles, requestMethod } = params;\n  return new Promise<UploadRequestReturn>((resolve) => {\n    if (!action && !requestMethod) {\n      log.error('Upload', 'one of action and requestMethod must be exist.');\n      resolve({});\n      return;\n    }\n    if (!toUploadFiles || !toUploadFiles.length) {\n      log.warn('Upload', 'No files need to be uploaded');\n      resolve({});\n      return;\n    }\n    toUploadFiles.forEach((file) => {\n      file.status = 'progress';\n    });\n    // 自定义上传方法\n    if (requestMethod) {\n      requestMethod(params.multiple ? toUploadFiles : toUploadFiles[0]).then((res) => {\n        if (!handleRequestMethodResponse(res)) {\n          resolve({});\n          return;\n        }\n        let response = (res.response || {}) as ResponseType;\n        if (isFunction(params.formatResponse)) {\n          response = params.formatResponse(response, { file: toUploadFiles[0], currentFiles: toUploadFiles });\n        }\n        if (res.status === 'fail') {\n          response.error = res.error || response.error;\n        }\n        let resultFiles: UploadFile[] = [];\n        if (res.status === 'success' && response.files) {\n          // 一个请求上传并返回多个文件\n          resultFiles = response.files.map((file: UploadFile) => {\n            const fileInfo = toUploadFiles.find((toFile) => (\n              (file.name && toFile.name === file.name) || (file.raw && toFile.raw === file.raw)\n            ));\n            return {\n              ...fileInfo,\n              ...file,\n              status: res.status,\n              response,\n            };\n          });\n        } else {\n          // 一个请求上传并返回一个文件\n          toUploadFiles.forEach((file) => {\n            file.status = res.status;\n            file.response = response;\n            file.url = response.url;\n            file.percent = res.status === 'success' ? 100 : 0;\n            // 如果上传请求返回结果没有上传日期，则使用电脑当前日期显示\n            file.uploadTime = response?.uploadTime || getCurrentDate();\n          });\n          resultFiles = toUploadFiles;\n        }\n        const result = {\n          response,\n          file: resultFiles[0],\n          files: resultFiles,\n        };\n        if (res.status === 'success') {\n          params.onResponseSuccess?.(result);\n        } else if (res.status === 'fail') {\n          params.onResponseError?.(result);\n        }\n        resolve({\n          status: res.status,\n          data: result,\n        });\n      });\n    } else {\n      const xhrReq = xhr({\n        action: params.action,\n        files: params.toUploadFiles,\n        useMockProgress: params.useMockProgress,\n        mockProgressDuration: params.mockProgressDuration,\n        onError: (p: ErrorContext) => {\n          const r = handleError({ ...p, formatResponse: params.formatResponse });\n          params.onResponseError?.(r);\n          resolve({ status: 'fail', data: r });\n        },\n        onProgress: params.onResponseProgress,\n        onSuccess: (p: SuccessContext) => {\n          const { formatResponse } = params;\n          let res = p.response;\n          if (isFunction(formatResponse)) {\n            res = formatResponse(p.response, {\n              file: p.file,\n              currentFiles: p.files,\n            });\n          }\n          if (res.error) {\n            const r = handleError({ ...p, response: res });\n            params.onResponseError?.(r);\n            resolve({ status: 'fail', data: r });\n          } else {\n            p.file.response = res;\n            p.files[0].response = res;\n            const r = handleSuccess({ ...p, response: res });\n            params.onResponseSuccess?.(r);\n            resolve({ status: 'success', data: r });\n          }\n        },\n        formatRequest: params.formatRequest,\n        data: params.data,\n        name: params.name,\n        headers: params.headers,\n        withCredentials: params.withCredentials,\n        method: params.method,\n      });\n      params.setXhrObject?.({\n        files: params.toUploadFiles,\n        xhrReq,\n      });\n    }\n  });\n}\n\nfunction updateUploadedFiles(uploadFiles: UploadFile[], resultFiles: UploadFile[]) {\n  const existFiles = uploadFiles.filter((t) => t.url);\n  const newFiles = existFiles;\n  for (let i = 0, len = resultFiles.length; i < len; i++) {\n    const file = resultFiles[i];\n    const index = uploadFiles.findIndex((item) => (\n      (item.raw && item.raw === file.raw) || (item.name && item.name === file.name)\n    ));\n    const tmpFile = index >= 0 ? { ...uploadFiles[index], ...file } : file;\n    newFiles.push(tmpFile);\n  }\n  return newFiles;\n}\n\n/**\n * 可能单个文件上传，也可能批量文件一次性上传\n * 返回上传成功或上传失败的文件列表\n */\nexport function upload(params: HandleUploadParams):\nPromise<UploadRequestReturn> {\n  const { uploadAllFilesInOneRequest, toUploadFiles, uploadedFiles, isBatchUpload } = params;\n  // 一批文件上传，部分文件失败，重新上传失败的文件\n  const thisUploadFiles = toUploadFiles.filter((t) => (\n    !t.response || (t.response && !t.response.error)\n  ));\n  return new Promise((resolve) => {\n    // 所有文件一次性上传\n    if (uploadAllFilesInOneRequest || !params.multiple) {\n      uploadOneRequest(params).then((r) => {\n        if (r.status === 'success') {\n          r.data.files = isBatchUpload || !params.multiple\n            ? r.data.files\n            : updateUploadedFiles(uploadedFiles, r.data.files);\n        }\n        const failedFiles = r.status === 'fail' ? r.data.files : [];\n        resolve({ ...r, failedFiles });\n      });\n      return;\n    }\n    // 一个文件一个文件上传\n    const list = thisUploadFiles.map((file) => (\n      uploadOneRequest({ ...params, toUploadFiles: [file] })\n    ));\n    Promise.all(list).then((arr) => {\n      const files: UploadFile[] = [];\n      const failedFiles: UploadFile[] = [];\n      arr.forEach((one) => {\n        if (one.status === 'success') {\n          files.push(one.data.files[0]);\n        } else if (one.status === 'fail') {\n          failedFiles.push(one.data.files[0]);\n        }\n      });\n      const tFiles = params.autoUpload\n        ? uploadedFiles.concat(files)\n        : uploadedFiles;\n      const newFiles = isBatchUpload || !params.multiple ? files : tFiles;\n      resolve({\n        status: files.length ? 'success' : 'fail',\n        data: {\n          files: newFiles,\n        },\n        // 上传失败的文件，需等待继续上传\n        failedFiles,\n        list: arr,\n      });\n    });\n  });\n}\n\nexport function formatToUploadFile(\n  files: File[],\n  format: FileChangeParams['format'],\n  status: UploadFile['status'] = undefined,\n  percent = 0,\n) {\n  return files.map((fileRaw: File) => {\n    let file: UploadFile = fileRaw;\n    if (isFunction(format)) {\n      file = format(fileRaw);\n    }\n    const uploadFile: UploadFile = {\n      raw: fileRaw,\n      lastModified: fileRaw.lastModified,\n      name: fileRaw.name,\n      size: fileRaw.size,\n      type: fileRaw.type,\n      percent,\n      status,\n      ...file,\n    };\n    return uploadFile;\n  });\n}\n\nexport function validateFile(\n  params: FileChangeParams\n): Promise<FileChangeReturn> {\n  const { files, uploadValue, max, allowUploadDuplicateFile } = params;\n  return new Promise((resolve) => {\n    // 是否允许相同的文件名存在\n    let tmpFiles = files.filter((file) => {\n      const sameNameFile = uploadValue.find((t) => t.name === file.name);\n      return allowUploadDuplicateFile || !sameNameFile;\n    });\n\n    let hasSameNameFile = false;\n    if (tmpFiles.length < files.length) {\n      hasSameNameFile = true;\n    }\n    if (!tmpFiles.length) {\n      const tFiles = formatToUploadFile(files, params.format, params.autoUpload ? 'progress' : 'waiting');\n      resolve({ hasSameNameFile, file: tFiles?.[0], files: tFiles, validateResult: { type: 'FILTER_FILE_SAME_NAME' } });\n      return;\n    }\n    // 上传文件数量限制\n    let lengthOverLimit = false;\n    if (max && tmpFiles.length && !params.isBatchUpload) {\n      const tmpFilesLenToBeAdded = tmpFiles.length;\n      tmpFiles = tmpFiles.slice(0, max - uploadValue.length);\n      if (tmpFilesLenToBeAdded + uploadValue.length > max) {\n        lengthOverLimit = true;\n      }\n    }\n\n    // 格式化文件对象\n    const formattedFiles = formatToUploadFile(tmpFiles, params.format, params.autoUpload ? 'progress' : 'waiting');\n\n    // 全量文件，一波校验，整体上传 或 终止上传\n    let allFileValidatePromise;\n    if (params.beforeAllFilesUpload) {\n      const r = params.beforeAllFilesUpload?.(formattedFiles);\n      allFileValidatePromise = r instanceof Promise ? r : new Promise((resolve) => resolve(r));\n    }\n\n    // 单文件合法性校验，一个文件校验不通过其他文件可继续上传\n    const promiseList = formattedFiles.map((file: UploadFile) => new Promise((resolve) => {\n      handleBeforeUpload(\n        file,\n        { beforeUpload: params.beforeUpload, sizeLimit: params.sizeLimit },\n      ).then(([sizeResult, customResult]) => {\n        if (sizeResult) {\n          resolve({ file, validateResult: { type: 'FILE_OVER_SIZE_LIMIT', extra: sizeResult } });\n        } else if (customResult === false) {\n          resolve({ file, validateResult: { type: 'CUSTOM_BEFORE_UPLOAD' } });\n        }\n        resolve({ file });\n      });\n    }));\n    Promise.all([allFileValidatePromise].concat(promiseList)).then((results) => {\n      const [allFilesResult, ...others] = results;\n      // 如果 beforeAllFilesUpload 校验未通过\n      if (allFilesResult === false) {\n        resolve({\n          lengthOverLimit,\n          hasSameNameFile,\n          validateResult: { type: 'BEFORE_ALL_FILES_UPLOAD' },\n          files: formattedFiles,\n        });\n      } else {\n        resolve({\n          lengthOverLimit,\n          hasSameNameFile,\n          fileValidateList: others,\n          files: formattedFiles,\n        });\n      }\n    });\n  });\n}\n\nexport function getFilesAndErrors(fileValidateList: FileChangeReturn[], getError: (p: {[key: string]: any }) => string) {\n  const sizeLimitErrors: FileChangeReturn[] = [];\n  const beforeUploadErrorFiles: UploadFile[] = [];\n  const toFiles: UploadFile[] = [];\n  fileValidateList.forEach((oneFile) => {\n    if (oneFile.validateResult?.type === 'CUSTOM_BEFORE_UPLOAD') {\n      beforeUploadErrorFiles.push(oneFile.file);\n      return;\n    }\n    if (oneFile.validateResult?.type === 'FILE_OVER_SIZE_LIMIT') {\n      if (!oneFile.file.response) {\n        oneFile.file.response = {};\n      }\n      oneFile.file.response.error = oneFile.file.response.error\n      || getError(oneFile.validateResult.extra);\n      sizeLimitErrors.push(oneFile);\n      return;\n    }\n    toFiles.push(oneFile.file);\n  });\n\n  return { sizeLimitErrors, beforeUploadErrorFiles, toFiles };\n}\n\n/**\n * 获取文件上传触发元素文本 在全局配置中的字段\n */\nexport function getTriggerTextField(p: {\n  status: 'success' | 'fail' | 'progress' | 'waiting',\n  multiple: boolean,\n  autoUpload: boolean;\n  isBatchUpload: boolean;\n}): keyof UploadTriggerUploadText {\n  if (p.isBatchUpload && p.status) return 'reupload';\n  if (p.status === 'fail') return 'reupload';\n  if (p.status === 'progress') return 'uploading';\n  if (p.status === 'success' || (!p.autoUpload && p.status === 'waiting')) {\n    return p.multiple ? 'continueUpload' : 'reupload';\n  }\n  return 'fileInput';\n}\n\nexport interface GetDisplayFilesParams {\n  multiple: boolean;\n  autoUpload: boolean;\n  isBatchUpload: boolean;\n  uploadValue: UploadFile[];\n  toUploadFiles: UploadFile[];\n}\n\n/**\n * 获取文件列表显示\n */\nexport function getDisplayFiles(params: GetDisplayFilesParams) {\n  const { multiple, uploadValue, toUploadFiles, autoUpload } = params;\n  const waitingUploadFiles = autoUpload\n    ? toUploadFiles\n    : toUploadFiles.filter((file) => file.status !== 'success');\n  if (multiple && !params.isBatchUpload) {\n    if (!autoUpload) return uploadValue;\n    return (waitingUploadFiles.length ? uploadValue.concat(waitingUploadFiles) : uploadValue) || [];\n  }\n  return (waitingUploadFiles.length ? waitingUploadFiles : uploadValue) || [];\n}\n"],"names":["_toArray","arr","arrayWithHoles","iterableToArray","unsupportedIterableToArray","nonIterableRest","handleBeforeUpload","file","params","sizeLimit","beforeUpload","sizePromise","Promise","resolve","result","sizeLimitObj","isNumber","size","unit","limit","isOverSizeLimit","promiseList","isFunction","r","p","all","then","handleError","options","event","files","response","XMLHttpRequest","formatResponse","res","currentFiles","forEach","status","handleSuccess","length","log","error","_file$response","percent","url","handleRequestMethodResponse","includes","warn","uploadOneRequest","action","toUploadFiles","requestMethod","multiple","resultFiles","map","fileInfo","find","toFile","name","raw","_objectSpread","_response","uploadTime","getCurrentDate","_params$onResponseSuc","onResponseSuccess","call","_params$onResponseErr","onResponseError","data","_params$setXhrObject","xhrReq","xhr","useMockProgress","mockProgressDuration","onError","_params$onResponseErr2","onProgress","onResponseProgress","onSuccess","_params$onResponseErr3","_params$onResponseSuc2","formatRequest","headers","withCredentials","method","setXhrObject","updateUploadedFiles","uploadFiles","existFiles","filter","t","newFiles","_loop","i","index","findIndex","item","tmpFile","push","len","upload","uploadAllFilesInOneRequest","uploadedFiles","isBatchUpload","thisUploadFiles","failedFiles","list","one","tFiles","autoUpload","concat","formatToUploadFile","format","arguments","undefined","fileRaw","uploadFile","lastModified","type","validateFile","uploadValue","max","allowUploadDuplicateFile","tmpFiles","sameNameFile","hasSameNameFile","validateResult","lengthOverLimit","tmpFilesLenToBeAdded","slice","formattedFiles","allFileValidatePromise","beforeAllFilesUpload","_params$beforeAllFile","_ref","_ref2","_slicedToArray","sizeResult","customResult","extra","results","_results","allFilesResult","others","fileValidateList","getFilesAndErrors","getError","sizeLimitErrors","beforeUploadErrorFiles","toFiles","oneFile","_oneFile$validateResu","_oneFile$validateResu2","getTriggerTextField","getDisplayFiles","waitingUploadFiles"],"mappings":"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"}