UNPKG

my-uniapp-tools

Version:

一个简洁稳定的 uni-app 开发工具库,提供剪贴板、本地存储、导航、系统信息等常用功能

2 lines (1 loc) 4.63 kB
"use strict";var e=require("./constants.cjs"),t=require("./utils.cjs"),s=require("../utils.cjs"),o=require("../ui.cjs");function n(t){return{toast:"function"==typeof t.toast?t.toast:o.useToast,shouldShowToast:void 0===t.showToast?e.DEFAULTS.SHOW_TOAST:Boolean(t.showToast)}}function r(e){return Boolean(e?.aborted)}function i(e){return[{file:null,success:!1,message:e}]}function a(){return i(e.MESSAGES.UPLOAD_CANCELED)}function c(e,s){s.autoRevokeObjectURL&&e.forEach(e=>{t.revokeObjectURLSafely(e.path)})}exports.processUpload=async function(o,u,f){const l=function(s){const o=s&&"object"==typeof s?s:{},n="image"===o.type||"file"===o.type||"any"===o.type?o.type:e.DEFAULTS.FILE_TYPE,r="number"==typeof o.count&&Number.isFinite(o.count)&&o.count>0?Math.floor(o.count):e.DEFAULTS.COUNT,i="number"==typeof o.timeoutMs&&Number.isFinite(o.timeoutMs)&&o.timeoutMs>0?o.timeoutMs:void 0,a=Array.isArray(o.files)?o.files.filter(e=>Boolean(e)&&"object"==typeof e&&"string"==typeof e.path):void 0;return{...o,url:"string"==typeof o.url?o.url:"",files:a,type:n,count:r,extensions:t.normalizeExtensions(o.extensions),fieldName:"string"==typeof o.fieldName&&o.fieldName.trim()?o.fieldName:e.DEFAULTS.FIELD_NAME,formData:t.normalizeFormData(o.formData),headers:t.normalizeHeaders(o.headers),timeoutMs:i,autoRevokeObjectURL:Boolean(o.autoRevokeObjectURL),signal:(c=o.signal,Boolean(c&&"object"==typeof c&&"function"==typeof c.addEventListener)?o.signal:void 0),beforeUpload:"function"==typeof o.beforeUpload?o.beforeUpload:void 0,onProgress:"function"==typeof o.onProgress?o.onProgress:void 0,toast:"function"==typeof o.toast?o.toast:void 0,progressToastFormatter:"function"==typeof o.progressToastFormatter?o.progressToastFormatter:void 0,successMessage:"string"==typeof o.successMessage?o.successMessage:void 0,failMessage:"string"==typeof o.failMessage?o.failMessage:void 0};var c}(o),{url:E,files:S,type:g=e.DEFAULTS.FILE_TYPE,count:m=e.DEFAULTS.COUNT,maxSizeMB:y,extensions:A,signal:p,successMessage:d}=l,L=E,{toast:h,shouldShowToast:M}=n(l);if(!L.trim()){const t=e.MESSAGES.UPLOAD_URL_REQUIRED;return M&&h(t,!1,"none"),i(t)}if(r(p))return M&&h(e.MESSAGES.UPLOAD_CANCELED,!1,"none"),a();const U=Array.isArray(S);let T=Array.isArray(S)?S:[];if(0===T.length&&!U)try{const e=await u({type:g,count:m,extensions:A});if(!e.success)return M&&e.message&&h(e.message,!1,"none"),[{file:null,success:!1,message:e.message}];T=e.files}catch(t){const s=t instanceof Error?t.message:e.MESSAGES.SELECT_FAILED;return M&&h(s,!1,"none"),i(s)}if(0===T.length)return i(e.MESSAGES.NO_FILES_SELECTED);const D=t.validateSelectedFiles(T,{maxSizeMB:y,extensions:A});if(!D.success){const t=D.message||e.MESSAGES.SELECT_FAILED;return M&&h(t,!1,"none"),c(T,l),i(t)}if(r(p))return M&&h(e.MESSAGES.UPLOAD_CANCELED,!1,"none"),c(T,l),a();const F=await async function(o,i,a,u){const{concurrency:f,signal:l,beforeUpload:E,onProgress:S,showProgressToast:g,progressToastFormatter:m}=i,{toast:y,shouldShowToast:A}=n(i),p=new Array(o.length);let d=0;const L=o.length,h=t.normalizeConcurrency(f,L),M=Boolean(g&&L>0),U="undefined"!=typeof uni?uni:null,T=Boolean(M&&U&&"function"==typeof U.showLoading&&"function"==typeof U.hideLoading),D=T,F=s.throttle((t,s)=>{if(!T)return;const n=function(t){const{files:s,index:o,pct:n,finishedCount:r,totalCount:i,progressToastFormatter:a}=t;if("function"==typeof a)try{return a(s[o],n,o+1,i)}catch{}return 1===i?`${e.MESSAGES.UPLOADING} ${n}%`:`${e.MESSAGES.UPLOADING} (${r}/${i})`}({files:o,index:t,pct:s,finishedCount:d,totalCount:L,progressToastFormatter:m});U.showLoading({title:n,mask:!0})},e.PERFORMANCE.THROTTLE_MS);const C=async t=>{const s=o[t];let n=null;try{if(r(l))return n={file:s,success:!1,message:e.MESSAGES.UPLOAD_CANCELED},c([s],i),void(T&&F(t,0));const o=await async function(t){if(!E)return null;try{return await E(t)?null:{file:t,success:!1,message:e.MESSAGES.UPLOAD_CANCELED}}catch(s){const o=e.MESSAGES.BEFORE_UPLOAD_FAILED(s instanceof Error?s.message:String(s??"unknown"));return A&&y(o,!1,"error"),{file:t,success:!1,message:o}}}(s);if(o)return n=o,void c([s],i);const f=function(e){return D?{...i,onProgress:(t,s)=>{F(e,s),S&&S(t,s)}}:i}(t);n=await u(s,f,a)}catch(e){n={file:s,success:!1,message:e instanceof Error?e.message:String(e??"Unknown error")}}finally{n||(n={file:s,success:!1,message:"Unknown error"}),p[t]=n,d++,n.success&&F(t,100)}};for(let e=0;e<L;e+=h){const t=Math.min(e+h,L),s=[];for(let o=e;o<t;o+=1)s.push(C(o));await Promise.all(s)}return T&&(F.cancel?.(),U.hideLoading()),p}(T,l,L,f);return F.filter(e=>e.success).length===F.length&&1===F.length&&M&&h(d||e.MESSAGES.UPLOAD_SUCCESS,!1,"none"),F};