my-uniapp-tools
Version:
一个简洁稳定的 uni-app 开发工具库,提供剪贴板、本地存储、导航、系统信息等常用功能
2 lines (1 loc) • 3.29 kB
JavaScript
import{MESSAGES as e}from"./constants.js";function t(e){if(!e||"string"!=typeof e)return;const t=e.split(/[?#]/)[0].match(/\.([^./\\]+)$/);return t?t[1].toLowerCase():void 0}function n(e){if("string"!=typeof e)return"";const t=e.trim().toLowerCase().replace(/^\./,"");return"jpeg"===t||"jpe"===t?"jpg":t}function r(e){if(!Array.isArray(e))return;const t=Array.from(new Set(e.map(e=>n(e)).filter(Boolean)));return t.length>0?t:void 0}function i(e){return`${Date.now()}_${e}_${Math.random().toString(16).slice(2)}`}function o(e){return"string"==typeof e&&e.startsWith("blob:")}function u(e){if(o(e)&&"undefined"!=typeof URL&&"function"==typeof URL.revokeObjectURL)try{URL.revokeObjectURL(e)}catch{}}function s(e){if("string"!=typeof e)return e;try{return JSON.parse(e)}catch{return e}}function f(e){if(null==e)return"";const t=typeof e;if("string"===t||"number"===t||"boolean"===t)return String(e);if("object"===t)try{return JSON.stringify(e)}catch{return String(e)}return String(e)}function c(e){if(!e||"object"!=typeof e||Array.isArray(e))return;const t={},n=e;return Object.keys(n).forEach(e=>{t[e]=f(n[e])}),t}function a(e){if(!e||"object"!=typeof e||Array.isArray(e))return;const t={};return Object.keys(e).forEach(n=>{const r=e[n];null!=r&&(t[n]=String(r))}),Object.keys(t).length>0?t:void 0}function y(){if("undefined"!=typeof wx&&wx?.getSystemInfoSync)return"weixin";if("undefined"!=typeof my&&my?.getSystemInfoSync)return"alipay";if("undefined"!=typeof window&&"undefined"!=typeof document)return"h5";if("undefined"!=typeof plus)return"app";let e="unknown";return e="h5",e="weixin",e="alipay",e="app","app"}function p(e){if(e&&"number"==typeof e.statusCode)return e.statusCode;if(e&&"number"==typeof e.status)return e.status;const t="string"==typeof e?.errMsg?e.errMsg:"";return/:ok\b/i.test(t)?200:0}function l(e){const t=(e||"").trim();if(!t)return"选择文件失败";const n=t.toLowerCase();return n.includes("fail cancel")||n.includes("cancel")?"用户取消选择":/[\u4e00-\u9fff]/.test(t)?t:"选择文件失败"}function m(e,t){return null==t||"number"!=typeof t||!Number.isFinite(t)||t<0?{valid:!0}:("number"==typeof e&&Number.isFinite(e)&&e>0?e:0)>1024*t*1024?{valid:!1,message:`文件大小不能超过 ${t}MB`}:{valid:!0}}function d(t,i){if(!t||0===t.length)return{success:!1,message:e.NO_FILES_SELECTED};const{maxSizeMB:o,extensions:u}=i||{};if(0===o)return{success:!1,message:e.NO_FILES_ALLOWED};const s=null!=o&&"number"==typeof o&&Number.isFinite(o)&&o>0,f=r(u)||[],c=f.length>0;if(!s&&!c)return{success:!0};const a=c?new Set(f):null;for(const r of t){if(s&&!m(r.size,o).valid)return{success:!1,message:e.PART_FILES_TOO_LARGE(o)};if(c&&a){const t=r.ext?n(r.ext):void 0;if(!t||!a.has(t))return{success:!1,message:e.UNSUPPORTED_TYPE(f)}}}return{success:!0}}function g(e,t){return!Number.isFinite(t)||t<=0?0:"number"!=typeof e||!Number.isFinite(e)||e<=0?t:Math.min(Math.floor(e),t)}export{i as createFileId,y as detectPlatform,t as getExtension,o as isBlobUrl,g as normalizeConcurrency,n as normalizeExtension,r as normalizeExtensions,c as normalizeFormData,a as normalizeHeaders,l as normalizePickFailMessage,p as normalizeUniUploadStatusCode,u as revokeObjectURLSafely,s as safeJsonParse,f as serializeFormDataValue,m as validateFileSize,d as validateSelectedFiles};