@jiayouzuo/shared-js 1.0.8 → 1.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/crypto.d.ts +21 -0
- package/lib/index.cjs +1 -1
- package/lib/index.d.ts +23 -1
- package/lib/index.esm.js +1 -1
- package/lib/index.umd.js +1 -1
- package/package.json +1 -1
package/lib/crypto.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 加密解密工具函数
|
|
3
|
+
* 基于 Web Crypto API 实现,浏览器原生支持
|
|
4
|
+
*
|
|
5
|
+
* 注意:需要在安全上下文中使用(HTTPS 或 localhost)
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* AES-GCM 解密
|
|
9
|
+
*
|
|
10
|
+
* @description 使用 AES-256-GCM 算法解密 Base64 编码的密文
|
|
11
|
+
* @param encryptedBase64 - Base64 编码的密文(格式:nonce(12字节) + ciphertext + tag)
|
|
12
|
+
* @param key - 32 字节的密钥字符串
|
|
13
|
+
* @returns 解密后的数据(自动 JSON.parse)
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```ts
|
|
17
|
+
* const data = await aesGcmDecrypt(encryptedData, 'your-32-bytes-secret-key-here!!')
|
|
18
|
+
* console.log(data) // { accessKeyId: '...', ... }
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare function aesGcmDecrypt<T = unknown>(encryptedBase64: string, key: string): Promise<T>;
|
package/lib/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";const e=new Map;let t=0;const r=new Map;let n=0;const o=new Map;let a=0;const s=new Map;let i=0;function c(r,n){const o=++t,a=performance.now();return e.set(o,requestAnimationFrame(function t(s){e.has(o)&&(s-a>=n?(e.delete(o),r()):e.set(o,requestAnimationFrame(t)))})),o}function u(t){const r=e.get(t);void 0!==r&&(cancelAnimationFrame(r),e.delete(t))}const l=new Map;let d=0;class f extends Error{constructor(e,t,r){super(e),this.name="HttpError",this.status=t,this.response=r}}function h(){const e=[];return{handlers:e,use:t=>(e.push(t),e.length-1),eject(t){e[t]&&e.splice(t,1)}}}function m(e={}){const t={baseURL:e.baseURL||"",timeout:e.timeout||15e3,headers:e.headers||{},withCredentials:e.withCredentials??!1,retry:e.retry??0},r={request:h(),response:h()};async function n(e,t){const n=function(e,t){if(!t||0===Object.keys(t).length)return e;const r=Object.keys(t).filter(e=>void 0!==t[e]&&null!==t[e]).map(e=>`${encodeURIComponent(e)}=${encodeURIComponent(t[e])}`).join("&");return e+(e.includes("?")?"&":"?")+r}(e.url,e.params),o=function(e){const t={method:e.method||"GET",headers:{"Content-Type":"application/json;charset=UTF-8",...e.headers},credentials:e.withCredentials?"include":"same-origin"};return e.data&&(e.data instanceof FormData?(t.body=e.data,delete t.headers["Content-Type"]):"object"==typeof e.data?t.body=JSON.stringify(e.data):t.body=e.data),t}(e),a=c(()=>t.abort(),e.timeout);try{const s=await fetch(n,{...o,signal:t.signal});if(u(a),!s.ok)throw new f(`请求失败 (${s.status})`,s.status,s);let i=await async function(e,t){switch(t){case"blob":return e.blob();case"text":return e.text();case"arrayBuffer":return e.arrayBuffer();default:return e.json()}}(s,e.responseType);for(const e of r.response.handlers)if(e.onFulfilled)try{i=await e.onFulfilled(i)}catch(t){if(e.onRejected)return await e.onRejected(t);throw t}return i}catch(e){if(u(a),"AbortError"===e.name)throw new f("请求超时或已取消");throw e}}function o(e){const o=new AbortController,a=(async()=>{let a=function(e){return{...e,url:t.baseURL+e.url,timeout:e.timeout||t.timeout,headers:{...t.headers,...e.headers},withCredentials:e.withCredentials??t.withCredentials}}(e);for(const e of r.request.handlers)if(e.onFulfilled)try{a=await e.onFulfilled(a)}catch(t){throw e.onRejected&&await e.onRejected(t),t}a.signal&&a.signal.addEventListener("abort",()=>o.abort());const s=t.retry||0;let i;for(let e=0;e<=s;e++)try{return await n(a,o)}catch(t){if(i=t,"请求超时或已取消"===t.message||o.signal.aborted)break;if(e===s)break}for(const e of r.response.handlers)if(e.onRejected)return await e.onRejected(i);throw i})();return a.abort=()=>o.abort(),a}return{interceptors:r,request:o,get:function(e,t,r){return o({...r,url:e,method:"GET",params:t})},post:function(e,t,r){return o({...r,url:e,method:"POST",data:t})},put:function(e,t,r){return o({...r,url:e,method:"PUT",data:t})},delete:function(e,t,r){return o({...r,url:e,method:"DELETE",params:t})},options:function(e,t){return o({...t,url:e,method:"OPTIONS"})},patch:function(e,t,r){return o({...r,url:e,method:"PATCH",data:t})},upload:function(e){const{url:r,file:n,name:a="file",data:s={},headers:i={},onProgress:c,signal:u}=e,l=new FormData;if(l.append(a,n),Object.keys(s).forEach(e=>l.append(e,s[e])),!c)return o({url:r,method:"POST",data:l,headers:i,signal:u});const d=new AbortController;u&&u.addEventListener("abort",()=>d.abort());const h=function(e,t,r,n,o){return new Promise((a,s)=>{const i=new XMLHttpRequest;i.upload.addEventListener("progress",e=>{e.lengthComputable&&n(Math.round(e.loaded/e.total*100))}),i.addEventListener("load",()=>{if(i.status>=200&&i.status<300)try{a(JSON.parse(i.responseText))}catch{a(i.responseText)}else s(new f(`上传失败 (${i.status})`,i.status))}),i.addEventListener("error",()=>s(new f("上传失败"))),o&&o.addEventListener("abort",()=>{i.abort(),s(new f("上传已取消"))}),i.open("POST",e),Object.keys(r).forEach(e=>i.setRequestHeader(e,r[e])),i.send(t)})}(t.baseURL+r,l,i,c,d.signal);return h.abort=()=>d.abort(),h}}}const p=m();"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;function g(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var w={exports:{}},y=g(w.exports=function(){var e=1e3,t=6e4,r=36e5,n="millisecond",o="second",a="minute",s="hour",i="day",c="week",u="month",l="quarter",d="year",f="date",h="Invalid Date",m=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,p=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,g={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(e){var t=["th","st","nd","rd"],r=e%100;return"["+e+(t[(r-20)%10]||t[r]||t[0])+"]"}},w=function(e,t,r){var n=String(e);return!n||n.length>=t?e:""+Array(t+1-n.length).join(r)+e},y={s:w,z:function(e){var t=-e.utcOffset(),r=Math.abs(t),n=Math.floor(r/60),o=r%60;return(t<=0?"+":"-")+w(n,2,"0")+":"+w(o,2,"0")},m:function e(t,r){if(t.date()<r.date())return-e(r,t);var n=12*(r.year()-t.year())+(r.month()-t.month()),o=t.clone().add(n,u),a=r-o<0,s=t.clone().add(n+(a?-1:1),u);return+(-(n+(r-o)/(a?o-s:s-o))||0)},a:function(e){return e<0?Math.ceil(e)||0:Math.floor(e)},p:function(e){return{M:u,y:d,w:c,d:i,D:f,h:s,m:a,s:o,ms:n,Q:l}[e]||String(e||"").toLowerCase().replace(/s$/,"")},u:function(e){return void 0===e}},x="en",b={};b[x]=g;var $="$isDayjsObject",S=function(e){return e instanceof E||!(!e||!e[$])},D=function e(t,r,n){var o;if(!t)return x;if("string"==typeof t){var a=t.toLowerCase();b[a]&&(o=a),r&&(b[a]=r,o=a);var s=t.split("-");if(!o&&s.length>1)return e(s[0])}else{var i=t.name;b[i]=t,o=i}return!n&&o&&(x=o),o||!n&&x},M=function(e,t){if(S(e))return e.clone();var r="object"==typeof t?t:{};return r.date=e,r.args=arguments,new E(r)},v=y;v.l=D,v.i=S,v.w=function(e,t){return M(e,{locale:t.$L,utc:t.$u,x:t.$x,$offset:t.$offset})};var E=function(){function g(e){this.$L=D(e.locale,null,!0),this.parse(e),this.$x=this.$x||e.x||{},this[$]=!0}var w=g.prototype;return w.parse=function(e){this.$d=function(e){var t=e.date,r=e.utc;if(null===t)return new Date(NaN);if(v.u(t))return new Date;if(t instanceof Date)return new Date(t);if("string"==typeof t&&!/Z$/i.test(t)){var n=t.match(m);if(n){var o=n[2]-1||0,a=(n[7]||"0").substring(0,3);return r?new Date(Date.UTC(n[1],o,n[3]||1,n[4]||0,n[5]||0,n[6]||0,a)):new Date(n[1],o,n[3]||1,n[4]||0,n[5]||0,n[6]||0,a)}}return new Date(t)}(e),this.init()},w.init=function(){var e=this.$d;this.$y=e.getFullYear(),this.$M=e.getMonth(),this.$D=e.getDate(),this.$W=e.getDay(),this.$H=e.getHours(),this.$m=e.getMinutes(),this.$s=e.getSeconds(),this.$ms=e.getMilliseconds()},w.$utils=function(){return v},w.isValid=function(){return!(this.$d.toString()===h)},w.isSame=function(e,t){var r=M(e);return this.startOf(t)<=r&&r<=this.endOf(t)},w.isAfter=function(e,t){return M(e)<this.startOf(t)},w.isBefore=function(e,t){return this.endOf(t)<M(e)},w.$g=function(e,t,r){return v.u(e)?this[t]:this.set(r,e)},w.unix=function(){return Math.floor(this.valueOf()/1e3)},w.valueOf=function(){return this.$d.getTime()},w.startOf=function(e,t){var r=this,n=!!v.u(t)||t,l=v.p(e),h=function(e,t){var o=v.w(r.$u?Date.UTC(r.$y,t,e):new Date(r.$y,t,e),r);return n?o:o.endOf(i)},m=function(e,t){return v.w(r.toDate()[e].apply(r.toDate("s"),(n?[0,0,0,0]:[23,59,59,999]).slice(t)),r)},p=this.$W,g=this.$M,w=this.$D,y="set"+(this.$u?"UTC":"");switch(l){case d:return n?h(1,0):h(31,11);case u:return n?h(1,g):h(0,g+1);case c:var x=this.$locale().weekStart||0,b=(p<x?p+7:p)-x;return h(n?w-b:w+(6-b),g);case i:case f:return m(y+"Hours",0);case s:return m(y+"Minutes",1);case a:return m(y+"Seconds",2);case o:return m(y+"Milliseconds",3);default:return this.clone()}},w.endOf=function(e){return this.startOf(e,!1)},w.$set=function(e,t){var r,c=v.p(e),l="set"+(this.$u?"UTC":""),h=(r={},r[i]=l+"Date",r[f]=l+"Date",r[u]=l+"Month",r[d]=l+"FullYear",r[s]=l+"Hours",r[a]=l+"Minutes",r[o]=l+"Seconds",r[n]=l+"Milliseconds",r)[c],m=c===i?this.$D+(t-this.$W):t;if(c===u||c===d){var p=this.clone().set(f,1);p.$d[h](m),p.init(),this.$d=p.set(f,Math.min(this.$D,p.daysInMonth())).$d}else h&&this.$d[h](m);return this.init(),this},w.set=function(e,t){return this.clone().$set(e,t)},w.get=function(e){return this[v.p(e)]()},w.add=function(n,l){var f,h=this;n=Number(n);var m=v.p(l),p=function(e){var t=M(h);return v.w(t.date(t.date()+Math.round(e*n)),h)};if(m===u)return this.set(u,this.$M+n);if(m===d)return this.set(d,this.$y+n);if(m===i)return p(1);if(m===c)return p(7);var g=(f={},f[a]=t,f[s]=r,f[o]=e,f)[m]||1,w=this.$d.getTime()+n*g;return v.w(w,this)},w.subtract=function(e,t){return this.add(-1*e,t)},w.format=function(e){var t=this,r=this.$locale();if(!this.isValid())return r.invalidDate||h;var n=e||"YYYY-MM-DDTHH:mm:ssZ",o=v.z(this),a=this.$H,s=this.$m,i=this.$M,c=r.weekdays,u=r.months,l=r.meridiem,d=function(e,r,o,a){return e&&(e[r]||e(t,n))||o[r].slice(0,a)},f=function(e){return v.s(a%12||12,e,"0")},m=l||function(e,t,r){var n=e<12?"AM":"PM";return r?n.toLowerCase():n};return n.replace(p,function(e,n){return n||function(e){switch(e){case"YY":return String(t.$y).slice(-2);case"YYYY":return v.s(t.$y,4,"0");case"M":return i+1;case"MM":return v.s(i+1,2,"0");case"MMM":return d(r.monthsShort,i,u,3);case"MMMM":return d(u,i);case"D":return t.$D;case"DD":return v.s(t.$D,2,"0");case"d":return String(t.$W);case"dd":return d(r.weekdaysMin,t.$W,c,2);case"ddd":return d(r.weekdaysShort,t.$W,c,3);case"dddd":return c[t.$W];case"H":return String(a);case"HH":return v.s(a,2,"0");case"h":return f(1);case"hh":return f(2);case"a":return m(a,s,!0);case"A":return m(a,s,!1);case"m":return String(s);case"mm":return v.s(s,2,"0");case"s":return String(t.$s);case"ss":return v.s(t.$s,2,"0");case"SSS":return v.s(t.$ms,3,"0");case"Z":return o}return null}(e)||o.replace(":","")})},w.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},w.diff=function(n,f,h){var m,p=this,g=v.p(f),w=M(n),y=(w.utcOffset()-this.utcOffset())*t,x=this-w,b=function(){return v.m(p,w)};switch(g){case d:m=b()/12;break;case u:m=b();break;case l:m=b()/3;break;case c:m=(x-y)/6048e5;break;case i:m=(x-y)/864e5;break;case s:m=x/r;break;case a:m=x/t;break;case o:m=x/e;break;default:m=x}return h?m:v.a(m)},w.daysInMonth=function(){return this.endOf(u).$D},w.$locale=function(){return b[this.$L]},w.locale=function(e,t){if(!e)return this.$L;var r=this.clone(),n=D(e,t,!0);return n&&(r.$L=n),r},w.clone=function(){return v.w(this.$d,this)},w.toDate=function(){return new Date(this.valueOf())},w.toJSON=function(){return this.isValid()?this.toISOString():null},w.toISOString=function(){return this.$d.toISOString()},w.toString=function(){return this.$d.toUTCString()},g}(),T=E.prototype;return M.prototype=T,[["$ms",n],["$s",o],["$m",a],["$H",s],["$W",i],["$M",u],["$y",d],["$D",f]].forEach(function(e){T[e[1]]=function(t){return this.$g(t,e[0],e[1])}}),M.extend=function(e,t){return e.$i||(e(t,E,M),e.$i=!0),M},M.locale=D,M.isDayjs=S,M.unix=function(e){return M(1e3*e)},M.en=b[x],M.Ls=b,M.p={},M}());function x(e,t={}){const{decimals:r=0,prefix:n="",suffix:o=""}=t,a="string"==typeof e?parseFloat(e):e;if(isNaN(a))return"";const s=a.toFixed(r),[i,c]=s.split("."),u=i.replace(/\B(?=(\d{3})+(?!\d))/g,",");return n+(c?`${u}.${c}`:u)+o}const b=["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"],$=["","拾","佰","仟"],S=["","万","亿","兆"];function D(e){const t="string"==typeof e?parseFloat(e):e;if(isNaN(t))return"";if(0===t)return"零元整";const r=t<0,n=Math.abs(t),[o,a=""]=n.toFixed(2).split(".");let s="";if("0"!==o){const e=o,t=e.length;let r=!1;for(let n=0;n<t;n++){const o=parseInt(e[n]),a=t-n-1,i=a%4,c=Math.floor(a/4);0===o?(r=!0,0===i&&c>0&&(s+=S[c])):(r&&(s+=b[0],r=!1),s+=b[o]+$[i],0===i&&c>0&&(s+=S[c]))}s+="元"}const i=parseInt(a[0]||"0"),c=parseInt(a[1]||"0");return 0===i&&0===c?s+="整":(i>0?s+=b[i]+"角":c>0&&(s+="零"),c>0&&(s+=b[c]+"分")),r?"负"+s:s}function M(e){const t=y(e),r=y(),n=r.diff(t,"second"),o=r.diff(t,"minute"),a=r.diff(t,"hour"),s=r.diff(t,"day");return n<60?"刚刚":o<60?`${o}分钟前`:a<24?`${a}小时前`:s<7?`${s}天前`:t.year()===r.year()?t.format("M月D日"):t.format("YYYY年M月D日")}function v(e,t="YYYY-MM-DD HH:mm:ss"){return y(e).format(t)}function E(e){return y(e).format("YYYY:MM:DD HH:mm:ss")}function T(e){return y(e).format("YYYY-MM-DD HH:mm:ss")}function O(e){return y(e).format("YYYY-MM-DD")}function I(e){return y(e).format("HH:mm:ss")}function C(e){return y(e).format("YYYY-MM")}function k(e){return y(e).format("HH:mm")}function j(e){return y(e).format("YYYY")}function P(e){return y(e).format("MM")}function R(e){return y(e).format("DD")}function Y(e){return y(e).format("HH")}function A(e){return y(e).format("mm")}function H(e){return y(e).format("ss")}function U(){return Date.now()}function _(){return y().startOf("day").valueOf()}function N(){return y().subtract(1,"day").startOf("day").valueOf()}function z(e){return y().subtract(e,"day").startOf("day").valueOf()}const L={formatNumber:x,numberToChinese:D,formatRelativeTime:M,formatDate:v,formatDateTimeColon:E,formatDateTime:T,formatDateOnly:O,formatTimeOnly:I,formatYearMonth:C,formatHourMinute:k,getYear:j,getMonth:P,getDay:R,getHour:Y,getMinute:A,getSecond:H,getTimestamp:U,getTodayStart:_,getYesterdayStart:N,getDaysAgoStart:z};function B(e){return Object.prototype.toString.call(e).slice(8,-1)}function F(e){return"String"===B(e)}function W(e){return"Number"===B(e)&&!isNaN(e)}function q(e){return"Boolean"===B(e)}function J(e){return"Array"===B(e)}function Z(e){return"Object"===B(e)}function G(e){return"Function"===B(e)}function V(e){return"Date"===B(e)}function Q(e){return"RegExp"===B(e)}function X(e){return"Symbol"===B(e)}function K(e){return"Promise"===B(e)}function ee(e){return"Null"===B(e)}function te(e){return"Undefined"===B(e)}function re(e){return ee(e)||te(e)}function ne(e){return!!re(e)||(F(e)?""===e.trim():J(e)?0===e.length:!!Z(e)&&0===Object.keys(e).length)}function oe(e){return!ne(e)}function ae(e){return/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}$/.test(e)}function se(e){return/^1[3-9]\d{9}$/.test(e)}function ie(e){return/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(e)}function ce(e){return/^(https?:\/\/)?([\da-z.-]+)\.([a-z.]{2,6})([/\w .-]*)*\/?(\?[;&a-z\d%_.~+=-]*)?(\#[-a-z\d_]*)?$/i.test(e)}function ue(e){return/^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$/.test(e)}function le(e){return/^\d+$/.test(e)}function de(e){return/^[A-Za-z]+$/.test(e)}function fe(e){return/^[\u4e00-\u9fa5]+$/.test(e)}function he(e){return/^[a-zA-Z][a-zA-Z0-9_]{3,15}$/.test(e)}function me(e){return/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{6,20}$/.test(e)}function pe(e){return/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-HJ-NP-Z][A-HJ-NP-Z0-9]{4,5}[A-HJ-NP-Z0-9挂学警港澳]$/.test(e)}function ge(e){return/^\d{16,19}$/.test(e)}function we(e){return/^\d{6}$/.test(e)}const ye={getType:B,isString:F,isNumber:W,isBoolean:q,isArray:J,isObject:Z,isFunction:G,isDate:V,isRegExp:Q,isSymbol:X,isPromise:K,isNull:ee,isUndefined:te,isNullOrUndefined:re,isEmptyValue:ne,isNotEmpty:oe,isEmail:ae,isPhone:se,isIdCard:ie,isUrl:ce,isIp:ue,isNumericString:le,isLetter:de,isChinese:fe,isUsername:he,isStrongPassword:me,isCarNumber:pe,isBankCard:ge,isPostalCode:we},xe="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",be="0123456789";function $e(e=!1){if("undefined"!=typeof crypto&&crypto.randomUUID){const t=crypto.randomUUID();return e?t.replace(/-/g,""):t}const t="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)});return e?t.replace(/-/g,""):t}function Se(e=6){return Date.now().toString()+Me(e)}function De(e=9){const t=Math.max(1,Math.min(20,e));let r=be[Math.floor(9*Math.random())+1];for(let e=1;e<t;e++)r+=be[Math.floor(10*Math.random())];return r}function Me(e=8){let t="";for(let r=0;r<e;r++)t+=xe[Math.floor(62*Math.random())];return t}function ve(e=16){const t=Math.ceil(e/2);if("undefined"!=typeof crypto&&crypto.getRandomValues){const r=new Uint8Array(t);crypto.getRandomValues(r);let n="";for(let e=0;e<r.length;e++)n+=r[e].toString(16).padStart(2,"0");return n.slice(0,e)}let r="";for(let t=0;t<e;t++)r+="0123456789abcdef"[Math.floor(16*Math.random())];return r}let Ee=-1,Te=0;function Oe(){let e=Date.now();if(e===Ee){if(Te=Te+1&4095,0===Te)for(;e<=Ee;)e=Date.now()}else Te=0;return Ee=e,e.toString()+Te.toString().padStart(6,"0")}function Ie(e=8){let t="",r=1e6*Date.now()+Math.floor(1e6*Math.random());for(;r>0;)t=xe[r%62]+t,r=Math.floor(r/62);for(;t.length<e;)t=xe[Math.floor(62*Math.random())]+t;return t}const Ce={uuid:$e,timestampId:Se,numericId:De,alphanumericId:Me,binaryId:ve,snowflakeId:Oe,shortId:Ie};function ke(e,t=null){try{return JSON.parse(e)}catch{return t}}function je(e,t=null,r){try{return JSON.stringify(e,null,r)}catch{return t}}function Pe(e){return{get(t,r=null){try{if(!e)return r;const n=e.getItem(t);return null===n?r:ke(n,r)}catch{return r}},getString(t,r=""){try{return e?e.getItem(t)??r:r}catch{return r}},set(t,r){try{if(!e)return!1;const n=je(r);return null!==n&&(e.setItem(t,n),!0)}catch{return!1}},remove(t){try{return!!e&&(e.removeItem(t),!0)}catch{return!1}},clear(){try{return!!e&&(e.clear(),!0)}catch{return!1}},has(t){try{return!!e&&null!==e.getItem(t)}catch{return!1}},keys(){try{if(!e)return[];const t=[];for(let r=0;r<e.length;r++){const n=e.key(r);null!==n&&t.push(n)}return t}catch{return[]}},size(){try{return e?e.length:0}catch{return 0}}}}const Re=Pe(function(){try{return"undefined"!=typeof window?window.localStorage:null}catch{return null}}()),Ye=Pe(function(){try{return"undefined"!=typeof window?window.sessionStorage:null}catch{return null}}());function Ae(e,t){try{return e()}catch{return t}}async function He(e,t){try{return await e()}catch{return t}}function Ue(e,t,r=void 0){try{if(null==e)return r;const n=t.replace(/\[(\d+)\]/g,".$1").split(".");let o=e;for(const e of n){if(null==o)return r;o=o[e]}return void 0===o?r:o}catch{return r}}function _e(e,t,r){try{if(null==e||"object"!=typeof e)return!1;const n=t.replace(/\[(\d+)\]/g,".$1").split(".");let o=e;for(let e=0;e<n.length-1;e++){const t=n[e],r=n[e+1],a=/^\d+$/.test(r);null==o[t]&&(o[t]=a?[]:{}),o=o[t]}return o[n[n.length-1]]=r,!0}catch{return!1}}const Ne={jsonParse:ke,jsonStringify:je,localStorage:Re,sessionStorage:Ye,execute:Ae,executeAsync:He,get:Ue,set:_e};function ze(e){const t=function(e){const t=`\n const fn = ${e.toString()};\n self.onmessage = async (e) => {\n try {\n const result = await fn(e.data);\n self.postMessage({ type: '__result__', data: result });\n } catch (error) {\n self.postMessage({ type: '__error__', error: error.message });\n }\n };\n `,r=new Blob([t],{type:"application/javascript"});return URL.createObjectURL(r)}(e),r=new Worker(t),n=new Set,o=new Set;let a=null,s=null;return r.onmessage=e=>{const{type:t,data:r,error:o}=e.data;"__result__"===t?(a?.(r),a=null,s=null):"__error__"===t?(s?.(new Error(o)),a=null,s=null):n.forEach(t=>t(e.data))},r.onerror=e=>{s?.(e),a=null,s=null,o.forEach(t=>t(e))},{run:e=>new Promise((t,n)=>{a=t,s=n,r.postMessage(e)}),postMessage(e){r.postMessage(e)},onMessage:e=>(n.add(e),()=>n.delete(e)),onError:e=>(o.add(e),()=>o.delete(e)),terminate(){r.terminate(),URL.revokeObjectURL(t),n.clear(),o.clear()}}}const Le=new TextEncoder;function Be(e,t){const r=new Set;let n=null,o=!1;if(e){const t=e.getReader();(async()=>{try{for(;!o;){const{value:e,done:n}=await t.read();if(n)break;e&&r.forEach(t=>t(e))}}catch{}})()}return{async send(e){if(!t||o)return;n||(n=t.getWriter());const r="string"==typeof e?Le.encode(e):e;await n.write(r)},onMessage:e=>(r.add(e),()=>r.delete(e)),close(){o=!0,n?.close(),r.clear()},getReadable:()=>e,getWritable:()=>t}}function Fe(){return"undefined"!=typeof WebTransport}new TextDecoder;const We=new Map;function qe(e){const t=We.get(e);t&&(t.close(),We.delete(e))}async function Je(e,t={}){const{maxWidth:r=1e3,maxHeight:n=1e3,format:o="image/webp",quality:a=.85}=t;let s=0;(e instanceof File||e instanceof Blob)&&(s=e.size);const i=await Ge(e);let{width:c,height:u}=i;if(c>r||u>n){const e=Math.min(r/c,n/u);c=Math.round(c*e),u=Math.round(u*e)}const l=document.createElement("canvas");l.width=c,l.height=u;l.getContext("2d").drawImage(i,0,0,c,u);const d=await function(e,t,r){return new Promise((n,o)=>{e.toBlob(e=>{e?n(e):o(new Error("Canvas 转换失败"))},t,r)})}(l,o,a);return{blob:d,width:c,height:u,originalSize:s,compressedSize:d.size,ratio:s>0?d.size/s:0}}async function Ze(e,t,r=.85){return Je(e,{maxWidth:t,maxHeight:t,format:"image/webp",quality:r})}async function Ge(e){return e instanceof HTMLImageElement?e:new Promise((t,r)=>{const n=new Image,o=URL.createObjectURL(e);n.onload=()=>{URL.revokeObjectURL(o),t(n)},n.onerror=()=>{URL.revokeObjectURL(o),r(new Error("图片加载失败"))},n.src=o})}exports.HttpError=f,exports.addData=function(e,t,r){return new Promise((n,o)=>{const a=We.get(e);if(!a)return void o(new Error(`Database "${e}" not initialized`));const s=a.transaction([t],"readwrite").objectStore(t).add(r);s.onsuccess=()=>n(s.result),s.onerror=()=>o(new Error(`Add data failed: ${s.error}`))})},exports.alphanumericId=Me,exports.binaryId=ve,exports.cancelIdleCallback=function(e){const t=l.get(e);void 0!==t&&(void 0!==window.cancelIdleCallback?window.cancelIdleCallback(t):clearTimeout(t),l.delete(e))},exports.cancelRafInterval=function(e){const t=r.get(e);void 0!==t&&(cancelAnimationFrame(t),r.delete(e))},exports.cancelRafTimeout=u,exports.cancelRafTimes=function(e){const t=s.get(e);t&&(t.cancelled=!0,u(t.currentRafId),s.delete(e))},exports.cancelRecursiveInterval=function(e){const t=o.get(e);void 0!==t&&(clearTimeout(t),o.delete(e))},exports.clearStore=function(e,t){return new Promise((r,n)=>{const o=We.get(e);if(!o)return void n(new Error(`Database "${e}" not initialized`));const a=o.transaction([t],"readwrite").objectStore(t).clear();a.onsuccess=()=>r(),a.onerror=()=>n(new Error(`Clear store failed: ${a.error}`))})},exports.closeAllDB=function(){We.forEach((e,t)=>{e.close()}),We.clear()},exports.closeDB=qe,exports.compressImage=Je,exports.countData=function(e,t){return new Promise((r,n)=>{const o=We.get(e);if(!o)return void n(new Error(`Database "${e}" not initialized`));const a=o.transaction([t],"readonly").objectStore(t).count();a.onsuccess=()=>r(a.result),a.onerror=()=>n(new Error(`Count data failed: ${a.error}`))})},exports.createHttpClient=m,exports.createTransport=function(e){const{url:t,allowPooling:r,congestionControl:n}=e;if(!Fe())throw new Error("当前浏览器不支持 WebTransport");let o="connecting",a=null;const s=new Set,i=new Set,c=new Set,u=new Set,l=new Set,d={};return void 0!==r&&(d.allowPooling=r),n&&(d.congestionControl=n),a=new WebTransport(t,d),a.closed.then(e=>{o="closed",u.forEach(t=>t({closeCode:e.closeCode??0,reason:e.reason??""}))}).catch(e=>{o="failed",l.forEach(t=>t(e))}),(async()=>{try{const e=a.datagrams.readable.getReader();for(;"connecting"===o||"connected"===o;){const{value:t,done:r}=await e.read();if(r)break;t&&s.forEach(e=>e(t))}}catch{}})(),(async()=>{try{const e=a.incomingBidirectionalStreams.getReader();for(;"connecting"===o||"connected"===o;){const{value:t,done:r}=await e.read();if(r)break;if(t){const e=Be(t.readable,t.writable);i.forEach(t=>t(e))}}}catch{}})(),(async()=>{try{const e=a.incomingUnidirectionalStreams.getReader();for(;"connecting"===o||"connected"===o;){const{value:t,done:r}=await e.read();if(r)break;if(t){const e=Be(t,null);c.forEach(t=>t(e))}}}catch{}})(),{async ready(){await a.ready,o="connected"},getState:()=>o,sendDatagram(e){if(!a||"connected"!==o)return;const t="string"==typeof e?Le.encode(e):e,r=a.datagrams.writable.getWriter();r.write(t),r.releaseLock()},onDatagram:e=>(s.add(e),()=>s.delete(e)),async createBidirectionalStream(){if(!a||"connected"!==o)throw new Error("连接未就绪");const e=await a.createBidirectionalStream();return Be(e.readable,e.writable)},async createUnidirectionalStream(){if(!a||"connected"!==o)throw new Error("连接未就绪");return Be(null,await a.createUnidirectionalStream())},onBidirectionalStream:e=>(i.add(e),()=>i.delete(e)),onUnidirectionalStream:e=>(c.add(e),()=>c.delete(e)),onClose:e=>(u.add(e),()=>u.delete(e)),onError:e=>(l.add(e),()=>l.delete(e)),close(e){a&&(a.close(e),o="closed",s.clear(),i.clear(),c.clear())},getTransport:()=>a}},exports.createWebSocket=function(e){const{url:t,protocols:r,autoConnect:n=!0,reconnect:o=!0,reconnectInterval:a=3e3,reconnectMaxTimes:s=5,heartbeat:i=!1,heartbeatInterval:l=3e4,heartbeatMessage:d="ping",messageQueue:f=!1,messageQueueMax:h=100}=e;let m=null,p="disconnected",g=0,w=null,y=null,x=!1;const b=[],$=new Set,S=new Set,D=new Set,M=new Set,v=new Set;function E(){i&&(T(),y=c(()=>{if("connected"===p&&m){const e="function"==typeof d?d():d;m.send(e),E()}},l))}function T(){y&&(u(y),y=null)}function O(){o&&!x&&(-1!==s&&g>=s||(g++,v.forEach(e=>e(g)),w=c(()=>{I()},a)))}function I(){if("connecting"!==p&&"connected"!==p){x=!1,p="connecting";try{m=r?new WebSocket(t,r):new WebSocket(t),m.onopen=e=>{p="connected",g=0,E(),function(){for(;b.length>0&&"connected"===p&&m;){const e=b.shift();m.send(e)}}(),$.forEach(t=>t(e))},m.onmessage=e=>{let t=e.data;try{t=JSON.parse(e.data)}catch{}S.forEach(r=>r(t,e))},m.onerror=e=>{D.forEach(t=>t(e))},m.onclose=e=>{p="disconnected",m=null,T(),M.forEach(t=>t(e)),O()}}catch(e){p="disconnected",O()}}}return n&&I(),{getState:()=>p,getSocket:()=>m,connect:I,disconnect:function(e=1e3,t="manual close"){x=!0,p="disconnecting",w&&(u(w),w=null),T(),m&&(m.close(e,t),m=null),p="disconnected"},send:function(e){const t="object"==typeof e?JSON.stringify(e):e;"connected"===p&&m?m.send(t):f&&b.length<h&&b.push(t)},onOpen:function(e){return $.add(e),()=>$.delete(e)},onMessage:function(e){return S.add(e),()=>S.delete(e)},onError:function(e){return D.add(e),()=>D.delete(e)},onClose:function(e){return M.add(e),()=>M.delete(e)},onReconnect:function(e){return v.add(e),()=>v.delete(e)},offAll:function(){$.clear(),S.clear(),D.clear(),M.clear(),v.clear()}}},exports.createWorker=ze,exports.deleteData=function(e,t,r){return new Promise((n,o)=>{const a=We.get(e);if(!a)return void o(new Error(`Database "${e}" not initialized`));const s=a.transaction([t],"readwrite").objectStore(t).delete(r);s.onsuccess=()=>n(),s.onerror=()=>o(new Error(`Delete data failed: ${s.error}`))})},exports.deleteDataByIndex=function(e,t,r,n){return new Promise((o,a)=>{const s=We.get(e);if(!s)return void a(new Error(`Database "${e}" not initialized`));const i=s.transaction([t],"readwrite").objectStore(t).index(r).openCursor(n);let c=0;i.onsuccess=e=>{const t=e.target.result;t?(t.delete(),c++,t.continue()):o(c)},i.onerror=()=>a(new Error(`Delete data by index failed: ${i.error}`))})},exports.deleteDatabase=function(e){return new Promise((t,r)=>{qe(e);const n=indexedDB.deleteDatabase(e);n.onsuccess=()=>t(),n.onerror=()=>r(new Error(`Delete database failed: ${n.error}`)),n.onblocked=()=>r(new Error("Delete database blocked, please close other tabs using this database"))})},exports.format=L,exports.formatDate=v,exports.formatDateOnly=O,exports.formatDateTime=T,exports.formatDateTimeColon=E,exports.formatHourMinute=k,exports.formatNumber=x,exports.formatRelativeTime=M,exports.formatStorageSize=function(e){if(!e)return"0 B";const t=["B","KB","MB","GB"];let r=e,n=0;for(;r>=1024&&n<t.length-1;)r/=1024,n++;return`${r.toFixed(2)} ${t[n]}`},exports.formatTimeOnly=I,exports.formatYearMonth=C,exports.getAllData=function(e,t){return new Promise((r,n)=>{const o=We.get(e);if(!o)return void n(new Error(`Database "${e}" not initialized`));const a=o.transaction([t],"readonly").objectStore(t).getAll();a.onsuccess=()=>r(a.result),a.onerror=()=>n(new Error(`Get all data failed: ${a.error}`))})},exports.getDB=function(e){return We.get(e)},exports.getData=function(e,t,r){return new Promise((n,o)=>{const a=We.get(e);if(!a)return void o(new Error(`Database "${e}" not initialized`));const s=a.transaction([t],"readonly").objectStore(t).get(r);s.onsuccess=()=>n(s.result),s.onerror=()=>o(new Error(`Get data failed: ${s.error}`))})},exports.getDataByIndex=function(e,t,r,n){return new Promise((o,a)=>{const s=We.get(e);if(!s)return void a(new Error(`Database "${e}" not initialized`));const i=s.transaction([t],"readonly").objectStore(t).index(r).getAll(n);i.onsuccess=()=>o(i.result),i.onerror=()=>a(new Error(`Get data by index failed: ${i.error}`))})},exports.getDataByIndexRange=function(e,t,r,n){return new Promise((o,a)=>{const s=We.get(e);if(!s)return void a(new Error(`Database "${e}" not initialized`));const i=s.transaction([t],"readonly").objectStore(t).index(r).getAll(n);i.onsuccess=()=>o(i.result),i.onerror=()=>a(new Error(`Get data by index range failed: ${i.error}`))})},exports.getDay=R,exports.getDaysAgoStart=z,exports.getHour=Y,exports.getMinute=A,exports.getMonth=P,exports.getSecond=H,exports.getStorageEstimate=async function(){return"storage"in navigator&&"estimate"in navigator.storage?await navigator.storage.estimate():null},exports.getTimestamp=U,exports.getTodayStart=_,exports.getType=B,exports.getYear=j,exports.getYesterdayStart=N,exports.http=p,exports.idleCallback=function(e,t){const r=++d;if("undefined"!=typeof requestIdleCallback){const n=requestIdleCallback(e,t);return l.set(r,n),r}const n=Date.now(),o=t?.timeout??0,a=window.setTimeout(()=>{const t=Date.now()-n,a={didTimeout:o>0&&t>=o,timeRemaining:()=>Math.max(0,50-(Date.now()-n))};l.delete(r),e(a)},1);return l.set(r,a),r},exports.initDB=function(e){return new Promise((t,r)=>{const n=We.get(e.name);if(n)return void t(n);const o=indexedDB.open(e.name,e.version);o.onupgradeneeded=t=>{const r=t.target.result;e.stores.forEach(e=>{r.objectStoreNames.contains(e.name)&&r.deleteObjectStore(e.name);const t=r.createObjectStore(e.name,{keyPath:e.keyPath,autoIncrement:e.autoIncrement||!1});e.indexes&&e.indexes.forEach(e=>{t.createIndex(e.name,e.keyPath,{unique:e.unique||!1})})})},o.onsuccess=r=>{const n=r.target.result;We.set(e.name,n),t(n)},o.onerror=e=>{r(new Error(`Database init failed: ${e.target.error}`))}})},exports.isArray=J,exports.isBankCard=ge,exports.isBoolean=q,exports.isCarNumber=pe,exports.isChinese=fe,exports.isDate=V,exports.isEmail=ae,exports.isEmptyValue=ne,exports.isFunction=G,exports.isIdCard=ie,exports.isIp=ue,exports.isLetter=de,exports.isNotEmpty=oe,exports.isNull=ee,exports.isNullOrUndefined=re,exports.isNumber=W,exports.isNumericString=le,exports.isObject=Z,exports.isPhone=se,exports.isPostalCode=we,exports.isPromise=K,exports.isRegExp=Q,exports.isString=F,exports.isStrongPassword=me,exports.isSymbol=X,exports.isTransportSupported=Fe,exports.isUndefined=te,exports.isUrl=ce,exports.isUsername=he,exports.numberToChinese=D,exports.numericId=De,exports.putData=function(e,t,r){return new Promise((n,o)=>{const a=We.get(e);if(!a)return void o(new Error(`Database "${e}" not initialized`));const s=a.transaction([t],"readwrite").objectStore(t).put(r);s.onsuccess=()=>n(s.result),s.onerror=()=>o(new Error(`Put data failed: ${s.error}`))})},exports.rafInterval=function(e,t){const o=++n;let a=performance.now();return r.set(o,requestAnimationFrame(function n(s){r.has(o)&&(s-a>=t&&(a=s,e()),r.set(o,requestAnimationFrame(n)))})),o},exports.rafTimeout=c,exports.rafTimes=function(e,t,r){const n=++i;let o=0;return s.set(n,{currentRafId:0,cancelled:!1}),s.get(n).currentRafId=c(function a(){const i=s.get(n);i&&!i.cancelled&&(o++,e(o),o<r?i.currentRafId=c(a,t):s.delete(n))},t),n},exports.recursiveInterval=function(e,t){const r=++a;return o.set(r,window.setTimeout(function n(){o.has(r)&&(e(),o.set(r,window.setTimeout(n,t)))},t)),r},exports.resizeAndCompress=Ze,exports.runInWorker=function(e,t,r){const n=ze(e),{timeout:o}=r||{};return new Promise((e,r)=>{let a;o&&(a=window.setTimeout(()=>{n.terminate(),r(new Error("Worker 执行超时"))},o)),n.run(t).then(t=>{a&&clearTimeout(a),n.terminate(),e(t)}).catch(e=>{a&&clearTimeout(a),n.terminate(),r(e)})})},exports.safe=Ne,exports.safeExecute=Ae,exports.safeExecuteAsync=He,exports.safeGet=Ue,exports.safeJsonParse=ke,exports.safeJsonStringify=je,exports.safeLocalStorage=Re,exports.safeSessionStorage=Ye,exports.safeSet=_e,exports.shortId=Ie,exports.smartCompress=async function(e,t,r=.85){if("image/webp"===e.type){const r=await Ge(e);if(!(r.width>t||r.height>t))return{blob:e,width:r.width,height:r.height,originalSize:e.size,compressedSize:e.size,ratio:1}}return Ze(e,t,r)},exports.snowflakeId=Oe,exports.timestampId=Se,exports.toWebP=async function(e,t=.85){return(await Je(e,{maxWidth:1/0,maxHeight:1/0,format:"image/webp",quality:t})).blob},exports.uid=Ce,exports.uuid=$e,exports.validate=ye;
|
|
1
|
+
"use strict";const e=new Map;let t=0;const r=new Map;let n=0;const o=new Map;let a=0;const s=new Map;let i=0;function c(r,n){const o=++t,a=performance.now();return e.set(o,requestAnimationFrame(function t(s){e.has(o)&&(s-a>=n?(e.delete(o),r()):e.set(o,requestAnimationFrame(t)))})),o}function u(t){const r=e.get(t);void 0!==r&&(cancelAnimationFrame(r),e.delete(t))}const l=new Map;let d=0;class f extends Error{constructor(e,t,r){super(e),this.name="HttpError",this.status=t,this.response=r}}function h(){const e=[];return{handlers:e,use:t=>(e.push(t),e.length-1),eject(t){e[t]&&e.splice(t,1)}}}function m(e={}){const t={baseURL:e.baseURL||"",timeout:e.timeout||15e3,headers:e.headers||{},withCredentials:e.withCredentials??!1,retry:e.retry??0},r={request:h(),response:h()};async function n(e,t){const n=function(e,t){if(!t||0===Object.keys(t).length)return e;const r=Object.keys(t).filter(e=>void 0!==t[e]&&null!==t[e]).map(e=>`${encodeURIComponent(e)}=${encodeURIComponent(t[e])}`).join("&");return e+(e.includes("?")?"&":"?")+r}(e.url,e.params),o=function(e){const t={method:e.method||"GET",headers:{"Content-Type":"application/json;charset=UTF-8",...e.headers},credentials:e.withCredentials?"include":"same-origin"};return e.data&&(e.data instanceof FormData?(t.body=e.data,delete t.headers["Content-Type"]):"object"==typeof e.data?t.body=JSON.stringify(e.data):t.body=e.data),t}(e),a=c(()=>t.abort(),e.timeout);try{const s=await fetch(n,{...o,signal:t.signal});if(u(a),!s.ok)throw new f(`请求失败 (${s.status})`,s.status,s);let i=await async function(e,t){switch(t){case"blob":return e.blob();case"text":return e.text();case"arrayBuffer":return e.arrayBuffer();default:return e.json()}}(s,e.responseType);for(const e of r.response.handlers)if(e.onFulfilled)try{i=await e.onFulfilled(i)}catch(t){if(e.onRejected)return await e.onRejected(t);throw t}return i}catch(e){if(u(a),"AbortError"===e.name)throw new f("请求超时或已取消");throw e}}function o(e){const o=new AbortController,a=(async()=>{let a=function(e){return{...e,url:t.baseURL+e.url,timeout:e.timeout||t.timeout,headers:{...t.headers,...e.headers},withCredentials:e.withCredentials??t.withCredentials}}(e);for(const e of r.request.handlers)if(e.onFulfilled)try{a=await e.onFulfilled(a)}catch(t){throw e.onRejected&&await e.onRejected(t),t}a.signal&&a.signal.addEventListener("abort",()=>o.abort());const s=t.retry||0;let i;for(let e=0;e<=s;e++)try{return await n(a,o)}catch(t){if(i=t,"请求超时或已取消"===t.message||o.signal.aborted)break;if(e===s)break}for(const e of r.response.handlers)if(e.onRejected)return await e.onRejected(i);throw i})();return a.abort=()=>o.abort(),a}return{interceptors:r,request:o,get:function(e,t,r){return o({...r,url:e,method:"GET",params:t})},post:function(e,t,r){return o({...r,url:e,method:"POST",data:t})},put:function(e,t,r){return o({...r,url:e,method:"PUT",data:t})},delete:function(e,t,r){return o({...r,url:e,method:"DELETE",params:t})},options:function(e,t){return o({...t,url:e,method:"OPTIONS"})},patch:function(e,t,r){return o({...r,url:e,method:"PATCH",data:t})},upload:function(e){const{url:r,file:n,name:a="file",data:s={},headers:i={},onProgress:c,signal:u}=e,l=new FormData;if(l.append(a,n),Object.keys(s).forEach(e=>l.append(e,s[e])),!c)return o({url:r,method:"POST",data:l,headers:i,signal:u});const d=new AbortController;u&&u.addEventListener("abort",()=>d.abort());const h=function(e,t,r,n,o){return new Promise((a,s)=>{const i=new XMLHttpRequest;i.upload.addEventListener("progress",e=>{e.lengthComputable&&n(Math.round(e.loaded/e.total*100))}),i.addEventListener("load",()=>{if(i.status>=200&&i.status<300)try{a(JSON.parse(i.responseText))}catch{a(i.responseText)}else s(new f(`上传失败 (${i.status})`,i.status))}),i.addEventListener("error",()=>s(new f("上传失败"))),o&&o.addEventListener("abort",()=>{i.abort(),s(new f("上传已取消"))}),i.open("POST",e),Object.keys(r).forEach(e=>i.setRequestHeader(e,r[e])),i.send(t)})}(t.baseURL+r,l,i,c,d.signal);return h.abort=()=>d.abort(),h}}}const p=m();"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;function g(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var w={exports:{}},y=g(w.exports=function(){var e=1e3,t=6e4,r=36e5,n="millisecond",o="second",a="minute",s="hour",i="day",c="week",u="month",l="quarter",d="year",f="date",h="Invalid Date",m=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,p=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,g={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(e){var t=["th","st","nd","rd"],r=e%100;return"["+e+(t[(r-20)%10]||t[r]||t[0])+"]"}},w=function(e,t,r){var n=String(e);return!n||n.length>=t?e:""+Array(t+1-n.length).join(r)+e},y={s:w,z:function(e){var t=-e.utcOffset(),r=Math.abs(t),n=Math.floor(r/60),o=r%60;return(t<=0?"+":"-")+w(n,2,"0")+":"+w(o,2,"0")},m:function e(t,r){if(t.date()<r.date())return-e(r,t);var n=12*(r.year()-t.year())+(r.month()-t.month()),o=t.clone().add(n,u),a=r-o<0,s=t.clone().add(n+(a?-1:1),u);return+(-(n+(r-o)/(a?o-s:s-o))||0)},a:function(e){return e<0?Math.ceil(e)||0:Math.floor(e)},p:function(e){return{M:u,y:d,w:c,d:i,D:f,h:s,m:a,s:o,ms:n,Q:l}[e]||String(e||"").toLowerCase().replace(/s$/,"")},u:function(e){return void 0===e}},x="en",b={};b[x]=g;var S="$isDayjsObject",$=function(e){return e instanceof E||!(!e||!e[S])},D=function e(t,r,n){var o;if(!t)return x;if("string"==typeof t){var a=t.toLowerCase();b[a]&&(o=a),r&&(b[a]=r,o=a);var s=t.split("-");if(!o&&s.length>1)return e(s[0])}else{var i=t.name;b[i]=t,o=i}return!n&&o&&(x=o),o||!n&&x},M=function(e,t){if($(e))return e.clone();var r="object"==typeof t?t:{};return r.date=e,r.args=arguments,new E(r)},v=y;v.l=D,v.i=$,v.w=function(e,t){return M(e,{locale:t.$L,utc:t.$u,x:t.$x,$offset:t.$offset})};var E=function(){function g(e){this.$L=D(e.locale,null,!0),this.parse(e),this.$x=this.$x||e.x||{},this[S]=!0}var w=g.prototype;return w.parse=function(e){this.$d=function(e){var t=e.date,r=e.utc;if(null===t)return new Date(NaN);if(v.u(t))return new Date;if(t instanceof Date)return new Date(t);if("string"==typeof t&&!/Z$/i.test(t)){var n=t.match(m);if(n){var o=n[2]-1||0,a=(n[7]||"0").substring(0,3);return r?new Date(Date.UTC(n[1],o,n[3]||1,n[4]||0,n[5]||0,n[6]||0,a)):new Date(n[1],o,n[3]||1,n[4]||0,n[5]||0,n[6]||0,a)}}return new Date(t)}(e),this.init()},w.init=function(){var e=this.$d;this.$y=e.getFullYear(),this.$M=e.getMonth(),this.$D=e.getDate(),this.$W=e.getDay(),this.$H=e.getHours(),this.$m=e.getMinutes(),this.$s=e.getSeconds(),this.$ms=e.getMilliseconds()},w.$utils=function(){return v},w.isValid=function(){return!(this.$d.toString()===h)},w.isSame=function(e,t){var r=M(e);return this.startOf(t)<=r&&r<=this.endOf(t)},w.isAfter=function(e,t){return M(e)<this.startOf(t)},w.isBefore=function(e,t){return this.endOf(t)<M(e)},w.$g=function(e,t,r){return v.u(e)?this[t]:this.set(r,e)},w.unix=function(){return Math.floor(this.valueOf()/1e3)},w.valueOf=function(){return this.$d.getTime()},w.startOf=function(e,t){var r=this,n=!!v.u(t)||t,l=v.p(e),h=function(e,t){var o=v.w(r.$u?Date.UTC(r.$y,t,e):new Date(r.$y,t,e),r);return n?o:o.endOf(i)},m=function(e,t){return v.w(r.toDate()[e].apply(r.toDate("s"),(n?[0,0,0,0]:[23,59,59,999]).slice(t)),r)},p=this.$W,g=this.$M,w=this.$D,y="set"+(this.$u?"UTC":"");switch(l){case d:return n?h(1,0):h(31,11);case u:return n?h(1,g):h(0,g+1);case c:var x=this.$locale().weekStart||0,b=(p<x?p+7:p)-x;return h(n?w-b:w+(6-b),g);case i:case f:return m(y+"Hours",0);case s:return m(y+"Minutes",1);case a:return m(y+"Seconds",2);case o:return m(y+"Milliseconds",3);default:return this.clone()}},w.endOf=function(e){return this.startOf(e,!1)},w.$set=function(e,t){var r,c=v.p(e),l="set"+(this.$u?"UTC":""),h=(r={},r[i]=l+"Date",r[f]=l+"Date",r[u]=l+"Month",r[d]=l+"FullYear",r[s]=l+"Hours",r[a]=l+"Minutes",r[o]=l+"Seconds",r[n]=l+"Milliseconds",r)[c],m=c===i?this.$D+(t-this.$W):t;if(c===u||c===d){var p=this.clone().set(f,1);p.$d[h](m),p.init(),this.$d=p.set(f,Math.min(this.$D,p.daysInMonth())).$d}else h&&this.$d[h](m);return this.init(),this},w.set=function(e,t){return this.clone().$set(e,t)},w.get=function(e){return this[v.p(e)]()},w.add=function(n,l){var f,h=this;n=Number(n);var m=v.p(l),p=function(e){var t=M(h);return v.w(t.date(t.date()+Math.round(e*n)),h)};if(m===u)return this.set(u,this.$M+n);if(m===d)return this.set(d,this.$y+n);if(m===i)return p(1);if(m===c)return p(7);var g=(f={},f[a]=t,f[s]=r,f[o]=e,f)[m]||1,w=this.$d.getTime()+n*g;return v.w(w,this)},w.subtract=function(e,t){return this.add(-1*e,t)},w.format=function(e){var t=this,r=this.$locale();if(!this.isValid())return r.invalidDate||h;var n=e||"YYYY-MM-DDTHH:mm:ssZ",o=v.z(this),a=this.$H,s=this.$m,i=this.$M,c=r.weekdays,u=r.months,l=r.meridiem,d=function(e,r,o,a){return e&&(e[r]||e(t,n))||o[r].slice(0,a)},f=function(e){return v.s(a%12||12,e,"0")},m=l||function(e,t,r){var n=e<12?"AM":"PM";return r?n.toLowerCase():n};return n.replace(p,function(e,n){return n||function(e){switch(e){case"YY":return String(t.$y).slice(-2);case"YYYY":return v.s(t.$y,4,"0");case"M":return i+1;case"MM":return v.s(i+1,2,"0");case"MMM":return d(r.monthsShort,i,u,3);case"MMMM":return d(u,i);case"D":return t.$D;case"DD":return v.s(t.$D,2,"0");case"d":return String(t.$W);case"dd":return d(r.weekdaysMin,t.$W,c,2);case"ddd":return d(r.weekdaysShort,t.$W,c,3);case"dddd":return c[t.$W];case"H":return String(a);case"HH":return v.s(a,2,"0");case"h":return f(1);case"hh":return f(2);case"a":return m(a,s,!0);case"A":return m(a,s,!1);case"m":return String(s);case"mm":return v.s(s,2,"0");case"s":return String(t.$s);case"ss":return v.s(t.$s,2,"0");case"SSS":return v.s(t.$ms,3,"0");case"Z":return o}return null}(e)||o.replace(":","")})},w.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},w.diff=function(n,f,h){var m,p=this,g=v.p(f),w=M(n),y=(w.utcOffset()-this.utcOffset())*t,x=this-w,b=function(){return v.m(p,w)};switch(g){case d:m=b()/12;break;case u:m=b();break;case l:m=b()/3;break;case c:m=(x-y)/6048e5;break;case i:m=(x-y)/864e5;break;case s:m=x/r;break;case a:m=x/t;break;case o:m=x/e;break;default:m=x}return h?m:v.a(m)},w.daysInMonth=function(){return this.endOf(u).$D},w.$locale=function(){return b[this.$L]},w.locale=function(e,t){if(!e)return this.$L;var r=this.clone(),n=D(e,t,!0);return n&&(r.$L=n),r},w.clone=function(){return v.w(this.$d,this)},w.toDate=function(){return new Date(this.valueOf())},w.toJSON=function(){return this.isValid()?this.toISOString():null},w.toISOString=function(){return this.$d.toISOString()},w.toString=function(){return this.$d.toUTCString()},g}(),T=E.prototype;return M.prototype=T,[["$ms",n],["$s",o],["$m",a],["$H",s],["$W",i],["$M",u],["$y",d],["$D",f]].forEach(function(e){T[e[1]]=function(t){return this.$g(t,e[0],e[1])}}),M.extend=function(e,t){return e.$i||(e(t,E,M),e.$i=!0),M},M.locale=D,M.isDayjs=$,M.unix=function(e){return M(1e3*e)},M.en=b[x],M.Ls=b,M.p={},M}());function x(e,t={}){const{decimals:r=0,prefix:n="",suffix:o=""}=t,a="string"==typeof e?parseFloat(e):e;if(isNaN(a))return"";const s=a.toFixed(r),[i,c]=s.split("."),u=i.replace(/\B(?=(\d{3})+(?!\d))/g,",");return n+(c?`${u}.${c}`:u)+o}const b=["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"],S=["","拾","佰","仟"],$=["","万","亿","兆"];function D(e){const t="string"==typeof e?parseFloat(e):e;if(isNaN(t))return"";if(0===t)return"零元整";const r=t<0,n=Math.abs(t),[o,a=""]=n.toFixed(2).split(".");let s="";if("0"!==o){const e=o,t=e.length;let r=!1;for(let n=0;n<t;n++){const o=parseInt(e[n]),a=t-n-1,i=a%4,c=Math.floor(a/4);0===o?(r=!0,0===i&&c>0&&(s+=$[c])):(r&&(s+=b[0],r=!1),s+=b[o]+S[i],0===i&&c>0&&(s+=$[c]))}s+="元"}const i=parseInt(a[0]||"0"),c=parseInt(a[1]||"0");return 0===i&&0===c?s+="整":(i>0?s+=b[i]+"角":c>0&&(s+="零"),c>0&&(s+=b[c]+"分")),r?"负"+s:s}function M(e){const t=y(e),r=y(),n=r.diff(t,"second"),o=r.diff(t,"minute"),a=r.diff(t,"hour"),s=r.diff(t,"day");return n<60?"刚刚":o<60?`${o}分钟前`:a<24?`${a}小时前`:s<7?`${s}天前`:t.year()===r.year()?t.format("M月D日"):t.format("YYYY年M月D日")}function v(e,t="YYYY-MM-DD HH:mm:ss"){return y(e).format(t)}function E(e){return y(e).format("YYYY:MM:DD HH:mm:ss")}function T(e){return y(e).format("YYYY-MM-DD HH:mm:ss")}function O(e){return y(e).format("YYYY-MM-DD")}function I(e){return y(e).format("HH:mm:ss")}function C(e){return y(e).format("YYYY-MM")}function k(e){return y(e).format("HH:mm")}function j(e){return y(e).format("YYYY")}function A(e){return y(e).format("MM")}function P(e){return y(e).format("DD")}function R(e){return y(e).format("HH")}function Y(e){return y(e).format("mm")}function U(e){return y(e).format("ss")}function H(){return Date.now()}function _(){return y().startOf("day").valueOf()}function N(){return y().subtract(1,"day").startOf("day").valueOf()}function z(e){return y().subtract(e,"day").startOf("day").valueOf()}const L={formatNumber:x,numberToChinese:D,formatRelativeTime:M,formatDate:v,formatDateTimeColon:E,formatDateTime:T,formatDateOnly:O,formatTimeOnly:I,formatYearMonth:C,formatHourMinute:k,getYear:j,getMonth:A,getDay:P,getHour:R,getMinute:Y,getSecond:U,getTimestamp:H,getTodayStart:_,getYesterdayStart:N,getDaysAgoStart:z};function B(e){return Object.prototype.toString.call(e).slice(8,-1)}function F(e){return"String"===B(e)}function W(e){return"Number"===B(e)&&!isNaN(e)}function q(e){return"Boolean"===B(e)}function J(e){return"Array"===B(e)}function Z(e){return"Object"===B(e)}function G(e){return"Function"===B(e)}function V(e){return"Date"===B(e)}function Q(e){return"RegExp"===B(e)}function K(e){return"Symbol"===B(e)}function X(e){return"Promise"===B(e)}function ee(e){return"Null"===B(e)}function te(e){return"Undefined"===B(e)}function re(e){return ee(e)||te(e)}function ne(e){return!!re(e)||(F(e)?""===e.trim():J(e)?0===e.length:!!Z(e)&&0===Object.keys(e).length)}function oe(e){return!ne(e)}function ae(e){return/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}$/.test(e)}function se(e){return/^1[3-9]\d{9}$/.test(e)}function ie(e){return/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(e)}function ce(e){return/^(https?:\/\/)?([\da-z.-]+)\.([a-z.]{2,6})([/\w .-]*)*\/?(\?[;&a-z\d%_.~+=-]*)?(\#[-a-z\d_]*)?$/i.test(e)}function ue(e){return/^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$/.test(e)}function le(e){return/^\d+$/.test(e)}function de(e){return/^[A-Za-z]+$/.test(e)}function fe(e){return/^[\u4e00-\u9fa5]+$/.test(e)}function he(e){return/^[a-zA-Z][a-zA-Z0-9_]{3,15}$/.test(e)}function me(e){return/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{6,20}$/.test(e)}function pe(e){return/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-HJ-NP-Z][A-HJ-NP-Z0-9]{4,5}[A-HJ-NP-Z0-9挂学警港澳]$/.test(e)}function ge(e){return/^\d{16,19}$/.test(e)}function we(e){return/^\d{6}$/.test(e)}const ye={getType:B,isString:F,isNumber:W,isBoolean:q,isArray:J,isObject:Z,isFunction:G,isDate:V,isRegExp:Q,isSymbol:K,isPromise:X,isNull:ee,isUndefined:te,isNullOrUndefined:re,isEmptyValue:ne,isNotEmpty:oe,isEmail:ae,isPhone:se,isIdCard:ie,isUrl:ce,isIp:ue,isNumericString:le,isLetter:de,isChinese:fe,isUsername:he,isStrongPassword:me,isCarNumber:pe,isBankCard:ge,isPostalCode:we},xe="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",be="0123456789";function Se(e=!1){if("undefined"!=typeof crypto&&crypto.randomUUID){const t=crypto.randomUUID();return e?t.replace(/-/g,""):t}const t="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)});return e?t.replace(/-/g,""):t}function $e(e=6){return Date.now().toString()+Me(e)}function De(e=9){const t=Math.max(1,Math.min(20,e));let r=be[Math.floor(9*Math.random())+1];for(let e=1;e<t;e++)r+=be[Math.floor(10*Math.random())];return r}function Me(e=8){let t="";for(let r=0;r<e;r++)t+=xe[Math.floor(62*Math.random())];return t}function ve(e=16){const t=Math.ceil(e/2);if("undefined"!=typeof crypto&&crypto.getRandomValues){const r=new Uint8Array(t);crypto.getRandomValues(r);let n="";for(let e=0;e<r.length;e++)n+=r[e].toString(16).padStart(2,"0");return n.slice(0,e)}let r="";for(let t=0;t<e;t++)r+="0123456789abcdef"[Math.floor(16*Math.random())];return r}let Ee=-1,Te=0;function Oe(){let e=Date.now();if(e===Ee){if(Te=Te+1&4095,0===Te)for(;e<=Ee;)e=Date.now()}else Te=0;return Ee=e,e.toString()+Te.toString().padStart(6,"0")}function Ie(e=8){let t="",r=1e6*Date.now()+Math.floor(1e6*Math.random());for(;r>0;)t=xe[r%62]+t,r=Math.floor(r/62);for(;t.length<e;)t=xe[Math.floor(62*Math.random())]+t;return t}const Ce={uuid:Se,timestampId:$e,numericId:De,alphanumericId:Me,binaryId:ve,snowflakeId:Oe,shortId:Ie};function ke(e,t=null){try{return JSON.parse(e)}catch{return t}}function je(e,t=null,r){try{return JSON.stringify(e,null,r)}catch{return t}}function Ae(e){return{get(t,r=null){try{if(!e)return r;const n=e.getItem(t);return null===n?r:ke(n,r)}catch{return r}},getString(t,r=""){try{return e?e.getItem(t)??r:r}catch{return r}},set(t,r){try{if(!e)return!1;const n=je(r);return null!==n&&(e.setItem(t,n),!0)}catch{return!1}},remove(t){try{return!!e&&(e.removeItem(t),!0)}catch{return!1}},clear(){try{return!!e&&(e.clear(),!0)}catch{return!1}},has(t){try{return!!e&&null!==e.getItem(t)}catch{return!1}},keys(){try{if(!e)return[];const t=[];for(let r=0;r<e.length;r++){const n=e.key(r);null!==n&&t.push(n)}return t}catch{return[]}},size(){try{return e?e.length:0}catch{return 0}}}}const Pe=Ae(function(){try{return"undefined"!=typeof window?window.localStorage:null}catch{return null}}()),Re=Ae(function(){try{return"undefined"!=typeof window?window.sessionStorage:null}catch{return null}}());function Ye(e,t){try{return e()}catch{return t}}async function Ue(e,t){try{return await e()}catch{return t}}function He(e,t,r=void 0){try{if(null==e)return r;const n=t.replace(/\[(\d+)\]/g,".$1").split(".");let o=e;for(const e of n){if(null==o)return r;o=o[e]}return void 0===o?r:o}catch{return r}}function _e(e,t,r){try{if(null==e||"object"!=typeof e)return!1;const n=t.replace(/\[(\d+)\]/g,".$1").split(".");let o=e;for(let e=0;e<n.length-1;e++){const t=n[e],r=n[e+1],a=/^\d+$/.test(r);null==o[t]&&(o[t]=a?[]:{}),o=o[t]}return o[n[n.length-1]]=r,!0}catch{return!1}}const Ne={jsonParse:ke,jsonStringify:je,localStorage:Pe,sessionStorage:Re,execute:Ye,executeAsync:Ue,get:He,set:_e};function ze(e){const t=function(e){const t=`\n const fn = ${e.toString()};\n self.onmessage = async (e) => {\n try {\n const result = await fn(e.data);\n self.postMessage({ type: '__result__', data: result });\n } catch (error) {\n self.postMessage({ type: '__error__', error: error.message });\n }\n };\n `,r=new Blob([t],{type:"application/javascript"});return URL.createObjectURL(r)}(e),r=new Worker(t),n=new Set,o=new Set;let a=null,s=null;return r.onmessage=e=>{const{type:t,data:r,error:o}=e.data;"__result__"===t?(a?.(r),a=null,s=null):"__error__"===t?(s?.(new Error(o)),a=null,s=null):n.forEach(t=>t(e.data))},r.onerror=e=>{s?.(e),a=null,s=null,o.forEach(t=>t(e))},{run:e=>new Promise((t,n)=>{a=t,s=n,r.postMessage(e)}),postMessage(e){r.postMessage(e)},onMessage:e=>(n.add(e),()=>n.delete(e)),onError:e=>(o.add(e),()=>o.delete(e)),terminate(){r.terminate(),URL.revokeObjectURL(t),n.clear(),o.clear()}}}const Le=new TextEncoder;function Be(e,t){const r=new Set;let n=null,o=!1;if(e){const t=e.getReader();(async()=>{try{for(;!o;){const{value:e,done:n}=await t.read();if(n)break;e&&r.forEach(t=>t(e))}}catch{}})()}return{async send(e){if(!t||o)return;n||(n=t.getWriter());const r="string"==typeof e?Le.encode(e):e;await n.write(r)},onMessage:e=>(r.add(e),()=>r.delete(e)),close(){o=!0,n?.close(),r.clear()},getReadable:()=>e,getWritable:()=>t}}function Fe(){return"undefined"!=typeof WebTransport}new TextDecoder;const We=new Map;function qe(e){const t=We.get(e);t&&(t.close(),We.delete(e))}async function Je(e,t={}){const{maxWidth:r=1e3,maxHeight:n=1e3,format:o="image/webp",quality:a=.85}=t;let s=0;(e instanceof File||e instanceof Blob)&&(s=e.size);const i=await Ge(e);let{width:c,height:u}=i;if(c>r||u>n){const e=Math.min(r/c,n/u);c=Math.round(c*e),u=Math.round(u*e)}const l=document.createElement("canvas");l.width=c,l.height=u;l.getContext("2d").drawImage(i,0,0,c,u);const d=await function(e,t,r){return new Promise((n,o)=>{e.toBlob(e=>{e?n(e):o(new Error("Canvas 转换失败"))},t,r)})}(l,o,a);return{blob:d,width:c,height:u,originalSize:s,compressedSize:d.size,ratio:s>0?d.size/s:0}}async function Ze(e,t,r=.85){return Je(e,{maxWidth:t,maxHeight:t,format:"image/webp",quality:r})}async function Ge(e){return e instanceof HTMLImageElement?e:new Promise((t,r)=>{const n=new Image,o=URL.createObjectURL(e);n.onload=()=>{URL.revokeObjectURL(o),t(n)},n.onerror=()=>{URL.revokeObjectURL(o),r(new Error("图片加载失败"))},n.src=o})}exports.HttpError=f,exports.addData=function(e,t,r){return new Promise((n,o)=>{const a=We.get(e);if(!a)return void o(new Error(`Database "${e}" not initialized`));const s=a.transaction([t],"readwrite").objectStore(t).add(r);s.onsuccess=()=>n(s.result),s.onerror=()=>o(new Error(`Add data failed: ${s.error}`))})},exports.aesGcmDecrypt=async function(e,t){const r=(new TextEncoder).encode(t);if(32!==r.length)throw new Error("AES-256 密钥必须是 32 字节");const n=Uint8Array.from(atob(e),e=>e.charCodeAt(0)),o=n.slice(0,12),a=n.slice(12),s=await crypto.subtle.importKey("raw",r,{name:"AES-GCM"},!1,["decrypt"]),i=await crypto.subtle.decrypt({name:"AES-GCM",iv:o},s,a),c=(new TextDecoder).decode(i);return JSON.parse(c)},exports.alphanumericId=Me,exports.binaryId=ve,exports.cancelIdleCallback=function(e){const t=l.get(e);void 0!==t&&(void 0!==window.cancelIdleCallback?window.cancelIdleCallback(t):clearTimeout(t),l.delete(e))},exports.cancelRafInterval=function(e){const t=r.get(e);void 0!==t&&(cancelAnimationFrame(t),r.delete(e))},exports.cancelRafTimeout=u,exports.cancelRafTimes=function(e){const t=s.get(e);t&&(t.cancelled=!0,u(t.currentRafId),s.delete(e))},exports.cancelRecursiveInterval=function(e){const t=o.get(e);void 0!==t&&(clearTimeout(t),o.delete(e))},exports.clearStore=function(e,t){return new Promise((r,n)=>{const o=We.get(e);if(!o)return void n(new Error(`Database "${e}" not initialized`));const a=o.transaction([t],"readwrite").objectStore(t).clear();a.onsuccess=()=>r(),a.onerror=()=>n(new Error(`Clear store failed: ${a.error}`))})},exports.closeAllDB=function(){We.forEach((e,t)=>{e.close()}),We.clear()},exports.closeDB=qe,exports.compressImage=Je,exports.countData=function(e,t){return new Promise((r,n)=>{const o=We.get(e);if(!o)return void n(new Error(`Database "${e}" not initialized`));const a=o.transaction([t],"readonly").objectStore(t).count();a.onsuccess=()=>r(a.result),a.onerror=()=>n(new Error(`Count data failed: ${a.error}`))})},exports.createHttpClient=m,exports.createTransport=function(e){const{url:t,allowPooling:r,congestionControl:n}=e;if(!Fe())throw new Error("当前浏览器不支持 WebTransport");let o="connecting",a=null;const s=new Set,i=new Set,c=new Set,u=new Set,l=new Set,d={};return void 0!==r&&(d.allowPooling=r),n&&(d.congestionControl=n),a=new WebTransport(t,d),a.closed.then(e=>{o="closed",u.forEach(t=>t({closeCode:e.closeCode??0,reason:e.reason??""}))}).catch(e=>{o="failed",l.forEach(t=>t(e))}),(async()=>{try{const e=a.datagrams.readable.getReader();for(;"connecting"===o||"connected"===o;){const{value:t,done:r}=await e.read();if(r)break;t&&s.forEach(e=>e(t))}}catch{}})(),(async()=>{try{const e=a.incomingBidirectionalStreams.getReader();for(;"connecting"===o||"connected"===o;){const{value:t,done:r}=await e.read();if(r)break;if(t){const e=Be(t.readable,t.writable);i.forEach(t=>t(e))}}}catch{}})(),(async()=>{try{const e=a.incomingUnidirectionalStreams.getReader();for(;"connecting"===o||"connected"===o;){const{value:t,done:r}=await e.read();if(r)break;if(t){const e=Be(t,null);c.forEach(t=>t(e))}}}catch{}})(),{async ready(){await a.ready,o="connected"},getState:()=>o,sendDatagram(e){if(!a||"connected"!==o)return;const t="string"==typeof e?Le.encode(e):e,r=a.datagrams.writable.getWriter();r.write(t),r.releaseLock()},onDatagram:e=>(s.add(e),()=>s.delete(e)),async createBidirectionalStream(){if(!a||"connected"!==o)throw new Error("连接未就绪");const e=await a.createBidirectionalStream();return Be(e.readable,e.writable)},async createUnidirectionalStream(){if(!a||"connected"!==o)throw new Error("连接未就绪");return Be(null,await a.createUnidirectionalStream())},onBidirectionalStream:e=>(i.add(e),()=>i.delete(e)),onUnidirectionalStream:e=>(c.add(e),()=>c.delete(e)),onClose:e=>(u.add(e),()=>u.delete(e)),onError:e=>(l.add(e),()=>l.delete(e)),close(e){a&&(a.close(e),o="closed",s.clear(),i.clear(),c.clear())},getTransport:()=>a}},exports.createWebSocket=function(e){const{url:t,protocols:r,autoConnect:n=!0,reconnect:o=!0,reconnectInterval:a=3e3,reconnectMaxTimes:s=5,heartbeat:i=!1,heartbeatInterval:l=3e4,heartbeatMessage:d="ping",messageQueue:f=!1,messageQueueMax:h=100}=e;let m=null,p="disconnected",g=0,w=null,y=null,x=!1;const b=[],S=new Set,$=new Set,D=new Set,M=new Set,v=new Set;function E(){i&&(T(),y=c(()=>{if("connected"===p&&m){const e="function"==typeof d?d():d;m.send(e),E()}},l))}function T(){y&&(u(y),y=null)}function O(){o&&!x&&(-1!==s&&g>=s||(g++,v.forEach(e=>e(g)),w=c(()=>{I()},a)))}function I(){if("connecting"!==p&&"connected"!==p){x=!1,p="connecting";try{m=r?new WebSocket(t,r):new WebSocket(t),m.onopen=e=>{p="connected",g=0,E(),function(){for(;b.length>0&&"connected"===p&&m;){const e=b.shift();m.send(e)}}(),S.forEach(t=>t(e))},m.onmessage=e=>{let t=e.data;try{t=JSON.parse(e.data)}catch{}$.forEach(r=>r(t,e))},m.onerror=e=>{D.forEach(t=>t(e))},m.onclose=e=>{p="disconnected",m=null,T(),M.forEach(t=>t(e)),O()}}catch(e){p="disconnected",O()}}}return n&&I(),{getState:()=>p,getSocket:()=>m,connect:I,disconnect:function(e=1e3,t="manual close"){x=!0,p="disconnecting",w&&(u(w),w=null),T(),m&&(m.close(e,t),m=null),p="disconnected"},send:function(e){const t="object"==typeof e?JSON.stringify(e):e;"connected"===p&&m?m.send(t):f&&b.length<h&&b.push(t)},onOpen:function(e){return S.add(e),()=>S.delete(e)},onMessage:function(e){return $.add(e),()=>$.delete(e)},onError:function(e){return D.add(e),()=>D.delete(e)},onClose:function(e){return M.add(e),()=>M.delete(e)},onReconnect:function(e){return v.add(e),()=>v.delete(e)},offAll:function(){S.clear(),$.clear(),D.clear(),M.clear(),v.clear()}}},exports.createWorker=ze,exports.deleteData=function(e,t,r){return new Promise((n,o)=>{const a=We.get(e);if(!a)return void o(new Error(`Database "${e}" not initialized`));const s=a.transaction([t],"readwrite").objectStore(t).delete(r);s.onsuccess=()=>n(),s.onerror=()=>o(new Error(`Delete data failed: ${s.error}`))})},exports.deleteDataByIndex=function(e,t,r,n){return new Promise((o,a)=>{const s=We.get(e);if(!s)return void a(new Error(`Database "${e}" not initialized`));const i=s.transaction([t],"readwrite").objectStore(t).index(r).openCursor(n);let c=0;i.onsuccess=e=>{const t=e.target.result;t?(t.delete(),c++,t.continue()):o(c)},i.onerror=()=>a(new Error(`Delete data by index failed: ${i.error}`))})},exports.deleteDatabase=function(e){return new Promise((t,r)=>{qe(e);const n=indexedDB.deleteDatabase(e);n.onsuccess=()=>t(),n.onerror=()=>r(new Error(`Delete database failed: ${n.error}`)),n.onblocked=()=>r(new Error("Delete database blocked, please close other tabs using this database"))})},exports.format=L,exports.formatDate=v,exports.formatDateOnly=O,exports.formatDateTime=T,exports.formatDateTimeColon=E,exports.formatHourMinute=k,exports.formatNumber=x,exports.formatRelativeTime=M,exports.formatStorageSize=function(e){if(!e)return"0 B";const t=["B","KB","MB","GB"];let r=e,n=0;for(;r>=1024&&n<t.length-1;)r/=1024,n++;return`${r.toFixed(2)} ${t[n]}`},exports.formatTimeOnly=I,exports.formatYearMonth=C,exports.getAllData=function(e,t){return new Promise((r,n)=>{const o=We.get(e);if(!o)return void n(new Error(`Database "${e}" not initialized`));const a=o.transaction([t],"readonly").objectStore(t).getAll();a.onsuccess=()=>r(a.result),a.onerror=()=>n(new Error(`Get all data failed: ${a.error}`))})},exports.getDB=function(e){return We.get(e)},exports.getData=function(e,t,r){return new Promise((n,o)=>{const a=We.get(e);if(!a)return void o(new Error(`Database "${e}" not initialized`));const s=a.transaction([t],"readonly").objectStore(t).get(r);s.onsuccess=()=>n(s.result),s.onerror=()=>o(new Error(`Get data failed: ${s.error}`))})},exports.getDataByIndex=function(e,t,r,n){return new Promise((o,a)=>{const s=We.get(e);if(!s)return void a(new Error(`Database "${e}" not initialized`));const i=s.transaction([t],"readonly").objectStore(t).index(r).getAll(n);i.onsuccess=()=>o(i.result),i.onerror=()=>a(new Error(`Get data by index failed: ${i.error}`))})},exports.getDataByIndexRange=function(e,t,r,n){return new Promise((o,a)=>{const s=We.get(e);if(!s)return void a(new Error(`Database "${e}" not initialized`));const i=s.transaction([t],"readonly").objectStore(t).index(r).getAll(n);i.onsuccess=()=>o(i.result),i.onerror=()=>a(new Error(`Get data by index range failed: ${i.error}`))})},exports.getDay=P,exports.getDaysAgoStart=z,exports.getHour=R,exports.getMinute=Y,exports.getMonth=A,exports.getSecond=U,exports.getStorageEstimate=async function(){return"storage"in navigator&&"estimate"in navigator.storage?await navigator.storage.estimate():null},exports.getTimestamp=H,exports.getTodayStart=_,exports.getType=B,exports.getYear=j,exports.getYesterdayStart=N,exports.http=p,exports.idleCallback=function(e,t){const r=++d;if("undefined"!=typeof requestIdleCallback){const n=requestIdleCallback(e,t);return l.set(r,n),r}const n=Date.now(),o=t?.timeout??0,a=window.setTimeout(()=>{const t=Date.now()-n,a={didTimeout:o>0&&t>=o,timeRemaining:()=>Math.max(0,50-(Date.now()-n))};l.delete(r),e(a)},1);return l.set(r,a),r},exports.initDB=function(e){return new Promise((t,r)=>{const n=We.get(e.name);if(n)return void t(n);const o=indexedDB.open(e.name,e.version);o.onupgradeneeded=t=>{const r=t.target.result;e.stores.forEach(e=>{r.objectStoreNames.contains(e.name)&&r.deleteObjectStore(e.name);const t=r.createObjectStore(e.name,{keyPath:e.keyPath,autoIncrement:e.autoIncrement||!1});e.indexes&&e.indexes.forEach(e=>{t.createIndex(e.name,e.keyPath,{unique:e.unique||!1})})})},o.onsuccess=r=>{const n=r.target.result;We.set(e.name,n),t(n)},o.onerror=e=>{r(new Error(`Database init failed: ${e.target.error}`))}})},exports.isArray=J,exports.isBankCard=ge,exports.isBoolean=q,exports.isCarNumber=pe,exports.isChinese=fe,exports.isDate=V,exports.isEmail=ae,exports.isEmptyValue=ne,exports.isFunction=G,exports.isIdCard=ie,exports.isIp=ue,exports.isLetter=de,exports.isNotEmpty=oe,exports.isNull=ee,exports.isNullOrUndefined=re,exports.isNumber=W,exports.isNumericString=le,exports.isObject=Z,exports.isPhone=se,exports.isPostalCode=we,exports.isPromise=X,exports.isRegExp=Q,exports.isString=F,exports.isStrongPassword=me,exports.isSymbol=K,exports.isTransportSupported=Fe,exports.isUndefined=te,exports.isUrl=ce,exports.isUsername=he,exports.numberToChinese=D,exports.numericId=De,exports.putData=function(e,t,r){return new Promise((n,o)=>{const a=We.get(e);if(!a)return void o(new Error(`Database "${e}" not initialized`));const s=a.transaction([t],"readwrite").objectStore(t).put(r);s.onsuccess=()=>n(s.result),s.onerror=()=>o(new Error(`Put data failed: ${s.error}`))})},exports.rafInterval=function(e,t){const o=++n;let a=performance.now();return r.set(o,requestAnimationFrame(function n(s){r.has(o)&&(s-a>=t&&(a=s,e()),r.set(o,requestAnimationFrame(n)))})),o},exports.rafTimeout=c,exports.rafTimes=function(e,t,r){const n=++i;let o=0;return s.set(n,{currentRafId:0,cancelled:!1}),s.get(n).currentRafId=c(function a(){const i=s.get(n);i&&!i.cancelled&&(o++,e(o),o<r?i.currentRafId=c(a,t):s.delete(n))},t),n},exports.recursiveInterval=function(e,t){const r=++a;return o.set(r,window.setTimeout(function n(){o.has(r)&&(e(),o.set(r,window.setTimeout(n,t)))},t)),r},exports.resizeAndCompress=Ze,exports.runInWorker=function(e,t,r){const n=ze(e),{timeout:o}=r||{};return new Promise((e,r)=>{let a;o&&(a=window.setTimeout(()=>{n.terminate(),r(new Error("Worker 执行超时"))},o)),n.run(t).then(t=>{a&&clearTimeout(a),n.terminate(),e(t)}).catch(e=>{a&&clearTimeout(a),n.terminate(),r(e)})})},exports.safe=Ne,exports.safeExecute=Ye,exports.safeExecuteAsync=Ue,exports.safeGet=He,exports.safeJsonParse=ke,exports.safeJsonStringify=je,exports.safeLocalStorage=Pe,exports.safeSessionStorage=Re,exports.safeSet=_e,exports.shortId=Ie,exports.smartCompress=async function(e,t,r=.85){if("image/webp"===e.type){const r=await Ge(e);if(!(r.width>t||r.height>t))return{blob:e,width:r.width,height:r.height,originalSize:e.size,compressedSize:e.size,ratio:1}}return Ze(e,t,r)},exports.snowflakeId=Oe,exports.timestampId=$e,exports.toWebP=async function(e,t=.85){return(await Je(e,{maxWidth:1/0,maxHeight:1/0,format:"image/webp",quality:t})).blob},exports.uid=Ce,exports.uuid=Se,exports.validate=ye;
|
package/lib/index.d.ts
CHANGED
|
@@ -1831,5 +1831,27 @@ declare function resizeAndCompress(source: File | Blob | HTMLImageElement, maxSi
|
|
|
1831
1831
|
*/
|
|
1832
1832
|
declare function smartCompress(source: File | Blob, maxSize: number, quality?: number): Promise<ImageCompressResult>;
|
|
1833
1833
|
|
|
1834
|
-
|
|
1834
|
+
/**
|
|
1835
|
+
* 加密解密工具函数
|
|
1836
|
+
* 基于 Web Crypto API 实现,浏览器原生支持
|
|
1837
|
+
*
|
|
1838
|
+
* 注意:需要在安全上下文中使用(HTTPS 或 localhost)
|
|
1839
|
+
*/
|
|
1840
|
+
/**
|
|
1841
|
+
* AES-GCM 解密
|
|
1842
|
+
*
|
|
1843
|
+
* @description 使用 AES-256-GCM 算法解密 Base64 编码的密文
|
|
1844
|
+
* @param encryptedBase64 - Base64 编码的密文(格式:nonce(12字节) + ciphertext + tag)
|
|
1845
|
+
* @param key - 32 字节的密钥字符串
|
|
1846
|
+
* @returns 解密后的数据(自动 JSON.parse)
|
|
1847
|
+
*
|
|
1848
|
+
* @example
|
|
1849
|
+
* ```ts
|
|
1850
|
+
* const data = await aesGcmDecrypt(encryptedData, 'your-32-bytes-secret-key-here!!')
|
|
1851
|
+
* console.log(data) // { accessKeyId: '...', ... }
|
|
1852
|
+
* ```
|
|
1853
|
+
*/
|
|
1854
|
+
declare function aesGcmDecrypt<T = unknown>(encryptedBase64: string, key: string): Promise<T>;
|
|
1855
|
+
|
|
1856
|
+
export { HttpError, addData, aesGcmDecrypt, alphanumericId, binaryId, cancelIdleCallback, cancelRafInterval, cancelRafTimeout, cancelRafTimes, cancelRecursiveInterval, clearStore, closeAllDB, closeDB, compressImage, countData, createHttpClient, createTransport, createWebSocket, createWorker, deleteData, deleteDataByIndex, deleteDatabase, format, formatDate, formatDateOnly, formatDateTime, formatDateTimeColon, formatHourMinute, formatNumber, formatRelativeTime, formatStorageSize, formatTimeOnly, formatYearMonth, getAllData, getDB, getData, getDataByIndex, getDataByIndexRange, getDay, getDaysAgoStart, getHour, getMinute, getMonth, getSecond, getStorageEstimate, getTimestamp, getTodayStart, getType, getYear, getYesterdayStart, http, idleCallback, initDB, isArray, isBankCard, isBoolean, isCarNumber, isChinese, isDate, isEmail, isEmptyValue, isFunction, isIdCard, isIp, isLetter, isNotEmpty, isNull, isNullOrUndefined, isNumber, isNumericString, isObject, isPhone, isPostalCode, isPromise, isRegExp, isString, isStrongPassword, isSymbol, isTransportSupported, isUndefined, isUrl, isUsername, numberToChinese, numericId, putData, rafInterval, rafTimeout, rafTimes, recursiveInterval, resizeAndCompress, runInWorker, safe, safeExecute, safeExecuteAsync, safeGet, safeJsonParse, safeJsonStringify, safeLocalStorage, safeSessionStorage, safeSet, shortId, smartCompress, snowflakeId, timestampId, toWebP, uid, uuid, validate };
|
|
1835
1857
|
export type { AbortablePromise, DBConfig, DateInput, FormatNumberOptions, HttpClientConfig, HttpClientInstance, HttpMethod, ImageCompressOptions, ImageCompressResult, IndexConfig, InterceptorManager, RequestConfig, RequestInterceptor, ResponseInterceptor, StoreConfig, TransportConfig, TransportInstance, TransportStream, UploadConfig, WebSocketConfig, WebSocketInstance, WebSocketState, WorkerInstance, WorkerOptions };
|
package/lib/index.esm.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=new Map;let t=0;const n=new Map;let r=0;const o=new Map;let a=0;const i=new Map;let s=0;function c(n,r){const o=++t,a=performance.now();return e.set(o,requestAnimationFrame(function t(i){e.has(o)&&(i-a>=r?(e.delete(o),n()):e.set(o,requestAnimationFrame(t)))})),o}function u(t){const n=e.get(t);void 0!==n&&(cancelAnimationFrame(n),e.delete(t))}function l(e,t){const o=++r;let a=performance.now();return n.set(o,requestAnimationFrame(function r(i){n.has(o)&&(i-a>=t&&(a=i,e()),n.set(o,requestAnimationFrame(r)))})),o}function d(e){const t=n.get(e);void 0!==t&&(cancelAnimationFrame(t),n.delete(e))}function f(e,t){const n=++a;return o.set(n,window.setTimeout(function r(){o.has(n)&&(e(),o.set(n,window.setTimeout(r,t)))},t)),n}function h(e){const t=o.get(e);void 0!==t&&(clearTimeout(t),o.delete(e))}function m(e,t,n){const r=++s;let o=0;i.set(r,{currentRafId:0,cancelled:!1});return i.get(r).currentRafId=c(function a(){const s=i.get(r);s&&!s.cancelled&&(o++,e(o),o<n?s.currentRafId=c(a,t):i.delete(r))},t),r}function g(e){const t=i.get(e);t&&(t.cancelled=!0,u(t.currentRafId),i.delete(e))}const w=new Map;let y=0;function p(e,t){const n=++y;if("undefined"!=typeof requestIdleCallback){const r=requestIdleCallback(e,t);return w.set(n,r),n}const r=Date.now(),o=t?.timeout??0,a=window.setTimeout(()=>{const t=Date.now()-r,a={didTimeout:o>0&&t>=o,timeRemaining:()=>Math.max(0,50-(Date.now()-r))};w.delete(n),e(a)},1);return w.set(n,a),n}function b(e){const t=w.get(e);void 0!==t&&(void 0!==window.cancelIdleCallback?window.cancelIdleCallback(t):clearTimeout(t),w.delete(e))}class $ extends Error{constructor(e,t,n){super(e),this.name="HttpError",this.status=t,this.response=n}}function S(){const e=[];return{handlers:e,use:t=>(e.push(t),e.length-1),eject(t){e[t]&&e.splice(t,1)}}}function M(e={}){const t={baseURL:e.baseURL||"",timeout:e.timeout||15e3,headers:e.headers||{},withCredentials:e.withCredentials??!1,retry:e.retry??0},n={request:S(),response:S()};async function r(e,t){const r=function(e,t){if(!t||0===Object.keys(t).length)return e;const n=Object.keys(t).filter(e=>void 0!==t[e]&&null!==t[e]).map(e=>`${encodeURIComponent(e)}=${encodeURIComponent(t[e])}`).join("&");return e+(e.includes("?")?"&":"?")+n}(e.url,e.params),o=function(e){const t={method:e.method||"GET",headers:{"Content-Type":"application/json;charset=UTF-8",...e.headers},credentials:e.withCredentials?"include":"same-origin"};return e.data&&(e.data instanceof FormData?(t.body=e.data,delete t.headers["Content-Type"]):"object"==typeof e.data?t.body=JSON.stringify(e.data):t.body=e.data),t}(e),a=c(()=>t.abort(),e.timeout);try{const i=await fetch(r,{...o,signal:t.signal});if(u(a),!i.ok)throw new $(`请求失败 (${i.status})`,i.status,i);let s=await async function(e,t){switch(t){case"blob":return e.blob();case"text":return e.text();case"arrayBuffer":return e.arrayBuffer();default:return e.json()}}(i,e.responseType);for(const e of n.response.handlers)if(e.onFulfilled)try{s=await e.onFulfilled(s)}catch(t){if(e.onRejected)return await e.onRejected(t);throw t}return s}catch(e){if(u(a),"AbortError"===e.name)throw new $("请求超时或已取消");throw e}}function o(e){const o=new AbortController,a=(async()=>{let a=function(e){return{...e,url:t.baseURL+e.url,timeout:e.timeout||t.timeout,headers:{...t.headers,...e.headers},withCredentials:e.withCredentials??t.withCredentials}}(e);for(const e of n.request.handlers)if(e.onFulfilled)try{a=await e.onFulfilled(a)}catch(t){throw e.onRejected&&await e.onRejected(t),t}a.signal&&a.signal.addEventListener("abort",()=>o.abort());const i=t.retry||0;let s;for(let e=0;e<=i;e++)try{return await r(a,o)}catch(t){if(s=t,"请求超时或已取消"===t.message||o.signal.aborted)break;if(e===i)break}for(const e of n.response.handlers)if(e.onRejected)return await e.onRejected(s);throw s})();return a.abort=()=>o.abort(),a}return{interceptors:n,request:o,get:function(e,t,n){return o({...n,url:e,method:"GET",params:t})},post:function(e,t,n){return o({...n,url:e,method:"POST",data:t})},put:function(e,t,n){return o({...n,url:e,method:"PUT",data:t})},delete:function(e,t,n){return o({...n,url:e,method:"DELETE",params:t})},options:function(e,t){return o({...t,url:e,method:"OPTIONS"})},patch:function(e,t,n){return o({...n,url:e,method:"PATCH",data:t})},upload:function(e){const{url:n,file:r,name:a="file",data:i={},headers:s={},onProgress:c,signal:u}=e,l=new FormData;if(l.append(a,r),Object.keys(i).forEach(e=>l.append(e,i[e])),!c)return o({url:n,method:"POST",data:l,headers:s,signal:u});const d=new AbortController;u&&u.addEventListener("abort",()=>d.abort());const f=function(e,t,n,r,o){return new Promise((a,i)=>{const s=new XMLHttpRequest;s.upload.addEventListener("progress",e=>{e.lengthComputable&&r(Math.round(e.loaded/e.total*100))}),s.addEventListener("load",()=>{if(s.status>=200&&s.status<300)try{a(JSON.parse(s.responseText))}catch{a(s.responseText)}else i(new $(`上传失败 (${s.status})`,s.status))}),s.addEventListener("error",()=>i(new $("上传失败"))),o&&o.addEventListener("abort",()=>{s.abort(),i(new $("上传已取消"))}),s.open("POST",e),Object.keys(n).forEach(e=>s.setRequestHeader(e,n[e])),s.send(t)})}(t.baseURL+n,l,s,c,d.signal);return f.abort=()=>d.abort(),f}}}const D=M();"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;function v(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var x={exports:{}},E=v(x.exports=function(){var e=1e3,t=6e4,n=36e5,r="millisecond",o="second",a="minute",i="hour",s="day",c="week",u="month",l="quarter",d="year",f="date",h="Invalid Date",m=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,g=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,w={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(e){var t=["th","st","nd","rd"],n=e%100;return"["+e+(t[(n-20)%10]||t[n]||t[0])+"]"}},y=function(e,t,n){var r=String(e);return!r||r.length>=t?e:""+Array(t+1-r.length).join(n)+e},p={s:y,z:function(e){var t=-e.utcOffset(),n=Math.abs(t),r=Math.floor(n/60),o=n%60;return(t<=0?"+":"-")+y(r,2,"0")+":"+y(o,2,"0")},m:function e(t,n){if(t.date()<n.date())return-e(n,t);var r=12*(n.year()-t.year())+(n.month()-t.month()),o=t.clone().add(r,u),a=n-o<0,i=t.clone().add(r+(a?-1:1),u);return+(-(r+(n-o)/(a?o-i:i-o))||0)},a:function(e){return e<0?Math.ceil(e)||0:Math.floor(e)},p:function(e){return{M:u,y:d,w:c,d:s,D:f,h:i,m:a,s:o,ms:r,Q:l}[e]||String(e||"").toLowerCase().replace(/s$/,"")},u:function(e){return void 0===e}},b="en",$={};$[b]=w;var S="$isDayjsObject",M=function(e){return e instanceof E||!(!e||!e[S])},D=function e(t,n,r){var o;if(!t)return b;if("string"==typeof t){var a=t.toLowerCase();$[a]&&(o=a),n&&($[a]=n,o=a);var i=t.split("-");if(!o&&i.length>1)return e(i[0])}else{var s=t.name;$[s]=t,o=s}return!r&&o&&(b=o),o||!r&&b},v=function(e,t){if(M(e))return e.clone();var n="object"==typeof t?t:{};return n.date=e,n.args=arguments,new E(n)},x=p;x.l=D,x.i=M,x.w=function(e,t){return v(e,{locale:t.$L,utc:t.$u,x:t.$x,$offset:t.$offset})};var E=function(){function w(e){this.$L=D(e.locale,null,!0),this.parse(e),this.$x=this.$x||e.x||{},this[S]=!0}var y=w.prototype;return y.parse=function(e){this.$d=function(e){var t=e.date,n=e.utc;if(null===t)return new Date(NaN);if(x.u(t))return new Date;if(t instanceof Date)return new Date(t);if("string"==typeof t&&!/Z$/i.test(t)){var r=t.match(m);if(r){var o=r[2]-1||0,a=(r[7]||"0").substring(0,3);return n?new Date(Date.UTC(r[1],o,r[3]||1,r[4]||0,r[5]||0,r[6]||0,a)):new Date(r[1],o,r[3]||1,r[4]||0,r[5]||0,r[6]||0,a)}}return new Date(t)}(e),this.init()},y.init=function(){var e=this.$d;this.$y=e.getFullYear(),this.$M=e.getMonth(),this.$D=e.getDate(),this.$W=e.getDay(),this.$H=e.getHours(),this.$m=e.getMinutes(),this.$s=e.getSeconds(),this.$ms=e.getMilliseconds()},y.$utils=function(){return x},y.isValid=function(){return!(this.$d.toString()===h)},y.isSame=function(e,t){var n=v(e);return this.startOf(t)<=n&&n<=this.endOf(t)},y.isAfter=function(e,t){return v(e)<this.startOf(t)},y.isBefore=function(e,t){return this.endOf(t)<v(e)},y.$g=function(e,t,n){return x.u(e)?this[t]:this.set(n,e)},y.unix=function(){return Math.floor(this.valueOf()/1e3)},y.valueOf=function(){return this.$d.getTime()},y.startOf=function(e,t){var n=this,r=!!x.u(t)||t,l=x.p(e),h=function(e,t){var o=x.w(n.$u?Date.UTC(n.$y,t,e):new Date(n.$y,t,e),n);return r?o:o.endOf(s)},m=function(e,t){return x.w(n.toDate()[e].apply(n.toDate("s"),(r?[0,0,0,0]:[23,59,59,999]).slice(t)),n)},g=this.$W,w=this.$M,y=this.$D,p="set"+(this.$u?"UTC":"");switch(l){case d:return r?h(1,0):h(31,11);case u:return r?h(1,w):h(0,w+1);case c:var b=this.$locale().weekStart||0,$=(g<b?g+7:g)-b;return h(r?y-$:y+(6-$),w);case s:case f:return m(p+"Hours",0);case i:return m(p+"Minutes",1);case a:return m(p+"Seconds",2);case o:return m(p+"Milliseconds",3);default:return this.clone()}},y.endOf=function(e){return this.startOf(e,!1)},y.$set=function(e,t){var n,c=x.p(e),l="set"+(this.$u?"UTC":""),h=(n={},n[s]=l+"Date",n[f]=l+"Date",n[u]=l+"Month",n[d]=l+"FullYear",n[i]=l+"Hours",n[a]=l+"Minutes",n[o]=l+"Seconds",n[r]=l+"Milliseconds",n)[c],m=c===s?this.$D+(t-this.$W):t;if(c===u||c===d){var g=this.clone().set(f,1);g.$d[h](m),g.init(),this.$d=g.set(f,Math.min(this.$D,g.daysInMonth())).$d}else h&&this.$d[h](m);return this.init(),this},y.set=function(e,t){return this.clone().$set(e,t)},y.get=function(e){return this[x.p(e)]()},y.add=function(r,l){var f,h=this;r=Number(r);var m=x.p(l),g=function(e){var t=v(h);return x.w(t.date(t.date()+Math.round(e*r)),h)};if(m===u)return this.set(u,this.$M+r);if(m===d)return this.set(d,this.$y+r);if(m===s)return g(1);if(m===c)return g(7);var w=(f={},f[a]=t,f[i]=n,f[o]=e,f)[m]||1,y=this.$d.getTime()+r*w;return x.w(y,this)},y.subtract=function(e,t){return this.add(-1*e,t)},y.format=function(e){var t=this,n=this.$locale();if(!this.isValid())return n.invalidDate||h;var r=e||"YYYY-MM-DDTHH:mm:ssZ",o=x.z(this),a=this.$H,i=this.$m,s=this.$M,c=n.weekdays,u=n.months,l=n.meridiem,d=function(e,n,o,a){return e&&(e[n]||e(t,r))||o[n].slice(0,a)},f=function(e){return x.s(a%12||12,e,"0")},m=l||function(e,t,n){var r=e<12?"AM":"PM";return n?r.toLowerCase():r};return r.replace(g,function(e,r){return r||function(e){switch(e){case"YY":return String(t.$y).slice(-2);case"YYYY":return x.s(t.$y,4,"0");case"M":return s+1;case"MM":return x.s(s+1,2,"0");case"MMM":return d(n.monthsShort,s,u,3);case"MMMM":return d(u,s);case"D":return t.$D;case"DD":return x.s(t.$D,2,"0");case"d":return String(t.$W);case"dd":return d(n.weekdaysMin,t.$W,c,2);case"ddd":return d(n.weekdaysShort,t.$W,c,3);case"dddd":return c[t.$W];case"H":return String(a);case"HH":return x.s(a,2,"0");case"h":return f(1);case"hh":return f(2);case"a":return m(a,i,!0);case"A":return m(a,i,!1);case"m":return String(i);case"mm":return x.s(i,2,"0");case"s":return String(t.$s);case"ss":return x.s(t.$s,2,"0");case"SSS":return x.s(t.$ms,3,"0");case"Z":return o}return null}(e)||o.replace(":","")})},y.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},y.diff=function(r,f,h){var m,g=this,w=x.p(f),y=v(r),p=(y.utcOffset()-this.utcOffset())*t,b=this-y,$=function(){return x.m(g,y)};switch(w){case d:m=$()/12;break;case u:m=$();break;case l:m=$()/3;break;case c:m=(b-p)/6048e5;break;case s:m=(b-p)/864e5;break;case i:m=b/n;break;case a:m=b/t;break;case o:m=b/e;break;default:m=b}return h?m:x.a(m)},y.daysInMonth=function(){return this.endOf(u).$D},y.$locale=function(){return $[this.$L]},y.locale=function(e,t){if(!e)return this.$L;var n=this.clone(),r=D(e,t,!0);return r&&(n.$L=r),n},y.clone=function(){return x.w(this.$d,this)},y.toDate=function(){return new Date(this.valueOf())},y.toJSON=function(){return this.isValid()?this.toISOString():null},y.toISOString=function(){return this.$d.toISOString()},y.toString=function(){return this.$d.toUTCString()},w}(),O=E.prototype;return v.prototype=O,[["$ms",r],["$s",o],["$m",a],["$H",i],["$W",s],["$M",u],["$y",d],["$D",f]].forEach(function(e){O[e[1]]=function(t){return this.$g(t,e[0],e[1])}}),v.extend=function(e,t){return e.$i||(e(t,E,v),e.$i=!0),v},v.locale=D,v.isDayjs=M,v.unix=function(e){return v(1e3*e)},v.en=$[b],v.Ls=$,v.p={},v}());function O(e,t={}){const{decimals:n=0,prefix:r="",suffix:o=""}=t,a="string"==typeof e?parseFloat(e):e;if(isNaN(a))return"";const i=a.toFixed(n),[s,c]=i.split("."),u=s.replace(/\B(?=(\d{3})+(?!\d))/g,",");return r+(c?`${u}.${c}`:u)+o}const T=["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"],j=["","拾","佰","仟"],k=["","万","亿","兆"];function C(e){const t="string"==typeof e?parseFloat(e):e;if(isNaN(t))return"";if(0===t)return"零元整";const n=t<0,r=Math.abs(t),[o,a=""]=r.toFixed(2).split(".");let i="";if("0"!==o){const e=o,t=e.length;let n=!1;for(let r=0;r<t;r++){const o=parseInt(e[r]),a=t-r-1,s=a%4,c=Math.floor(a/4);0===o?(n=!0,0===s&&c>0&&(i+=k[c])):(n&&(i+=T[0],n=!1),i+=T[o]+j[s],0===s&&c>0&&(i+=k[c]))}i+="元"}const s=parseInt(a[0]||"0"),c=parseInt(a[1]||"0");return 0===s&&0===c?i+="整":(s>0?i+=T[s]+"角":c>0&&(i+="零"),c>0&&(i+=T[c]+"分")),n?"负"+i:i}function Y(e){const t=E(e),n=E(),r=n.diff(t,"second"),o=n.diff(t,"minute"),a=n.diff(t,"hour"),i=n.diff(t,"day");return r<60?"刚刚":o<60?`${o}分钟前`:a<24?`${a}小时前`:i<7?`${i}天前`:t.year()===n.year()?t.format("M月D日"):t.format("YYYY年M月D日")}function I(e,t="YYYY-MM-DD HH:mm:ss"){return E(e).format(t)}function P(e){return E(e).format("YYYY:MM:DD HH:mm:ss")}function R(e){return E(e).format("YYYY-MM-DD HH:mm:ss")}function _(e){return E(e).format("YYYY-MM-DD")}function A(e){return E(e).format("HH:mm:ss")}function H(e){return E(e).format("YYYY-MM")}function U(e){return E(e).format("HH:mm")}function z(e){return E(e).format("YYYY")}function L(e){return E(e).format("MM")}function N(e){return E(e).format("DD")}function F(e){return E(e).format("HH")}function W(e){return E(e).format("mm")}function B(e){return E(e).format("ss")}function q(){return Date.now()}function Z(){return E().startOf("day").valueOf()}function J(){return E().subtract(1,"day").startOf("day").valueOf()}function G(e){return E().subtract(e,"day").startOf("day").valueOf()}const V={formatNumber:O,numberToChinese:C,formatRelativeTime:Y,formatDate:I,formatDateTimeColon:P,formatDateTime:R,formatDateOnly:_,formatTimeOnly:A,formatYearMonth:H,formatHourMinute:U,getYear:z,getMonth:L,getDay:N,getHour:F,getMinute:W,getSecond:B,getTimestamp:q,getTodayStart:Z,getYesterdayStart:J,getDaysAgoStart:G};function Q(e){return Object.prototype.toString.call(e).slice(8,-1)}function X(e){return"String"===Q(e)}function K(e){return"Number"===Q(e)&&!isNaN(e)}function ee(e){return"Boolean"===Q(e)}function te(e){return"Array"===Q(e)}function ne(e){return"Object"===Q(e)}function re(e){return"Function"===Q(e)}function oe(e){return"Date"===Q(e)}function ae(e){return"RegExp"===Q(e)}function ie(e){return"Symbol"===Q(e)}function se(e){return"Promise"===Q(e)}function ce(e){return"Null"===Q(e)}function ue(e){return"Undefined"===Q(e)}function le(e){return ce(e)||ue(e)}function de(e){return!!le(e)||(X(e)?""===e.trim():te(e)?0===e.length:!!ne(e)&&0===Object.keys(e).length)}function fe(e){return!de(e)}function he(e){return/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}$/.test(e)}function me(e){return/^1[3-9]\d{9}$/.test(e)}function ge(e){return/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(e)}function we(e){return/^(https?:\/\/)?([\da-z.-]+)\.([a-z.]{2,6})([/\w .-]*)*\/?(\?[;&a-z\d%_.~+=-]*)?(\#[-a-z\d_]*)?$/i.test(e)}function ye(e){return/^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$/.test(e)}function pe(e){return/^\d+$/.test(e)}function be(e){return/^[A-Za-z]+$/.test(e)}function $e(e){return/^[\u4e00-\u9fa5]+$/.test(e)}function Se(e){return/^[a-zA-Z][a-zA-Z0-9_]{3,15}$/.test(e)}function Me(e){return/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{6,20}$/.test(e)}function De(e){return/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-HJ-NP-Z][A-HJ-NP-Z0-9]{4,5}[A-HJ-NP-Z0-9挂学警港澳]$/.test(e)}function ve(e){return/^\d{16,19}$/.test(e)}function xe(e){return/^\d{6}$/.test(e)}const Ee={getType:Q,isString:X,isNumber:K,isBoolean:ee,isArray:te,isObject:ne,isFunction:re,isDate:oe,isRegExp:ae,isSymbol:ie,isPromise:se,isNull:ce,isUndefined:ue,isNullOrUndefined:le,isEmptyValue:de,isNotEmpty:fe,isEmail:he,isPhone:me,isIdCard:ge,isUrl:we,isIp:ye,isNumericString:pe,isLetter:be,isChinese:$e,isUsername:Se,isStrongPassword:Me,isCarNumber:De,isBankCard:ve,isPostalCode:xe},Oe="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",Te="0123456789";function je(e=!1){if("undefined"!=typeof crypto&&crypto.randomUUID){const t=crypto.randomUUID();return e?t.replace(/-/g,""):t}const t="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)});return e?t.replace(/-/g,""):t}function ke(e=6){return Date.now().toString()+Ye(e)}function Ce(e=9){const t=Math.max(1,Math.min(20,e));let n=Te[Math.floor(9*Math.random())+1];for(let e=1;e<t;e++)n+=Te[Math.floor(10*Math.random())];return n}function Ye(e=8){let t="";for(let n=0;n<e;n++)t+=Oe[Math.floor(62*Math.random())];return t}function Ie(e=16){const t=Math.ceil(e/2);if("undefined"!=typeof crypto&&crypto.getRandomValues){const n=new Uint8Array(t);crypto.getRandomValues(n);let r="";for(let e=0;e<n.length;e++)r+=n[e].toString(16).padStart(2,"0");return r.slice(0,e)}let n="";for(let t=0;t<e;t++)n+="0123456789abcdef"[Math.floor(16*Math.random())];return n}let Pe=-1,Re=0;function _e(){let e=Date.now();if(e===Pe){if(Re=Re+1&4095,0===Re)for(;e<=Pe;)e=Date.now()}else Re=0;return Pe=e,e.toString()+Re.toString().padStart(6,"0")}function Ae(e=8){let t="",n=1e6*Date.now()+Math.floor(1e6*Math.random());for(;n>0;)t=Oe[n%62]+t,n=Math.floor(n/62);for(;t.length<e;)t=Oe[Math.floor(62*Math.random())]+t;return t}const He={uuid:je,timestampId:ke,numericId:Ce,alphanumericId:Ye,binaryId:Ie,snowflakeId:_e,shortId:Ae};function Ue(e){const{url:t,protocols:n,autoConnect:r=!0,reconnect:o=!0,reconnectInterval:a=3e3,reconnectMaxTimes:i=5,heartbeat:s=!1,heartbeatInterval:l=3e4,heartbeatMessage:d="ping",messageQueue:f=!1,messageQueueMax:h=100}=e;let m=null,g="disconnected",w=0,y=null,p=null,b=!1;const $=[],S=new Set,M=new Set,D=new Set,v=new Set,x=new Set;function E(){s&&(O(),p=c(()=>{if("connected"===g&&m){const e="function"==typeof d?d():d;m.send(e),E()}},l))}function O(){p&&(u(p),p=null)}function T(){o&&!b&&(-1!==i&&w>=i||(w++,x.forEach(e=>e(w)),y=c(()=>{j()},a)))}function j(){if("connecting"!==g&&"connected"!==g){b=!1,g="connecting";try{m=n?new WebSocket(t,n):new WebSocket(t),m.onopen=e=>{g="connected",w=0,E(),function(){for(;$.length>0&&"connected"===g&&m;){const e=$.shift();m.send(e)}}(),S.forEach(t=>t(e))},m.onmessage=e=>{let t=e.data;try{t=JSON.parse(e.data)}catch{}M.forEach(n=>n(t,e))},m.onerror=e=>{D.forEach(t=>t(e))},m.onclose=e=>{g="disconnected",m=null,O(),v.forEach(t=>t(e)),T()}}catch(e){g="disconnected",T()}}}return r&&j(),{getState:()=>g,getSocket:()=>m,connect:j,disconnect:function(e=1e3,t="manual close"){b=!0,g="disconnecting",y&&(u(y),y=null),O(),m&&(m.close(e,t),m=null),g="disconnected"},send:function(e){const t="object"==typeof e?JSON.stringify(e):e;"connected"===g&&m?m.send(t):f&&$.length<h&&$.push(t)},onOpen:function(e){return S.add(e),()=>S.delete(e)},onMessage:function(e){return M.add(e),()=>M.delete(e)},onError:function(e){return D.add(e),()=>D.delete(e)},onClose:function(e){return v.add(e),()=>v.delete(e)},onReconnect:function(e){return x.add(e),()=>x.delete(e)},offAll:function(){S.clear(),M.clear(),D.clear(),v.clear(),x.clear()}}}function ze(e,t=null){try{return JSON.parse(e)}catch{return t}}function Le(e,t=null,n){try{return JSON.stringify(e,null,n)}catch{return t}}function Ne(e){return{get(t,n=null){try{if(!e)return n;const r=e.getItem(t);return null===r?n:ze(r,n)}catch{return n}},getString(t,n=""){try{return e?e.getItem(t)??n:n}catch{return n}},set(t,n){try{if(!e)return!1;const r=Le(n);return null!==r&&(e.setItem(t,r),!0)}catch{return!1}},remove(t){try{return!!e&&(e.removeItem(t),!0)}catch{return!1}},clear(){try{return!!e&&(e.clear(),!0)}catch{return!1}},has(t){try{return!!e&&null!==e.getItem(t)}catch{return!1}},keys(){try{if(!e)return[];const t=[];for(let n=0;n<e.length;n++){const r=e.key(n);null!==r&&t.push(r)}return t}catch{return[]}},size(){try{return e?e.length:0}catch{return 0}}}}const Fe=Ne(function(){try{return"undefined"!=typeof window?window.localStorage:null}catch{return null}}()),We=Ne(function(){try{return"undefined"!=typeof window?window.sessionStorage:null}catch{return null}}());function Be(e,t){try{return e()}catch{return t}}async function qe(e,t){try{return await e()}catch{return t}}function Ze(e,t,n=void 0){try{if(null==e)return n;const r=t.replace(/\[(\d+)\]/g,".$1").split(".");let o=e;for(const e of r){if(null==o)return n;o=o[e]}return void 0===o?n:o}catch{return n}}function Je(e,t,n){try{if(null==e||"object"!=typeof e)return!1;const r=t.replace(/\[(\d+)\]/g,".$1").split(".");let o=e;for(let e=0;e<r.length-1;e++){const t=r[e],n=r[e+1],a=/^\d+$/.test(n);null==o[t]&&(o[t]=a?[]:{}),o=o[t]}return o[r[r.length-1]]=n,!0}catch{return!1}}const Ge={jsonParse:ze,jsonStringify:Le,localStorage:Fe,sessionStorage:We,execute:Be,executeAsync:qe,get:Ze,set:Je};function Ve(e){const t=function(e){const t=`\n const fn = ${e.toString()};\n self.onmessage = async (e) => {\n try {\n const result = await fn(e.data);\n self.postMessage({ type: '__result__', data: result });\n } catch (error) {\n self.postMessage({ type: '__error__', error: error.message });\n }\n };\n `,n=new Blob([t],{type:"application/javascript"});return URL.createObjectURL(n)}(e),n=new Worker(t),r=new Set,o=new Set;let a=null,i=null;return n.onmessage=e=>{const{type:t,data:n,error:o}=e.data;"__result__"===t?(a?.(n),a=null,i=null):"__error__"===t?(i?.(new Error(o)),a=null,i=null):r.forEach(t=>t(e.data))},n.onerror=e=>{i?.(e),a=null,i=null,o.forEach(t=>t(e))},{run:e=>new Promise((t,r)=>{a=t,i=r,n.postMessage(e)}),postMessage(e){n.postMessage(e)},onMessage:e=>(r.add(e),()=>r.delete(e)),onError:e=>(o.add(e),()=>o.delete(e)),terminate(){n.terminate(),URL.revokeObjectURL(t),r.clear(),o.clear()}}}function Qe(e,t,n){const r=Ve(e),{timeout:o}=n||{};return new Promise((e,n)=>{let a;o&&(a=window.setTimeout(()=>{r.terminate(),n(new Error("Worker 执行超时"))},o)),r.run(t).then(t=>{a&&clearTimeout(a),r.terminate(),e(t)}).catch(e=>{a&&clearTimeout(a),r.terminate(),n(e)})})}const Xe=new TextEncoder;function Ke(e,t){const n=new Set;let r=null,o=!1;if(e){const t=e.getReader();(async()=>{try{for(;!o;){const{value:e,done:r}=await t.read();if(r)break;e&&n.forEach(t=>t(e))}}catch{}})()}return{async send(e){if(!t||o)return;r||(r=t.getWriter());const n="string"==typeof e?Xe.encode(e):e;await r.write(n)},onMessage:e=>(n.add(e),()=>n.delete(e)),close(){o=!0,r?.close(),n.clear()},getReadable:()=>e,getWritable:()=>t}}function et(){return"undefined"!=typeof WebTransport}function tt(e){const{url:t,allowPooling:n,congestionControl:r}=e;if(!et())throw new Error("当前浏览器不支持 WebTransport");let o="connecting",a=null;const i=new Set,s=new Set,c=new Set,u=new Set,l=new Set,d={};return void 0!==n&&(d.allowPooling=n),r&&(d.congestionControl=r),a=new WebTransport(t,d),a.closed.then(e=>{o="closed",u.forEach(t=>t({closeCode:e.closeCode??0,reason:e.reason??""}))}).catch(e=>{o="failed",l.forEach(t=>t(e))}),(async()=>{try{const e=a.datagrams.readable.getReader();for(;"connecting"===o||"connected"===o;){const{value:t,done:n}=await e.read();if(n)break;t&&i.forEach(e=>e(t))}}catch{}})(),(async()=>{try{const e=a.incomingBidirectionalStreams.getReader();for(;"connecting"===o||"connected"===o;){const{value:t,done:n}=await e.read();if(n)break;if(t){const e=Ke(t.readable,t.writable);s.forEach(t=>t(e))}}}catch{}})(),(async()=>{try{const e=a.incomingUnidirectionalStreams.getReader();for(;"connecting"===o||"connected"===o;){const{value:t,done:n}=await e.read();if(n)break;if(t){const e=Ke(t,null);c.forEach(t=>t(e))}}}catch{}})(),{async ready(){await a.ready,o="connected"},getState:()=>o,sendDatagram(e){if(!a||"connected"!==o)return;const t="string"==typeof e?Xe.encode(e):e,n=a.datagrams.writable.getWriter();n.write(t),n.releaseLock()},onDatagram:e=>(i.add(e),()=>i.delete(e)),async createBidirectionalStream(){if(!a||"connected"!==o)throw new Error("连接未就绪");const e=await a.createBidirectionalStream();return Ke(e.readable,e.writable)},async createUnidirectionalStream(){if(!a||"connected"!==o)throw new Error("连接未就绪");return Ke(null,await a.createUnidirectionalStream())},onBidirectionalStream:e=>(s.add(e),()=>s.delete(e)),onUnidirectionalStream:e=>(c.add(e),()=>c.delete(e)),onClose:e=>(u.add(e),()=>u.delete(e)),onError:e=>(l.add(e),()=>l.delete(e)),close(e){a&&(a.close(e),o="closed",i.clear(),s.clear(),c.clear())},getTransport:()=>a}}new TextDecoder;const nt=new Map;function rt(e){return new Promise((t,n)=>{const r=nt.get(e.name);if(r)return void t(r);const o=indexedDB.open(e.name,e.version);o.onupgradeneeded=t=>{const n=t.target.result;e.stores.forEach(e=>{n.objectStoreNames.contains(e.name)&&n.deleteObjectStore(e.name);const t=n.createObjectStore(e.name,{keyPath:e.keyPath,autoIncrement:e.autoIncrement||!1});e.indexes&&e.indexes.forEach(e=>{t.createIndex(e.name,e.keyPath,{unique:e.unique||!1})})})},o.onsuccess=n=>{const r=n.target.result;nt.set(e.name,r),t(r)},o.onerror=e=>{n(new Error(`Database init failed: ${e.target.error}`))}})}function ot(e){return nt.get(e)}function at(e){const t=nt.get(e);t&&(t.close(),nt.delete(e))}function it(){nt.forEach((e,t)=>{e.close()}),nt.clear()}function st(e,t,n){return new Promise((r,o)=>{const a=nt.get(e);if(!a)return void o(new Error(`Database "${e}" not initialized`));const i=a.transaction([t],"readwrite").objectStore(t).add(n);i.onsuccess=()=>r(i.result),i.onerror=()=>o(new Error(`Add data failed: ${i.error}`))})}function ct(e,t,n){return new Promise((r,o)=>{const a=nt.get(e);if(!a)return void o(new Error(`Database "${e}" not initialized`));const i=a.transaction([t],"readwrite").objectStore(t).put(n);i.onsuccess=()=>r(i.result),i.onerror=()=>o(new Error(`Put data failed: ${i.error}`))})}function ut(e,t,n){return new Promise((r,o)=>{const a=nt.get(e);if(!a)return void o(new Error(`Database "${e}" not initialized`));const i=a.transaction([t],"readonly").objectStore(t).get(n);i.onsuccess=()=>r(i.result),i.onerror=()=>o(new Error(`Get data failed: ${i.error}`))})}function lt(e,t){return new Promise((n,r)=>{const o=nt.get(e);if(!o)return void r(new Error(`Database "${e}" not initialized`));const a=o.transaction([t],"readonly").objectStore(t).getAll();a.onsuccess=()=>n(a.result),a.onerror=()=>r(new Error(`Get all data failed: ${a.error}`))})}function dt(e,t,n){return new Promise((r,o)=>{const a=nt.get(e);if(!a)return void o(new Error(`Database "${e}" not initialized`));const i=a.transaction([t],"readwrite").objectStore(t).delete(n);i.onsuccess=()=>r(),i.onerror=()=>o(new Error(`Delete data failed: ${i.error}`))})}function ft(e,t){return new Promise((n,r)=>{const o=nt.get(e);if(!o)return void r(new Error(`Database "${e}" not initialized`));const a=o.transaction([t],"readwrite").objectStore(t).clear();a.onsuccess=()=>n(),a.onerror=()=>r(new Error(`Clear store failed: ${a.error}`))})}function ht(e,t,n,r){return new Promise((o,a)=>{const i=nt.get(e);if(!i)return void a(new Error(`Database "${e}" not initialized`));const s=i.transaction([t],"readonly").objectStore(t).index(n).getAll(r);s.onsuccess=()=>o(s.result),s.onerror=()=>a(new Error(`Get data by index failed: ${s.error}`))})}function mt(e,t,n,r){return new Promise((o,a)=>{const i=nt.get(e);if(!i)return void a(new Error(`Database "${e}" not initialized`));const s=i.transaction([t],"readonly").objectStore(t).index(n).getAll(r);s.onsuccess=()=>o(s.result),s.onerror=()=>a(new Error(`Get data by index range failed: ${s.error}`))})}function gt(e,t,n,r){return new Promise((o,a)=>{const i=nt.get(e);if(!i)return void a(new Error(`Database "${e}" not initialized`));const s=i.transaction([t],"readwrite").objectStore(t).index(n).openCursor(r);let c=0;s.onsuccess=e=>{const t=e.target.result;t?(t.delete(),c++,t.continue()):o(c)},s.onerror=()=>a(new Error(`Delete data by index failed: ${s.error}`))})}function wt(e,t){return new Promise((n,r)=>{const o=nt.get(e);if(!o)return void r(new Error(`Database "${e}" not initialized`));const a=o.transaction([t],"readonly").objectStore(t).count();a.onsuccess=()=>n(a.result),a.onerror=()=>r(new Error(`Count data failed: ${a.error}`))})}function yt(e){return new Promise((t,n)=>{at(e);const r=indexedDB.deleteDatabase(e);r.onsuccess=()=>t(),r.onerror=()=>n(new Error(`Delete database failed: ${r.error}`)),r.onblocked=()=>n(new Error("Delete database blocked, please close other tabs using this database"))})}async function pt(){return"storage"in navigator&&"estimate"in navigator.storage?await navigator.storage.estimate():null}function bt(e){if(!e)return"0 B";const t=["B","KB","MB","GB"];let n=e,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r++;return`${n.toFixed(2)} ${t[r]}`}async function $t(e,t={}){const{maxWidth:n=1e3,maxHeight:r=1e3,format:o="image/webp",quality:a=.85}=t;let i=0;(e instanceof File||e instanceof Blob)&&(i=e.size);const s=await vt(e);let{width:c,height:u}=s;if(c>n||u>r){const e=Math.min(n/c,r/u);c=Math.round(c*e),u=Math.round(u*e)}const l=document.createElement("canvas");l.width=c,l.height=u;l.getContext("2d").drawImage(s,0,0,c,u);const d=await function(e,t,n){return new Promise((r,o)=>{e.toBlob(e=>{e?r(e):o(new Error("Canvas 转换失败"))},t,n)})}(l,o,a);return{blob:d,width:c,height:u,originalSize:i,compressedSize:d.size,ratio:i>0?d.size/i:0}}async function St(e,t=.85){return(await $t(e,{maxWidth:1/0,maxHeight:1/0,format:"image/webp",quality:t})).blob}async function Mt(e,t,n=.85){return $t(e,{maxWidth:t,maxHeight:t,format:"image/webp",quality:n})}async function Dt(e,t,n=.85){if("image/webp"===e.type){const n=await vt(e);if(!(n.width>t||n.height>t))return{blob:e,width:n.width,height:n.height,originalSize:e.size,compressedSize:e.size,ratio:1}}return Mt(e,t,n)}async function vt(e){return e instanceof HTMLImageElement?e:new Promise((t,n)=>{const r=new Image,o=URL.createObjectURL(e);r.onload=()=>{URL.revokeObjectURL(o),t(r)},r.onerror=()=>{URL.revokeObjectURL(o),n(new Error("图片加载失败"))},r.src=o})}export{$ as HttpError,st as addData,Ye as alphanumericId,Ie as binaryId,b as cancelIdleCallback,d as cancelRafInterval,u as cancelRafTimeout,g as cancelRafTimes,h as cancelRecursiveInterval,ft as clearStore,it as closeAllDB,at as closeDB,$t as compressImage,wt as countData,M as createHttpClient,tt as createTransport,Ue as createWebSocket,Ve as createWorker,dt as deleteData,gt as deleteDataByIndex,yt as deleteDatabase,V as format,I as formatDate,_ as formatDateOnly,R as formatDateTime,P as formatDateTimeColon,U as formatHourMinute,O as formatNumber,Y as formatRelativeTime,bt as formatStorageSize,A as formatTimeOnly,H as formatYearMonth,lt as getAllData,ot as getDB,ut as getData,ht as getDataByIndex,mt as getDataByIndexRange,N as getDay,G as getDaysAgoStart,F as getHour,W as getMinute,L as getMonth,B as getSecond,pt as getStorageEstimate,q as getTimestamp,Z as getTodayStart,Q as getType,z as getYear,J as getYesterdayStart,D as http,p as idleCallback,rt as initDB,te as isArray,ve as isBankCard,ee as isBoolean,De as isCarNumber,$e as isChinese,oe as isDate,he as isEmail,de as isEmptyValue,re as isFunction,ge as isIdCard,ye as isIp,be as isLetter,fe as isNotEmpty,ce as isNull,le as isNullOrUndefined,K as isNumber,pe as isNumericString,ne as isObject,me as isPhone,xe as isPostalCode,se as isPromise,ae as isRegExp,X as isString,Me as isStrongPassword,ie as isSymbol,et as isTransportSupported,ue as isUndefined,we as isUrl,Se as isUsername,C as numberToChinese,Ce as numericId,ct as putData,l as rafInterval,c as rafTimeout,m as rafTimes,f as recursiveInterval,Mt as resizeAndCompress,Qe as runInWorker,Ge as safe,Be as safeExecute,qe as safeExecuteAsync,Ze as safeGet,ze as safeJsonParse,Le as safeJsonStringify,Fe as safeLocalStorage,We as safeSessionStorage,Je as safeSet,Ae as shortId,Dt as smartCompress,_e as snowflakeId,ke as timestampId,St as toWebP,He as uid,je as uuid,Ee as validate};
|
|
1
|
+
const e=new Map;let t=0;const n=new Map;let r=0;const o=new Map;let a=0;const i=new Map;let s=0;function c(n,r){const o=++t,a=performance.now();return e.set(o,requestAnimationFrame(function t(i){e.has(o)&&(i-a>=r?(e.delete(o),n()):e.set(o,requestAnimationFrame(t)))})),o}function u(t){const n=e.get(t);void 0!==n&&(cancelAnimationFrame(n),e.delete(t))}function l(e,t){const o=++r;let a=performance.now();return n.set(o,requestAnimationFrame(function r(i){n.has(o)&&(i-a>=t&&(a=i,e()),n.set(o,requestAnimationFrame(r)))})),o}function d(e){const t=n.get(e);void 0!==t&&(cancelAnimationFrame(t),n.delete(e))}function f(e,t){const n=++a;return o.set(n,window.setTimeout(function r(){o.has(n)&&(e(),o.set(n,window.setTimeout(r,t)))},t)),n}function h(e){const t=o.get(e);void 0!==t&&(clearTimeout(t),o.delete(e))}function m(e,t,n){const r=++s;let o=0;i.set(r,{currentRafId:0,cancelled:!1});return i.get(r).currentRafId=c(function a(){const s=i.get(r);s&&!s.cancelled&&(o++,e(o),o<n?s.currentRafId=c(a,t):i.delete(r))},t),r}function g(e){const t=i.get(e);t&&(t.cancelled=!0,u(t.currentRafId),i.delete(e))}const w=new Map;let y=0;function p(e,t){const n=++y;if("undefined"!=typeof requestIdleCallback){const r=requestIdleCallback(e,t);return w.set(n,r),n}const r=Date.now(),o=t?.timeout??0,a=window.setTimeout(()=>{const t=Date.now()-r,a={didTimeout:o>0&&t>=o,timeRemaining:()=>Math.max(0,50-(Date.now()-r))};w.delete(n),e(a)},1);return w.set(n,a),n}function b(e){const t=w.get(e);void 0!==t&&(void 0!==window.cancelIdleCallback?window.cancelIdleCallback(t):clearTimeout(t),w.delete(e))}class $ extends Error{constructor(e,t,n){super(e),this.name="HttpError",this.status=t,this.response=n}}function S(){const e=[];return{handlers:e,use:t=>(e.push(t),e.length-1),eject(t){e[t]&&e.splice(t,1)}}}function M(e={}){const t={baseURL:e.baseURL||"",timeout:e.timeout||15e3,headers:e.headers||{},withCredentials:e.withCredentials??!1,retry:e.retry??0},n={request:S(),response:S()};async function r(e,t){const r=function(e,t){if(!t||0===Object.keys(t).length)return e;const n=Object.keys(t).filter(e=>void 0!==t[e]&&null!==t[e]).map(e=>`${encodeURIComponent(e)}=${encodeURIComponent(t[e])}`).join("&");return e+(e.includes("?")?"&":"?")+n}(e.url,e.params),o=function(e){const t={method:e.method||"GET",headers:{"Content-Type":"application/json;charset=UTF-8",...e.headers},credentials:e.withCredentials?"include":"same-origin"};return e.data&&(e.data instanceof FormData?(t.body=e.data,delete t.headers["Content-Type"]):"object"==typeof e.data?t.body=JSON.stringify(e.data):t.body=e.data),t}(e),a=c(()=>t.abort(),e.timeout);try{const i=await fetch(r,{...o,signal:t.signal});if(u(a),!i.ok)throw new $(`请求失败 (${i.status})`,i.status,i);let s=await async function(e,t){switch(t){case"blob":return e.blob();case"text":return e.text();case"arrayBuffer":return e.arrayBuffer();default:return e.json()}}(i,e.responseType);for(const e of n.response.handlers)if(e.onFulfilled)try{s=await e.onFulfilled(s)}catch(t){if(e.onRejected)return await e.onRejected(t);throw t}return s}catch(e){if(u(a),"AbortError"===e.name)throw new $("请求超时或已取消");throw e}}function o(e){const o=new AbortController,a=(async()=>{let a=function(e){return{...e,url:t.baseURL+e.url,timeout:e.timeout||t.timeout,headers:{...t.headers,...e.headers},withCredentials:e.withCredentials??t.withCredentials}}(e);for(const e of n.request.handlers)if(e.onFulfilled)try{a=await e.onFulfilled(a)}catch(t){throw e.onRejected&&await e.onRejected(t),t}a.signal&&a.signal.addEventListener("abort",()=>o.abort());const i=t.retry||0;let s;for(let e=0;e<=i;e++)try{return await r(a,o)}catch(t){if(s=t,"请求超时或已取消"===t.message||o.signal.aborted)break;if(e===i)break}for(const e of n.response.handlers)if(e.onRejected)return await e.onRejected(s);throw s})();return a.abort=()=>o.abort(),a}return{interceptors:n,request:o,get:function(e,t,n){return o({...n,url:e,method:"GET",params:t})},post:function(e,t,n){return o({...n,url:e,method:"POST",data:t})},put:function(e,t,n){return o({...n,url:e,method:"PUT",data:t})},delete:function(e,t,n){return o({...n,url:e,method:"DELETE",params:t})},options:function(e,t){return o({...t,url:e,method:"OPTIONS"})},patch:function(e,t,n){return o({...n,url:e,method:"PATCH",data:t})},upload:function(e){const{url:n,file:r,name:a="file",data:i={},headers:s={},onProgress:c,signal:u}=e,l=new FormData;if(l.append(a,r),Object.keys(i).forEach(e=>l.append(e,i[e])),!c)return o({url:n,method:"POST",data:l,headers:s,signal:u});const d=new AbortController;u&&u.addEventListener("abort",()=>d.abort());const f=function(e,t,n,r,o){return new Promise((a,i)=>{const s=new XMLHttpRequest;s.upload.addEventListener("progress",e=>{e.lengthComputable&&r(Math.round(e.loaded/e.total*100))}),s.addEventListener("load",()=>{if(s.status>=200&&s.status<300)try{a(JSON.parse(s.responseText))}catch{a(s.responseText)}else i(new $(`上传失败 (${s.status})`,s.status))}),s.addEventListener("error",()=>i(new $("上传失败"))),o&&o.addEventListener("abort",()=>{s.abort(),i(new $("上传已取消"))}),s.open("POST",e),Object.keys(n).forEach(e=>s.setRequestHeader(e,n[e])),s.send(t)})}(t.baseURL+n,l,s,c,d.signal);return f.abort=()=>d.abort(),f}}}const D=M();"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;function v(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var x={exports:{}},E=v(x.exports=function(){var e=1e3,t=6e4,n=36e5,r="millisecond",o="second",a="minute",i="hour",s="day",c="week",u="month",l="quarter",d="year",f="date",h="Invalid Date",m=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,g=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,w={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(e){var t=["th","st","nd","rd"],n=e%100;return"["+e+(t[(n-20)%10]||t[n]||t[0])+"]"}},y=function(e,t,n){var r=String(e);return!r||r.length>=t?e:""+Array(t+1-r.length).join(n)+e},p={s:y,z:function(e){var t=-e.utcOffset(),n=Math.abs(t),r=Math.floor(n/60),o=n%60;return(t<=0?"+":"-")+y(r,2,"0")+":"+y(o,2,"0")},m:function e(t,n){if(t.date()<n.date())return-e(n,t);var r=12*(n.year()-t.year())+(n.month()-t.month()),o=t.clone().add(r,u),a=n-o<0,i=t.clone().add(r+(a?-1:1),u);return+(-(r+(n-o)/(a?o-i:i-o))||0)},a:function(e){return e<0?Math.ceil(e)||0:Math.floor(e)},p:function(e){return{M:u,y:d,w:c,d:s,D:f,h:i,m:a,s:o,ms:r,Q:l}[e]||String(e||"").toLowerCase().replace(/s$/,"")},u:function(e){return void 0===e}},b="en",$={};$[b]=w;var S="$isDayjsObject",M=function(e){return e instanceof E||!(!e||!e[S])},D=function e(t,n,r){var o;if(!t)return b;if("string"==typeof t){var a=t.toLowerCase();$[a]&&(o=a),n&&($[a]=n,o=a);var i=t.split("-");if(!o&&i.length>1)return e(i[0])}else{var s=t.name;$[s]=t,o=s}return!r&&o&&(b=o),o||!r&&b},v=function(e,t){if(M(e))return e.clone();var n="object"==typeof t?t:{};return n.date=e,n.args=arguments,new E(n)},x=p;x.l=D,x.i=M,x.w=function(e,t){return v(e,{locale:t.$L,utc:t.$u,x:t.$x,$offset:t.$offset})};var E=function(){function w(e){this.$L=D(e.locale,null,!0),this.parse(e),this.$x=this.$x||e.x||{},this[S]=!0}var y=w.prototype;return y.parse=function(e){this.$d=function(e){var t=e.date,n=e.utc;if(null===t)return new Date(NaN);if(x.u(t))return new Date;if(t instanceof Date)return new Date(t);if("string"==typeof t&&!/Z$/i.test(t)){var r=t.match(m);if(r){var o=r[2]-1||0,a=(r[7]||"0").substring(0,3);return n?new Date(Date.UTC(r[1],o,r[3]||1,r[4]||0,r[5]||0,r[6]||0,a)):new Date(r[1],o,r[3]||1,r[4]||0,r[5]||0,r[6]||0,a)}}return new Date(t)}(e),this.init()},y.init=function(){var e=this.$d;this.$y=e.getFullYear(),this.$M=e.getMonth(),this.$D=e.getDate(),this.$W=e.getDay(),this.$H=e.getHours(),this.$m=e.getMinutes(),this.$s=e.getSeconds(),this.$ms=e.getMilliseconds()},y.$utils=function(){return x},y.isValid=function(){return!(this.$d.toString()===h)},y.isSame=function(e,t){var n=v(e);return this.startOf(t)<=n&&n<=this.endOf(t)},y.isAfter=function(e,t){return v(e)<this.startOf(t)},y.isBefore=function(e,t){return this.endOf(t)<v(e)},y.$g=function(e,t,n){return x.u(e)?this[t]:this.set(n,e)},y.unix=function(){return Math.floor(this.valueOf()/1e3)},y.valueOf=function(){return this.$d.getTime()},y.startOf=function(e,t){var n=this,r=!!x.u(t)||t,l=x.p(e),h=function(e,t){var o=x.w(n.$u?Date.UTC(n.$y,t,e):new Date(n.$y,t,e),n);return r?o:o.endOf(s)},m=function(e,t){return x.w(n.toDate()[e].apply(n.toDate("s"),(r?[0,0,0,0]:[23,59,59,999]).slice(t)),n)},g=this.$W,w=this.$M,y=this.$D,p="set"+(this.$u?"UTC":"");switch(l){case d:return r?h(1,0):h(31,11);case u:return r?h(1,w):h(0,w+1);case c:var b=this.$locale().weekStart||0,$=(g<b?g+7:g)-b;return h(r?y-$:y+(6-$),w);case s:case f:return m(p+"Hours",0);case i:return m(p+"Minutes",1);case a:return m(p+"Seconds",2);case o:return m(p+"Milliseconds",3);default:return this.clone()}},y.endOf=function(e){return this.startOf(e,!1)},y.$set=function(e,t){var n,c=x.p(e),l="set"+(this.$u?"UTC":""),h=(n={},n[s]=l+"Date",n[f]=l+"Date",n[u]=l+"Month",n[d]=l+"FullYear",n[i]=l+"Hours",n[a]=l+"Minutes",n[o]=l+"Seconds",n[r]=l+"Milliseconds",n)[c],m=c===s?this.$D+(t-this.$W):t;if(c===u||c===d){var g=this.clone().set(f,1);g.$d[h](m),g.init(),this.$d=g.set(f,Math.min(this.$D,g.daysInMonth())).$d}else h&&this.$d[h](m);return this.init(),this},y.set=function(e,t){return this.clone().$set(e,t)},y.get=function(e){return this[x.p(e)]()},y.add=function(r,l){var f,h=this;r=Number(r);var m=x.p(l),g=function(e){var t=v(h);return x.w(t.date(t.date()+Math.round(e*r)),h)};if(m===u)return this.set(u,this.$M+r);if(m===d)return this.set(d,this.$y+r);if(m===s)return g(1);if(m===c)return g(7);var w=(f={},f[a]=t,f[i]=n,f[o]=e,f)[m]||1,y=this.$d.getTime()+r*w;return x.w(y,this)},y.subtract=function(e,t){return this.add(-1*e,t)},y.format=function(e){var t=this,n=this.$locale();if(!this.isValid())return n.invalidDate||h;var r=e||"YYYY-MM-DDTHH:mm:ssZ",o=x.z(this),a=this.$H,i=this.$m,s=this.$M,c=n.weekdays,u=n.months,l=n.meridiem,d=function(e,n,o,a){return e&&(e[n]||e(t,r))||o[n].slice(0,a)},f=function(e){return x.s(a%12||12,e,"0")},m=l||function(e,t,n){var r=e<12?"AM":"PM";return n?r.toLowerCase():r};return r.replace(g,function(e,r){return r||function(e){switch(e){case"YY":return String(t.$y).slice(-2);case"YYYY":return x.s(t.$y,4,"0");case"M":return s+1;case"MM":return x.s(s+1,2,"0");case"MMM":return d(n.monthsShort,s,u,3);case"MMMM":return d(u,s);case"D":return t.$D;case"DD":return x.s(t.$D,2,"0");case"d":return String(t.$W);case"dd":return d(n.weekdaysMin,t.$W,c,2);case"ddd":return d(n.weekdaysShort,t.$W,c,3);case"dddd":return c[t.$W];case"H":return String(a);case"HH":return x.s(a,2,"0");case"h":return f(1);case"hh":return f(2);case"a":return m(a,i,!0);case"A":return m(a,i,!1);case"m":return String(i);case"mm":return x.s(i,2,"0");case"s":return String(t.$s);case"ss":return x.s(t.$s,2,"0");case"SSS":return x.s(t.$ms,3,"0");case"Z":return o}return null}(e)||o.replace(":","")})},y.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},y.diff=function(r,f,h){var m,g=this,w=x.p(f),y=v(r),p=(y.utcOffset()-this.utcOffset())*t,b=this-y,$=function(){return x.m(g,y)};switch(w){case d:m=$()/12;break;case u:m=$();break;case l:m=$()/3;break;case c:m=(b-p)/6048e5;break;case s:m=(b-p)/864e5;break;case i:m=b/n;break;case a:m=b/t;break;case o:m=b/e;break;default:m=b}return h?m:x.a(m)},y.daysInMonth=function(){return this.endOf(u).$D},y.$locale=function(){return $[this.$L]},y.locale=function(e,t){if(!e)return this.$L;var n=this.clone(),r=D(e,t,!0);return r&&(n.$L=r),n},y.clone=function(){return x.w(this.$d,this)},y.toDate=function(){return new Date(this.valueOf())},y.toJSON=function(){return this.isValid()?this.toISOString():null},y.toISOString=function(){return this.$d.toISOString()},y.toString=function(){return this.$d.toUTCString()},w}(),O=E.prototype;return v.prototype=O,[["$ms",r],["$s",o],["$m",a],["$H",i],["$W",s],["$M",u],["$y",d],["$D",f]].forEach(function(e){O[e[1]]=function(t){return this.$g(t,e[0],e[1])}}),v.extend=function(e,t){return e.$i||(e(t,E,v),e.$i=!0),v},v.locale=D,v.isDayjs=M,v.unix=function(e){return v(1e3*e)},v.en=$[b],v.Ls=$,v.p={},v}());function O(e,t={}){const{decimals:n=0,prefix:r="",suffix:o=""}=t,a="string"==typeof e?parseFloat(e):e;if(isNaN(a))return"";const i=a.toFixed(n),[s,c]=i.split("."),u=s.replace(/\B(?=(\d{3})+(?!\d))/g,",");return r+(c?`${u}.${c}`:u)+o}const T=["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"],j=["","拾","佰","仟"],k=["","万","亿","兆"];function C(e){const t="string"==typeof e?parseFloat(e):e;if(isNaN(t))return"";if(0===t)return"零元整";const n=t<0,r=Math.abs(t),[o,a=""]=r.toFixed(2).split(".");let i="";if("0"!==o){const e=o,t=e.length;let n=!1;for(let r=0;r<t;r++){const o=parseInt(e[r]),a=t-r-1,s=a%4,c=Math.floor(a/4);0===o?(n=!0,0===s&&c>0&&(i+=k[c])):(n&&(i+=T[0],n=!1),i+=T[o]+j[s],0===s&&c>0&&(i+=k[c]))}i+="元"}const s=parseInt(a[0]||"0"),c=parseInt(a[1]||"0");return 0===s&&0===c?i+="整":(s>0?i+=T[s]+"角":c>0&&(i+="零"),c>0&&(i+=T[c]+"分")),n?"负"+i:i}function Y(e){const t=E(e),n=E(),r=n.diff(t,"second"),o=n.diff(t,"minute"),a=n.diff(t,"hour"),i=n.diff(t,"day");return r<60?"刚刚":o<60?`${o}分钟前`:a<24?`${a}小时前`:i<7?`${i}天前`:t.year()===n.year()?t.format("M月D日"):t.format("YYYY年M月D日")}function A(e,t="YYYY-MM-DD HH:mm:ss"){return E(e).format(t)}function I(e){return E(e).format("YYYY:MM:DD HH:mm:ss")}function P(e){return E(e).format("YYYY-MM-DD HH:mm:ss")}function R(e){return E(e).format("YYYY-MM-DD")}function _(e){return E(e).format("HH:mm:ss")}function U(e){return E(e).format("YYYY-MM")}function H(e){return E(e).format("HH:mm")}function z(e){return E(e).format("YYYY")}function L(e){return E(e).format("MM")}function N(e){return E(e).format("DD")}function F(e){return E(e).format("HH")}function W(e){return E(e).format("mm")}function B(e){return E(e).format("ss")}function q(){return Date.now()}function Z(){return E().startOf("day").valueOf()}function J(){return E().subtract(1,"day").startOf("day").valueOf()}function G(e){return E().subtract(e,"day").startOf("day").valueOf()}const V={formatNumber:O,numberToChinese:C,formatRelativeTime:Y,formatDate:A,formatDateTimeColon:I,formatDateTime:P,formatDateOnly:R,formatTimeOnly:_,formatYearMonth:U,formatHourMinute:H,getYear:z,getMonth:L,getDay:N,getHour:F,getMinute:W,getSecond:B,getTimestamp:q,getTodayStart:Z,getYesterdayStart:J,getDaysAgoStart:G};function Q(e){return Object.prototype.toString.call(e).slice(8,-1)}function K(e){return"String"===Q(e)}function X(e){return"Number"===Q(e)&&!isNaN(e)}function ee(e){return"Boolean"===Q(e)}function te(e){return"Array"===Q(e)}function ne(e){return"Object"===Q(e)}function re(e){return"Function"===Q(e)}function oe(e){return"Date"===Q(e)}function ae(e){return"RegExp"===Q(e)}function ie(e){return"Symbol"===Q(e)}function se(e){return"Promise"===Q(e)}function ce(e){return"Null"===Q(e)}function ue(e){return"Undefined"===Q(e)}function le(e){return ce(e)||ue(e)}function de(e){return!!le(e)||(K(e)?""===e.trim():te(e)?0===e.length:!!ne(e)&&0===Object.keys(e).length)}function fe(e){return!de(e)}function he(e){return/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}$/.test(e)}function me(e){return/^1[3-9]\d{9}$/.test(e)}function ge(e){return/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(e)}function we(e){return/^(https?:\/\/)?([\da-z.-]+)\.([a-z.]{2,6})([/\w .-]*)*\/?(\?[;&a-z\d%_.~+=-]*)?(\#[-a-z\d_]*)?$/i.test(e)}function ye(e){return/^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$/.test(e)}function pe(e){return/^\d+$/.test(e)}function be(e){return/^[A-Za-z]+$/.test(e)}function $e(e){return/^[\u4e00-\u9fa5]+$/.test(e)}function Se(e){return/^[a-zA-Z][a-zA-Z0-9_]{3,15}$/.test(e)}function Me(e){return/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{6,20}$/.test(e)}function De(e){return/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-HJ-NP-Z][A-HJ-NP-Z0-9]{4,5}[A-HJ-NP-Z0-9挂学警港澳]$/.test(e)}function ve(e){return/^\d{16,19}$/.test(e)}function xe(e){return/^\d{6}$/.test(e)}const Ee={getType:Q,isString:K,isNumber:X,isBoolean:ee,isArray:te,isObject:ne,isFunction:re,isDate:oe,isRegExp:ae,isSymbol:ie,isPromise:se,isNull:ce,isUndefined:ue,isNullOrUndefined:le,isEmptyValue:de,isNotEmpty:fe,isEmail:he,isPhone:me,isIdCard:ge,isUrl:we,isIp:ye,isNumericString:pe,isLetter:be,isChinese:$e,isUsername:Se,isStrongPassword:Me,isCarNumber:De,isBankCard:ve,isPostalCode:xe},Oe="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",Te="0123456789";function je(e=!1){if("undefined"!=typeof crypto&&crypto.randomUUID){const t=crypto.randomUUID();return e?t.replace(/-/g,""):t}const t="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)});return e?t.replace(/-/g,""):t}function ke(e=6){return Date.now().toString()+Ye(e)}function Ce(e=9){const t=Math.max(1,Math.min(20,e));let n=Te[Math.floor(9*Math.random())+1];for(let e=1;e<t;e++)n+=Te[Math.floor(10*Math.random())];return n}function Ye(e=8){let t="";for(let n=0;n<e;n++)t+=Oe[Math.floor(62*Math.random())];return t}function Ae(e=16){const t=Math.ceil(e/2);if("undefined"!=typeof crypto&&crypto.getRandomValues){const n=new Uint8Array(t);crypto.getRandomValues(n);let r="";for(let e=0;e<n.length;e++)r+=n[e].toString(16).padStart(2,"0");return r.slice(0,e)}let n="";for(let t=0;t<e;t++)n+="0123456789abcdef"[Math.floor(16*Math.random())];return n}let Ie=-1,Pe=0;function Re(){let e=Date.now();if(e===Ie){if(Pe=Pe+1&4095,0===Pe)for(;e<=Ie;)e=Date.now()}else Pe=0;return Ie=e,e.toString()+Pe.toString().padStart(6,"0")}function _e(e=8){let t="",n=1e6*Date.now()+Math.floor(1e6*Math.random());for(;n>0;)t=Oe[n%62]+t,n=Math.floor(n/62);for(;t.length<e;)t=Oe[Math.floor(62*Math.random())]+t;return t}const Ue={uuid:je,timestampId:ke,numericId:Ce,alphanumericId:Ye,binaryId:Ae,snowflakeId:Re,shortId:_e};function He(e){const{url:t,protocols:n,autoConnect:r=!0,reconnect:o=!0,reconnectInterval:a=3e3,reconnectMaxTimes:i=5,heartbeat:s=!1,heartbeatInterval:l=3e4,heartbeatMessage:d="ping",messageQueue:f=!1,messageQueueMax:h=100}=e;let m=null,g="disconnected",w=0,y=null,p=null,b=!1;const $=[],S=new Set,M=new Set,D=new Set,v=new Set,x=new Set;function E(){s&&(O(),p=c(()=>{if("connected"===g&&m){const e="function"==typeof d?d():d;m.send(e),E()}},l))}function O(){p&&(u(p),p=null)}function T(){o&&!b&&(-1!==i&&w>=i||(w++,x.forEach(e=>e(w)),y=c(()=>{j()},a)))}function j(){if("connecting"!==g&&"connected"!==g){b=!1,g="connecting";try{m=n?new WebSocket(t,n):new WebSocket(t),m.onopen=e=>{g="connected",w=0,E(),function(){for(;$.length>0&&"connected"===g&&m;){const e=$.shift();m.send(e)}}(),S.forEach(t=>t(e))},m.onmessage=e=>{let t=e.data;try{t=JSON.parse(e.data)}catch{}M.forEach(n=>n(t,e))},m.onerror=e=>{D.forEach(t=>t(e))},m.onclose=e=>{g="disconnected",m=null,O(),v.forEach(t=>t(e)),T()}}catch(e){g="disconnected",T()}}}return r&&j(),{getState:()=>g,getSocket:()=>m,connect:j,disconnect:function(e=1e3,t="manual close"){b=!0,g="disconnecting",y&&(u(y),y=null),O(),m&&(m.close(e,t),m=null),g="disconnected"},send:function(e){const t="object"==typeof e?JSON.stringify(e):e;"connected"===g&&m?m.send(t):f&&$.length<h&&$.push(t)},onOpen:function(e){return S.add(e),()=>S.delete(e)},onMessage:function(e){return M.add(e),()=>M.delete(e)},onError:function(e){return D.add(e),()=>D.delete(e)},onClose:function(e){return v.add(e),()=>v.delete(e)},onReconnect:function(e){return x.add(e),()=>x.delete(e)},offAll:function(){S.clear(),M.clear(),D.clear(),v.clear(),x.clear()}}}function ze(e,t=null){try{return JSON.parse(e)}catch{return t}}function Le(e,t=null,n){try{return JSON.stringify(e,null,n)}catch{return t}}function Ne(e){return{get(t,n=null){try{if(!e)return n;const r=e.getItem(t);return null===r?n:ze(r,n)}catch{return n}},getString(t,n=""){try{return e?e.getItem(t)??n:n}catch{return n}},set(t,n){try{if(!e)return!1;const r=Le(n);return null!==r&&(e.setItem(t,r),!0)}catch{return!1}},remove(t){try{return!!e&&(e.removeItem(t),!0)}catch{return!1}},clear(){try{return!!e&&(e.clear(),!0)}catch{return!1}},has(t){try{return!!e&&null!==e.getItem(t)}catch{return!1}},keys(){try{if(!e)return[];const t=[];for(let n=0;n<e.length;n++){const r=e.key(n);null!==r&&t.push(r)}return t}catch{return[]}},size(){try{return e?e.length:0}catch{return 0}}}}const Fe=Ne(function(){try{return"undefined"!=typeof window?window.localStorage:null}catch{return null}}()),We=Ne(function(){try{return"undefined"!=typeof window?window.sessionStorage:null}catch{return null}}());function Be(e,t){try{return e()}catch{return t}}async function qe(e,t){try{return await e()}catch{return t}}function Ze(e,t,n=void 0){try{if(null==e)return n;const r=t.replace(/\[(\d+)\]/g,".$1").split(".");let o=e;for(const e of r){if(null==o)return n;o=o[e]}return void 0===o?n:o}catch{return n}}function Je(e,t,n){try{if(null==e||"object"!=typeof e)return!1;const r=t.replace(/\[(\d+)\]/g,".$1").split(".");let o=e;for(let e=0;e<r.length-1;e++){const t=r[e],n=r[e+1],a=/^\d+$/.test(n);null==o[t]&&(o[t]=a?[]:{}),o=o[t]}return o[r[r.length-1]]=n,!0}catch{return!1}}const Ge={jsonParse:ze,jsonStringify:Le,localStorage:Fe,sessionStorage:We,execute:Be,executeAsync:qe,get:Ze,set:Je};function Ve(e){const t=function(e){const t=`\n const fn = ${e.toString()};\n self.onmessage = async (e) => {\n try {\n const result = await fn(e.data);\n self.postMessage({ type: '__result__', data: result });\n } catch (error) {\n self.postMessage({ type: '__error__', error: error.message });\n }\n };\n `,n=new Blob([t],{type:"application/javascript"});return URL.createObjectURL(n)}(e),n=new Worker(t),r=new Set,o=new Set;let a=null,i=null;return n.onmessage=e=>{const{type:t,data:n,error:o}=e.data;"__result__"===t?(a?.(n),a=null,i=null):"__error__"===t?(i?.(new Error(o)),a=null,i=null):r.forEach(t=>t(e.data))},n.onerror=e=>{i?.(e),a=null,i=null,o.forEach(t=>t(e))},{run:e=>new Promise((t,r)=>{a=t,i=r,n.postMessage(e)}),postMessage(e){n.postMessage(e)},onMessage:e=>(r.add(e),()=>r.delete(e)),onError:e=>(o.add(e),()=>o.delete(e)),terminate(){n.terminate(),URL.revokeObjectURL(t),r.clear(),o.clear()}}}function Qe(e,t,n){const r=Ve(e),{timeout:o}=n||{};return new Promise((e,n)=>{let a;o&&(a=window.setTimeout(()=>{r.terminate(),n(new Error("Worker 执行超时"))},o)),r.run(t).then(t=>{a&&clearTimeout(a),r.terminate(),e(t)}).catch(e=>{a&&clearTimeout(a),r.terminate(),n(e)})})}const Ke=new TextEncoder;function Xe(e,t){const n=new Set;let r=null,o=!1;if(e){const t=e.getReader();(async()=>{try{for(;!o;){const{value:e,done:r}=await t.read();if(r)break;e&&n.forEach(t=>t(e))}}catch{}})()}return{async send(e){if(!t||o)return;r||(r=t.getWriter());const n="string"==typeof e?Ke.encode(e):e;await r.write(n)},onMessage:e=>(n.add(e),()=>n.delete(e)),close(){o=!0,r?.close(),n.clear()},getReadable:()=>e,getWritable:()=>t}}function et(){return"undefined"!=typeof WebTransport}function tt(e){const{url:t,allowPooling:n,congestionControl:r}=e;if(!et())throw new Error("当前浏览器不支持 WebTransport");let o="connecting",a=null;const i=new Set,s=new Set,c=new Set,u=new Set,l=new Set,d={};return void 0!==n&&(d.allowPooling=n),r&&(d.congestionControl=r),a=new WebTransport(t,d),a.closed.then(e=>{o="closed",u.forEach(t=>t({closeCode:e.closeCode??0,reason:e.reason??""}))}).catch(e=>{o="failed",l.forEach(t=>t(e))}),(async()=>{try{const e=a.datagrams.readable.getReader();for(;"connecting"===o||"connected"===o;){const{value:t,done:n}=await e.read();if(n)break;t&&i.forEach(e=>e(t))}}catch{}})(),(async()=>{try{const e=a.incomingBidirectionalStreams.getReader();for(;"connecting"===o||"connected"===o;){const{value:t,done:n}=await e.read();if(n)break;if(t){const e=Xe(t.readable,t.writable);s.forEach(t=>t(e))}}}catch{}})(),(async()=>{try{const e=a.incomingUnidirectionalStreams.getReader();for(;"connecting"===o||"connected"===o;){const{value:t,done:n}=await e.read();if(n)break;if(t){const e=Xe(t,null);c.forEach(t=>t(e))}}}catch{}})(),{async ready(){await a.ready,o="connected"},getState:()=>o,sendDatagram(e){if(!a||"connected"!==o)return;const t="string"==typeof e?Ke.encode(e):e,n=a.datagrams.writable.getWriter();n.write(t),n.releaseLock()},onDatagram:e=>(i.add(e),()=>i.delete(e)),async createBidirectionalStream(){if(!a||"connected"!==o)throw new Error("连接未就绪");const e=await a.createBidirectionalStream();return Xe(e.readable,e.writable)},async createUnidirectionalStream(){if(!a||"connected"!==o)throw new Error("连接未就绪");return Xe(null,await a.createUnidirectionalStream())},onBidirectionalStream:e=>(s.add(e),()=>s.delete(e)),onUnidirectionalStream:e=>(c.add(e),()=>c.delete(e)),onClose:e=>(u.add(e),()=>u.delete(e)),onError:e=>(l.add(e),()=>l.delete(e)),close(e){a&&(a.close(e),o="closed",i.clear(),s.clear(),c.clear())},getTransport:()=>a}}new TextDecoder;const nt=new Map;function rt(e){return new Promise((t,n)=>{const r=nt.get(e.name);if(r)return void t(r);const o=indexedDB.open(e.name,e.version);o.onupgradeneeded=t=>{const n=t.target.result;e.stores.forEach(e=>{n.objectStoreNames.contains(e.name)&&n.deleteObjectStore(e.name);const t=n.createObjectStore(e.name,{keyPath:e.keyPath,autoIncrement:e.autoIncrement||!1});e.indexes&&e.indexes.forEach(e=>{t.createIndex(e.name,e.keyPath,{unique:e.unique||!1})})})},o.onsuccess=n=>{const r=n.target.result;nt.set(e.name,r),t(r)},o.onerror=e=>{n(new Error(`Database init failed: ${e.target.error}`))}})}function ot(e){return nt.get(e)}function at(e){const t=nt.get(e);t&&(t.close(),nt.delete(e))}function it(){nt.forEach((e,t)=>{e.close()}),nt.clear()}function st(e,t,n){return new Promise((r,o)=>{const a=nt.get(e);if(!a)return void o(new Error(`Database "${e}" not initialized`));const i=a.transaction([t],"readwrite").objectStore(t).add(n);i.onsuccess=()=>r(i.result),i.onerror=()=>o(new Error(`Add data failed: ${i.error}`))})}function ct(e,t,n){return new Promise((r,o)=>{const a=nt.get(e);if(!a)return void o(new Error(`Database "${e}" not initialized`));const i=a.transaction([t],"readwrite").objectStore(t).put(n);i.onsuccess=()=>r(i.result),i.onerror=()=>o(new Error(`Put data failed: ${i.error}`))})}function ut(e,t,n){return new Promise((r,o)=>{const a=nt.get(e);if(!a)return void o(new Error(`Database "${e}" not initialized`));const i=a.transaction([t],"readonly").objectStore(t).get(n);i.onsuccess=()=>r(i.result),i.onerror=()=>o(new Error(`Get data failed: ${i.error}`))})}function lt(e,t){return new Promise((n,r)=>{const o=nt.get(e);if(!o)return void r(new Error(`Database "${e}" not initialized`));const a=o.transaction([t],"readonly").objectStore(t).getAll();a.onsuccess=()=>n(a.result),a.onerror=()=>r(new Error(`Get all data failed: ${a.error}`))})}function dt(e,t,n){return new Promise((r,o)=>{const a=nt.get(e);if(!a)return void o(new Error(`Database "${e}" not initialized`));const i=a.transaction([t],"readwrite").objectStore(t).delete(n);i.onsuccess=()=>r(),i.onerror=()=>o(new Error(`Delete data failed: ${i.error}`))})}function ft(e,t){return new Promise((n,r)=>{const o=nt.get(e);if(!o)return void r(new Error(`Database "${e}" not initialized`));const a=o.transaction([t],"readwrite").objectStore(t).clear();a.onsuccess=()=>n(),a.onerror=()=>r(new Error(`Clear store failed: ${a.error}`))})}function ht(e,t,n,r){return new Promise((o,a)=>{const i=nt.get(e);if(!i)return void a(new Error(`Database "${e}" not initialized`));const s=i.transaction([t],"readonly").objectStore(t).index(n).getAll(r);s.onsuccess=()=>o(s.result),s.onerror=()=>a(new Error(`Get data by index failed: ${s.error}`))})}function mt(e,t,n,r){return new Promise((o,a)=>{const i=nt.get(e);if(!i)return void a(new Error(`Database "${e}" not initialized`));const s=i.transaction([t],"readonly").objectStore(t).index(n).getAll(r);s.onsuccess=()=>o(s.result),s.onerror=()=>a(new Error(`Get data by index range failed: ${s.error}`))})}function gt(e,t,n,r){return new Promise((o,a)=>{const i=nt.get(e);if(!i)return void a(new Error(`Database "${e}" not initialized`));const s=i.transaction([t],"readwrite").objectStore(t).index(n).openCursor(r);let c=0;s.onsuccess=e=>{const t=e.target.result;t?(t.delete(),c++,t.continue()):o(c)},s.onerror=()=>a(new Error(`Delete data by index failed: ${s.error}`))})}function wt(e,t){return new Promise((n,r)=>{const o=nt.get(e);if(!o)return void r(new Error(`Database "${e}" not initialized`));const a=o.transaction([t],"readonly").objectStore(t).count();a.onsuccess=()=>n(a.result),a.onerror=()=>r(new Error(`Count data failed: ${a.error}`))})}function yt(e){return new Promise((t,n)=>{at(e);const r=indexedDB.deleteDatabase(e);r.onsuccess=()=>t(),r.onerror=()=>n(new Error(`Delete database failed: ${r.error}`)),r.onblocked=()=>n(new Error("Delete database blocked, please close other tabs using this database"))})}async function pt(){return"storage"in navigator&&"estimate"in navigator.storage?await navigator.storage.estimate():null}function bt(e){if(!e)return"0 B";const t=["B","KB","MB","GB"];let n=e,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r++;return`${n.toFixed(2)} ${t[r]}`}async function $t(e,t={}){const{maxWidth:n=1e3,maxHeight:r=1e3,format:o="image/webp",quality:a=.85}=t;let i=0;(e instanceof File||e instanceof Blob)&&(i=e.size);const s=await vt(e);let{width:c,height:u}=s;if(c>n||u>r){const e=Math.min(n/c,r/u);c=Math.round(c*e),u=Math.round(u*e)}const l=document.createElement("canvas");l.width=c,l.height=u;l.getContext("2d").drawImage(s,0,0,c,u);const d=await function(e,t,n){return new Promise((r,o)=>{e.toBlob(e=>{e?r(e):o(new Error("Canvas 转换失败"))},t,n)})}(l,o,a);return{blob:d,width:c,height:u,originalSize:i,compressedSize:d.size,ratio:i>0?d.size/i:0}}async function St(e,t=.85){return(await $t(e,{maxWidth:1/0,maxHeight:1/0,format:"image/webp",quality:t})).blob}async function Mt(e,t,n=.85){return $t(e,{maxWidth:t,maxHeight:t,format:"image/webp",quality:n})}async function Dt(e,t,n=.85){if("image/webp"===e.type){const n=await vt(e);if(!(n.width>t||n.height>t))return{blob:e,width:n.width,height:n.height,originalSize:e.size,compressedSize:e.size,ratio:1}}return Mt(e,t,n)}async function vt(e){return e instanceof HTMLImageElement?e:new Promise((t,n)=>{const r=new Image,o=URL.createObjectURL(e);r.onload=()=>{URL.revokeObjectURL(o),t(r)},r.onerror=()=>{URL.revokeObjectURL(o),n(new Error("图片加载失败"))},r.src=o})}async function xt(e,t){const n=(new TextEncoder).encode(t);if(32!==n.length)throw new Error("AES-256 密钥必须是 32 字节");const r=Uint8Array.from(atob(e),e=>e.charCodeAt(0)),o=r.slice(0,12),a=r.slice(12),i=await crypto.subtle.importKey("raw",n,{name:"AES-GCM"},!1,["decrypt"]),s=await crypto.subtle.decrypt({name:"AES-GCM",iv:o},i,a),c=(new TextDecoder).decode(s);return JSON.parse(c)}export{$ as HttpError,st as addData,xt as aesGcmDecrypt,Ye as alphanumericId,Ae as binaryId,b as cancelIdleCallback,d as cancelRafInterval,u as cancelRafTimeout,g as cancelRafTimes,h as cancelRecursiveInterval,ft as clearStore,it as closeAllDB,at as closeDB,$t as compressImage,wt as countData,M as createHttpClient,tt as createTransport,He as createWebSocket,Ve as createWorker,dt as deleteData,gt as deleteDataByIndex,yt as deleteDatabase,V as format,A as formatDate,R as formatDateOnly,P as formatDateTime,I as formatDateTimeColon,H as formatHourMinute,O as formatNumber,Y as formatRelativeTime,bt as formatStorageSize,_ as formatTimeOnly,U as formatYearMonth,lt as getAllData,ot as getDB,ut as getData,ht as getDataByIndex,mt as getDataByIndexRange,N as getDay,G as getDaysAgoStart,F as getHour,W as getMinute,L as getMonth,B as getSecond,pt as getStorageEstimate,q as getTimestamp,Z as getTodayStart,Q as getType,z as getYear,J as getYesterdayStart,D as http,p as idleCallback,rt as initDB,te as isArray,ve as isBankCard,ee as isBoolean,De as isCarNumber,$e as isChinese,oe as isDate,he as isEmail,de as isEmptyValue,re as isFunction,ge as isIdCard,ye as isIp,be as isLetter,fe as isNotEmpty,ce as isNull,le as isNullOrUndefined,X as isNumber,pe as isNumericString,ne as isObject,me as isPhone,xe as isPostalCode,se as isPromise,ae as isRegExp,K as isString,Me as isStrongPassword,ie as isSymbol,et as isTransportSupported,ue as isUndefined,we as isUrl,Se as isUsername,C as numberToChinese,Ce as numericId,ct as putData,l as rafInterval,c as rafTimeout,m as rafTimes,f as recursiveInterval,Mt as resizeAndCompress,Qe as runInWorker,Ge as safe,Be as safeExecute,qe as safeExecuteAsync,Ze as safeGet,ze as safeJsonParse,Le as safeJsonStringify,Fe as safeLocalStorage,We as safeSessionStorage,Je as safeSet,_e as shortId,Dt as smartCompress,Re as snowflakeId,ke as timestampId,St as toWebP,Ue as uid,je as uuid,Ee as validate};
|
package/lib/index.umd.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).SharedJS={})}(this,function(e){"use strict";const t=new Map;let n=0;const r=new Map;let o=0;const a=new Map;let i=0;const s=new Map;let c=0;function u(e,r){const o=++n,a=performance.now();return t.set(o,requestAnimationFrame(function n(i){t.has(o)&&(i-a>=r?(t.delete(o),e()):t.set(o,requestAnimationFrame(n)))})),o}function l(e){const n=t.get(e);void 0!==n&&(cancelAnimationFrame(n),t.delete(e))}const d=new Map;let f=0;class h extends Error{constructor(e,t,n){super(e),this.name="HttpError",this.status=t,this.response=n}}function m(){const e=[];return{handlers:e,use:t=>(e.push(t),e.length-1),eject(t){e[t]&&e.splice(t,1)}}}function g(e={}){const t={baseURL:e.baseURL||"",timeout:e.timeout||15e3,headers:e.headers||{},withCredentials:e.withCredentials??!1,retry:e.retry??0},n={request:m(),response:m()};async function r(e,t){const r=function(e,t){if(!t||0===Object.keys(t).length)return e;const n=Object.keys(t).filter(e=>void 0!==t[e]&&null!==t[e]).map(e=>`${encodeURIComponent(e)}=${encodeURIComponent(t[e])}`).join("&");return e+(e.includes("?")?"&":"?")+n}(e.url,e.params),o=function(e){const t={method:e.method||"GET",headers:{"Content-Type":"application/json;charset=UTF-8",...e.headers},credentials:e.withCredentials?"include":"same-origin"};return e.data&&(e.data instanceof FormData?(t.body=e.data,delete t.headers["Content-Type"]):"object"==typeof e.data?t.body=JSON.stringify(e.data):t.body=e.data),t}(e),a=u(()=>t.abort(),e.timeout);try{const i=await fetch(r,{...o,signal:t.signal});if(l(a),!i.ok)throw new h(`请求失败 (${i.status})`,i.status,i);let s=await async function(e,t){switch(t){case"blob":return e.blob();case"text":return e.text();case"arrayBuffer":return e.arrayBuffer();default:return e.json()}}(i,e.responseType);for(const e of n.response.handlers)if(e.onFulfilled)try{s=await e.onFulfilled(s)}catch(t){if(e.onRejected)return await e.onRejected(t);throw t}return s}catch(e){if(l(a),"AbortError"===e.name)throw new h("请求超时或已取消");throw e}}function o(e){const o=new AbortController,a=(async()=>{let a=function(e){return{...e,url:t.baseURL+e.url,timeout:e.timeout||t.timeout,headers:{...t.headers,...e.headers},withCredentials:e.withCredentials??t.withCredentials}}(e);for(const e of n.request.handlers)if(e.onFulfilled)try{a=await e.onFulfilled(a)}catch(t){throw e.onRejected&&await e.onRejected(t),t}a.signal&&a.signal.addEventListener("abort",()=>o.abort());const i=t.retry||0;let s;for(let e=0;e<=i;e++)try{return await r(a,o)}catch(t){if(s=t,"请求超时或已取消"===t.message||o.signal.aborted)break;if(e===i)break}for(const e of n.response.handlers)if(e.onRejected)return await e.onRejected(s);throw s})();return a.abort=()=>o.abort(),a}return{interceptors:n,request:o,get:function(e,t,n){return o({...n,url:e,method:"GET",params:t})},post:function(e,t,n){return o({...n,url:e,method:"POST",data:t})},put:function(e,t,n){return o({...n,url:e,method:"PUT",data:t})},delete:function(e,t,n){return o({...n,url:e,method:"DELETE",params:t})},options:function(e,t){return o({...t,url:e,method:"OPTIONS"})},patch:function(e,t,n){return o({...n,url:e,method:"PATCH",data:t})},upload:function(e){const{url:n,file:r,name:a="file",data:i={},headers:s={},onProgress:c,signal:u}=e,l=new FormData;if(l.append(a,r),Object.keys(i).forEach(e=>l.append(e,i[e])),!c)return o({url:n,method:"POST",data:l,headers:s,signal:u});const d=new AbortController;u&&u.addEventListener("abort",()=>d.abort());const f=function(e,t,n,r,o){return new Promise((a,i)=>{const s=new XMLHttpRequest;s.upload.addEventListener("progress",e=>{e.lengthComputable&&r(Math.round(e.loaded/e.total*100))}),s.addEventListener("load",()=>{if(s.status>=200&&s.status<300)try{a(JSON.parse(s.responseText))}catch{a(s.responseText)}else i(new h(`上传失败 (${s.status})`,s.status))}),s.addEventListener("error",()=>i(new h("上传失败"))),o&&o.addEventListener("abort",()=>{s.abort(),i(new h("上传已取消"))}),s.open("POST",e),Object.keys(n).forEach(e=>s.setRequestHeader(e,n[e])),s.send(t)})}(t.baseURL+n,l,s,c,d.signal);return f.abort=()=>d.abort(),f}}}const w=g();"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;function y(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var p={exports:{}};!function(e){e.exports=function(){var e=1e3,t=6e4,n=36e5,r="millisecond",o="second",a="minute",i="hour",s="day",c="week",u="month",l="quarter",d="year",f="date",h="Invalid Date",m=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,g=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,w={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(e){var t=["th","st","nd","rd"],n=e%100;return"["+e+(t[(n-20)%10]||t[n]||t[0])+"]"}},y=function(e,t,n){var r=String(e);return!r||r.length>=t?e:""+Array(t+1-r.length).join(n)+e},p={s:y,z:function(e){var t=-e.utcOffset(),n=Math.abs(t),r=Math.floor(n/60),o=n%60;return(t<=0?"+":"-")+y(r,2,"0")+":"+y(o,2,"0")},m:function e(t,n){if(t.date()<n.date())return-e(n,t);var r=12*(n.year()-t.year())+(n.month()-t.month()),o=t.clone().add(r,u),a=n-o<0,i=t.clone().add(r+(a?-1:1),u);return+(-(r+(n-o)/(a?o-i:i-o))||0)},a:function(e){return e<0?Math.ceil(e)||0:Math.floor(e)},p:function(e){return{M:u,y:d,w:c,d:s,D:f,h:i,m:a,s:o,ms:r,Q:l}[e]||String(e||"").toLowerCase().replace(/s$/,"")},u:function(e){return void 0===e}},b="en",$={};$[b]=w;var S="$isDayjsObject",D=function(e){return e instanceof E||!(!e||!e[S])},M=function e(t,n,r){var o;if(!t)return b;if("string"==typeof t){var a=t.toLowerCase();$[a]&&(o=a),n&&($[a]=n,o=a);var i=t.split("-");if(!o&&i.length>1)return e(i[0])}else{var s=t.name;$[s]=t,o=s}return!r&&o&&(b=o),o||!r&&b},v=function(e,t){if(D(e))return e.clone();var n="object"==typeof t?t:{};return n.date=e,n.args=arguments,new E(n)},x=p;x.l=M,x.i=D,x.w=function(e,t){return v(e,{locale:t.$L,utc:t.$u,x:t.$x,$offset:t.$offset})};var E=function(){function w(e){this.$L=M(e.locale,null,!0),this.parse(e),this.$x=this.$x||e.x||{},this[S]=!0}var y=w.prototype;return y.parse=function(e){this.$d=function(e){var t=e.date,n=e.utc;if(null===t)return new Date(NaN);if(x.u(t))return new Date;if(t instanceof Date)return new Date(t);if("string"==typeof t&&!/Z$/i.test(t)){var r=t.match(m);if(r){var o=r[2]-1||0,a=(r[7]||"0").substring(0,3);return n?new Date(Date.UTC(r[1],o,r[3]||1,r[4]||0,r[5]||0,r[6]||0,a)):new Date(r[1],o,r[3]||1,r[4]||0,r[5]||0,r[6]||0,a)}}return new Date(t)}(e),this.init()},y.init=function(){var e=this.$d;this.$y=e.getFullYear(),this.$M=e.getMonth(),this.$D=e.getDate(),this.$W=e.getDay(),this.$H=e.getHours(),this.$m=e.getMinutes(),this.$s=e.getSeconds(),this.$ms=e.getMilliseconds()},y.$utils=function(){return x},y.isValid=function(){return!(this.$d.toString()===h)},y.isSame=function(e,t){var n=v(e);return this.startOf(t)<=n&&n<=this.endOf(t)},y.isAfter=function(e,t){return v(e)<this.startOf(t)},y.isBefore=function(e,t){return this.endOf(t)<v(e)},y.$g=function(e,t,n){return x.u(e)?this[t]:this.set(n,e)},y.unix=function(){return Math.floor(this.valueOf()/1e3)},y.valueOf=function(){return this.$d.getTime()},y.startOf=function(e,t){var n=this,r=!!x.u(t)||t,l=x.p(e),h=function(e,t){var o=x.w(n.$u?Date.UTC(n.$y,t,e):new Date(n.$y,t,e),n);return r?o:o.endOf(s)},m=function(e,t){return x.w(n.toDate()[e].apply(n.toDate("s"),(r?[0,0,0,0]:[23,59,59,999]).slice(t)),n)},g=this.$W,w=this.$M,y=this.$D,p="set"+(this.$u?"UTC":"");switch(l){case d:return r?h(1,0):h(31,11);case u:return r?h(1,w):h(0,w+1);case c:var b=this.$locale().weekStart||0,$=(g<b?g+7:g)-b;return h(r?y-$:y+(6-$),w);case s:case f:return m(p+"Hours",0);case i:return m(p+"Minutes",1);case a:return m(p+"Seconds",2);case o:return m(p+"Milliseconds",3);default:return this.clone()}},y.endOf=function(e){return this.startOf(e,!1)},y.$set=function(e,t){var n,c=x.p(e),l="set"+(this.$u?"UTC":""),h=(n={},n[s]=l+"Date",n[f]=l+"Date",n[u]=l+"Month",n[d]=l+"FullYear",n[i]=l+"Hours",n[a]=l+"Minutes",n[o]=l+"Seconds",n[r]=l+"Milliseconds",n)[c],m=c===s?this.$D+(t-this.$W):t;if(c===u||c===d){var g=this.clone().set(f,1);g.$d[h](m),g.init(),this.$d=g.set(f,Math.min(this.$D,g.daysInMonth())).$d}else h&&this.$d[h](m);return this.init(),this},y.set=function(e,t){return this.clone().$set(e,t)},y.get=function(e){return this[x.p(e)]()},y.add=function(r,l){var f,h=this;r=Number(r);var m=x.p(l),g=function(e){var t=v(h);return x.w(t.date(t.date()+Math.round(e*r)),h)};if(m===u)return this.set(u,this.$M+r);if(m===d)return this.set(d,this.$y+r);if(m===s)return g(1);if(m===c)return g(7);var w=(f={},f[a]=t,f[i]=n,f[o]=e,f)[m]||1,y=this.$d.getTime()+r*w;return x.w(y,this)},y.subtract=function(e,t){return this.add(-1*e,t)},y.format=function(e){var t=this,n=this.$locale();if(!this.isValid())return n.invalidDate||h;var r=e||"YYYY-MM-DDTHH:mm:ssZ",o=x.z(this),a=this.$H,i=this.$m,s=this.$M,c=n.weekdays,u=n.months,l=n.meridiem,d=function(e,n,o,a){return e&&(e[n]||e(t,r))||o[n].slice(0,a)},f=function(e){return x.s(a%12||12,e,"0")},m=l||function(e,t,n){var r=e<12?"AM":"PM";return n?r.toLowerCase():r};return r.replace(g,function(e,r){return r||function(e){switch(e){case"YY":return String(t.$y).slice(-2);case"YYYY":return x.s(t.$y,4,"0");case"M":return s+1;case"MM":return x.s(s+1,2,"0");case"MMM":return d(n.monthsShort,s,u,3);case"MMMM":return d(u,s);case"D":return t.$D;case"DD":return x.s(t.$D,2,"0");case"d":return String(t.$W);case"dd":return d(n.weekdaysMin,t.$W,c,2);case"ddd":return d(n.weekdaysShort,t.$W,c,3);case"dddd":return c[t.$W];case"H":return String(a);case"HH":return x.s(a,2,"0");case"h":return f(1);case"hh":return f(2);case"a":return m(a,i,!0);case"A":return m(a,i,!1);case"m":return String(i);case"mm":return x.s(i,2,"0");case"s":return String(t.$s);case"ss":return x.s(t.$s,2,"0");case"SSS":return x.s(t.$ms,3,"0");case"Z":return o}return null}(e)||o.replace(":","")})},y.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},y.diff=function(r,f,h){var m,g=this,w=x.p(f),y=v(r),p=(y.utcOffset()-this.utcOffset())*t,b=this-y,$=function(){return x.m(g,y)};switch(w){case d:m=$()/12;break;case u:m=$();break;case l:m=$()/3;break;case c:m=(b-p)/6048e5;break;case s:m=(b-p)/864e5;break;case i:m=b/n;break;case a:m=b/t;break;case o:m=b/e;break;default:m=b}return h?m:x.a(m)},y.daysInMonth=function(){return this.endOf(u).$D},y.$locale=function(){return $[this.$L]},y.locale=function(e,t){if(!e)return this.$L;var n=this.clone(),r=M(e,t,!0);return r&&(n.$L=r),n},y.clone=function(){return x.w(this.$d,this)},y.toDate=function(){return new Date(this.valueOf())},y.toJSON=function(){return this.isValid()?this.toISOString():null},y.toISOString=function(){return this.$d.toISOString()},y.toString=function(){return this.$d.toUTCString()},w}(),T=E.prototype;return v.prototype=T,[["$ms",r],["$s",o],["$m",a],["$H",i],["$W",s],["$M",u],["$y",d],["$D",f]].forEach(function(e){T[e[1]]=function(t){return this.$g(t,e[0],e[1])}}),v.extend=function(e,t){return e.$i||(e(t,E,v),e.$i=!0),v},v.locale=M,v.isDayjs=D,v.unix=function(e){return v(1e3*e)},v.en=$[b],v.Ls=$,v.p={},v}()}(p);var b=y(p.exports);function $(e,t={}){const{decimals:n=0,prefix:r="",suffix:o=""}=t,a="string"==typeof e?parseFloat(e):e;if(isNaN(a))return"";const i=a.toFixed(n),[s,c]=i.split("."),u=s.replace(/\B(?=(\d{3})+(?!\d))/g,",");return r+(c?`${u}.${c}`:u)+o}const S=["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"],D=["","拾","佰","仟"],M=["","万","亿","兆"];function v(e){const t="string"==typeof e?parseFloat(e):e;if(isNaN(t))return"";if(0===t)return"零元整";const n=t<0,r=Math.abs(t),[o,a=""]=r.toFixed(2).split(".");let i="";if("0"!==o){const e=o,t=e.length;let n=!1;for(let r=0;r<t;r++){const o=parseInt(e[r]),a=t-r-1,s=a%4,c=Math.floor(a/4);0===o?(n=!0,0===s&&c>0&&(i+=M[c])):(n&&(i+=S[0],n=!1),i+=S[o]+D[s],0===s&&c>0&&(i+=M[c]))}i+="元"}const s=parseInt(a[0]||"0"),c=parseInt(a[1]||"0");return 0===s&&0===c?i+="整":(s>0?i+=S[s]+"角":c>0&&(i+="零"),c>0&&(i+=S[c]+"分")),n?"负"+i:i}function x(e){const t=b(e),n=b(),r=n.diff(t,"second"),o=n.diff(t,"minute"),a=n.diff(t,"hour"),i=n.diff(t,"day");return r<60?"刚刚":o<60?`${o}分钟前`:a<24?`${a}小时前`:i<7?`${i}天前`:t.year()===n.year()?t.format("M月D日"):t.format("YYYY年M月D日")}function E(e,t="YYYY-MM-DD HH:mm:ss"){return b(e).format(t)}function T(e){return b(e).format("YYYY:MM:DD HH:mm:ss")}function O(e){return b(e).format("YYYY-MM-DD HH:mm:ss")}function I(e){return b(e).format("YYYY-MM-DD")}function C(e){return b(e).format("HH:mm:ss")}function k(e){return b(e).format("YYYY-MM")}function j(e){return b(e).format("HH:mm")}function P(e){return b(e).format("YYYY")}function R(e){return b(e).format("MM")}function Y(e){return b(e).format("DD")}function A(e){return b(e).format("HH")}function H(e){return b(e).format("mm")}function U(e){return b(e).format("ss")}function _(){return Date.now()}function N(){return b().startOf("day").valueOf()}function z(){return b().subtract(1,"day").startOf("day").valueOf()}function L(e){return b().subtract(e,"day").startOf("day").valueOf()}const B={formatNumber:$,numberToChinese:v,formatRelativeTime:x,formatDate:E,formatDateTimeColon:T,formatDateTime:O,formatDateOnly:I,formatTimeOnly:C,formatYearMonth:k,formatHourMinute:j,getYear:P,getMonth:R,getDay:Y,getHour:A,getMinute:H,getSecond:U,getTimestamp:_,getTodayStart:N,getYesterdayStart:z,getDaysAgoStart:L};function F(e){return Object.prototype.toString.call(e).slice(8,-1)}function W(e){return"String"===F(e)}function q(e){return"Number"===F(e)&&!isNaN(e)}function J(e){return"Boolean"===F(e)}function Z(e){return"Array"===F(e)}function G(e){return"Object"===F(e)}function V(e){return"Function"===F(e)}function Q(e){return"Date"===F(e)}function X(e){return"RegExp"===F(e)}function K(e){return"Symbol"===F(e)}function ee(e){return"Promise"===F(e)}function te(e){return"Null"===F(e)}function ne(e){return"Undefined"===F(e)}function re(e){return te(e)||ne(e)}function oe(e){return!!re(e)||(W(e)?""===e.trim():Z(e)?0===e.length:!!G(e)&&0===Object.keys(e).length)}function ae(e){return!oe(e)}function ie(e){return/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}$/.test(e)}function se(e){return/^1[3-9]\d{9}$/.test(e)}function ce(e){return/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(e)}function ue(e){return/^(https?:\/\/)?([\da-z.-]+)\.([a-z.]{2,6})([/\w .-]*)*\/?(\?[;&a-z\d%_.~+=-]*)?(\#[-a-z\d_]*)?$/i.test(e)}function le(e){return/^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$/.test(e)}function de(e){return/^\d+$/.test(e)}function fe(e){return/^[A-Za-z]+$/.test(e)}function he(e){return/^[\u4e00-\u9fa5]+$/.test(e)}function me(e){return/^[a-zA-Z][a-zA-Z0-9_]{3,15}$/.test(e)}function ge(e){return/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{6,20}$/.test(e)}function we(e){return/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-HJ-NP-Z][A-HJ-NP-Z0-9]{4,5}[A-HJ-NP-Z0-9挂学警港澳]$/.test(e)}function ye(e){return/^\d{16,19}$/.test(e)}function pe(e){return/^\d{6}$/.test(e)}const be={getType:F,isString:W,isNumber:q,isBoolean:J,isArray:Z,isObject:G,isFunction:V,isDate:Q,isRegExp:X,isSymbol:K,isPromise:ee,isNull:te,isUndefined:ne,isNullOrUndefined:re,isEmptyValue:oe,isNotEmpty:ae,isEmail:ie,isPhone:se,isIdCard:ce,isUrl:ue,isIp:le,isNumericString:de,isLetter:fe,isChinese:he,isUsername:me,isStrongPassword:ge,isCarNumber:we,isBankCard:ye,isPostalCode:pe},$e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",Se="0123456789";function De(e=!1){if("undefined"!=typeof crypto&&crypto.randomUUID){const t=crypto.randomUUID();return e?t.replace(/-/g,""):t}const t="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)});return e?t.replace(/-/g,""):t}function Me(e=6){return Date.now().toString()+xe(e)}function ve(e=9){const t=Math.max(1,Math.min(20,e));let n=Se[Math.floor(9*Math.random())+1];for(let e=1;e<t;e++)n+=Se[Math.floor(10*Math.random())];return n}function xe(e=8){let t="";for(let n=0;n<e;n++)t+=$e[Math.floor(62*Math.random())];return t}function Ee(e=16){const t=Math.ceil(e/2);if("undefined"!=typeof crypto&&crypto.getRandomValues){const n=new Uint8Array(t);crypto.getRandomValues(n);let r="";for(let e=0;e<n.length;e++)r+=n[e].toString(16).padStart(2,"0");return r.slice(0,e)}let n="";for(let t=0;t<e;t++)n+="0123456789abcdef"[Math.floor(16*Math.random())];return n}let Te=-1,Oe=0;function Ie(){let e=Date.now();if(e===Te){if(Oe=Oe+1&4095,0===Oe)for(;e<=Te;)e=Date.now()}else Oe=0;return Te=e,e.toString()+Oe.toString().padStart(6,"0")}function Ce(e=8){let t="",n=1e6*Date.now()+Math.floor(1e6*Math.random());for(;n>0;)t=$e[n%62]+t,n=Math.floor(n/62);for(;t.length<e;)t=$e[Math.floor(62*Math.random())]+t;return t}const ke={uuid:De,timestampId:Me,numericId:ve,alphanumericId:xe,binaryId:Ee,snowflakeId:Ie,shortId:Ce};function je(e,t=null){try{return JSON.parse(e)}catch{return t}}function Pe(e,t=null,n){try{return JSON.stringify(e,null,n)}catch{return t}}function Re(e){return{get(t,n=null){try{if(!e)return n;const r=e.getItem(t);return null===r?n:je(r,n)}catch{return n}},getString(t,n=""){try{return e?e.getItem(t)??n:n}catch{return n}},set(t,n){try{if(!e)return!1;const r=Pe(n);return null!==r&&(e.setItem(t,r),!0)}catch{return!1}},remove(t){try{return!!e&&(e.removeItem(t),!0)}catch{return!1}},clear(){try{return!!e&&(e.clear(),!0)}catch{return!1}},has(t){try{return!!e&&null!==e.getItem(t)}catch{return!1}},keys(){try{if(!e)return[];const t=[];for(let n=0;n<e.length;n++){const r=e.key(n);null!==r&&t.push(r)}return t}catch{return[]}},size(){try{return e?e.length:0}catch{return 0}}}}const Ye=Re(function(){try{return"undefined"!=typeof window?window.localStorage:null}catch{return null}}()),Ae=Re(function(){try{return"undefined"!=typeof window?window.sessionStorage:null}catch{return null}}());function He(e,t){try{return e()}catch{return t}}async function Ue(e,t){try{return await e()}catch{return t}}function _e(e,t,n=void 0){try{if(null==e)return n;const r=t.replace(/\[(\d+)\]/g,".$1").split(".");let o=e;for(const e of r){if(null==o)return n;o=o[e]}return void 0===o?n:o}catch{return n}}function Ne(e,t,n){try{if(null==e||"object"!=typeof e)return!1;const r=t.replace(/\[(\d+)\]/g,".$1").split(".");let o=e;for(let e=0;e<r.length-1;e++){const t=r[e],n=r[e+1],a=/^\d+$/.test(n);null==o[t]&&(o[t]=a?[]:{}),o=o[t]}return o[r[r.length-1]]=n,!0}catch{return!1}}const ze={jsonParse:je,jsonStringify:Pe,localStorage:Ye,sessionStorage:Ae,execute:He,executeAsync:Ue,get:_e,set:Ne};function Le(e){const t=function(e){const t=`\n const fn = ${e.toString()};\n self.onmessage = async (e) => {\n try {\n const result = await fn(e.data);\n self.postMessage({ type: '__result__', data: result });\n } catch (error) {\n self.postMessage({ type: '__error__', error: error.message });\n }\n };\n `,n=new Blob([t],{type:"application/javascript"});return URL.createObjectURL(n)}(e),n=new Worker(t),r=new Set,o=new Set;let a=null,i=null;return n.onmessage=e=>{const{type:t,data:n,error:o}=e.data;"__result__"===t?(a?.(n),a=null,i=null):"__error__"===t?(i?.(new Error(o)),a=null,i=null):r.forEach(t=>t(e.data))},n.onerror=e=>{i?.(e),a=null,i=null,o.forEach(t=>t(e))},{run:e=>new Promise((t,r)=>{a=t,i=r,n.postMessage(e)}),postMessage(e){n.postMessage(e)},onMessage:e=>(r.add(e),()=>r.delete(e)),onError:e=>(o.add(e),()=>o.delete(e)),terminate(){n.terminate(),URL.revokeObjectURL(t),r.clear(),o.clear()}}}const Be=new TextEncoder;function Fe(e,t){const n=new Set;let r=null,o=!1;if(e){const t=e.getReader();(async()=>{try{for(;!o;){const{value:e,done:r}=await t.read();if(r)break;e&&n.forEach(t=>t(e))}}catch{}})()}return{async send(e){if(!t||o)return;r||(r=t.getWriter());const n="string"==typeof e?Be.encode(e):e;await r.write(n)},onMessage:e=>(n.add(e),()=>n.delete(e)),close(){o=!0,r?.close(),n.clear()},getReadable:()=>e,getWritable:()=>t}}function We(){return"undefined"!=typeof WebTransport}new TextDecoder;const qe=new Map;function Je(e){const t=qe.get(e);t&&(t.close(),qe.delete(e))}async function Ze(e,t={}){const{maxWidth:n=1e3,maxHeight:r=1e3,format:o="image/webp",quality:a=.85}=t;let i=0;(e instanceof File||e instanceof Blob)&&(i=e.size);const s=await Ve(e);let{width:c,height:u}=s;if(c>n||u>r){const e=Math.min(n/c,r/u);c=Math.round(c*e),u=Math.round(u*e)}const l=document.createElement("canvas");l.width=c,l.height=u;l.getContext("2d").drawImage(s,0,0,c,u);const d=await function(e,t,n){return new Promise((r,o)=>{e.toBlob(e=>{e?r(e):o(new Error("Canvas 转换失败"))},t,n)})}(l,o,a);return{blob:d,width:c,height:u,originalSize:i,compressedSize:d.size,ratio:i>0?d.size/i:0}}async function Ge(e,t,n=.85){return Ze(e,{maxWidth:t,maxHeight:t,format:"image/webp",quality:n})}async function Ve(e){return e instanceof HTMLImageElement?e:new Promise((t,n)=>{const r=new Image,o=URL.createObjectURL(e);r.onload=()=>{URL.revokeObjectURL(o),t(r)},r.onerror=()=>{URL.revokeObjectURL(o),n(new Error("图片加载失败"))},r.src=o})}e.HttpError=h,e.addData=function(e,t,n){return new Promise((r,o)=>{const a=qe.get(e);if(!a)return void o(new Error(`Database "${e}" not initialized`));const i=a.transaction([t],"readwrite").objectStore(t).add(n);i.onsuccess=()=>r(i.result),i.onerror=()=>o(new Error(`Add data failed: ${i.error}`))})},e.alphanumericId=xe,e.binaryId=Ee,e.cancelIdleCallback=function(e){const t=d.get(e);void 0!==t&&(void 0!==window.cancelIdleCallback?window.cancelIdleCallback(t):clearTimeout(t),d.delete(e))},e.cancelRafInterval=function(e){const t=r.get(e);void 0!==t&&(cancelAnimationFrame(t),r.delete(e))},e.cancelRafTimeout=l,e.cancelRafTimes=function(e){const t=s.get(e);t&&(t.cancelled=!0,l(t.currentRafId),s.delete(e))},e.cancelRecursiveInterval=function(e){const t=a.get(e);void 0!==t&&(clearTimeout(t),a.delete(e))},e.clearStore=function(e,t){return new Promise((n,r)=>{const o=qe.get(e);if(!o)return void r(new Error(`Database "${e}" not initialized`));const a=o.transaction([t],"readwrite").objectStore(t).clear();a.onsuccess=()=>n(),a.onerror=()=>r(new Error(`Clear store failed: ${a.error}`))})},e.closeAllDB=function(){qe.forEach((e,t)=>{e.close()}),qe.clear()},e.closeDB=Je,e.compressImage=Ze,e.countData=function(e,t){return new Promise((n,r)=>{const o=qe.get(e);if(!o)return void r(new Error(`Database "${e}" not initialized`));const a=o.transaction([t],"readonly").objectStore(t).count();a.onsuccess=()=>n(a.result),a.onerror=()=>r(new Error(`Count data failed: ${a.error}`))})},e.createHttpClient=g,e.createTransport=function(e){const{url:t,allowPooling:n,congestionControl:r}=e;if(!We())throw new Error("当前浏览器不支持 WebTransport");let o="connecting",a=null;const i=new Set,s=new Set,c=new Set,u=new Set,l=new Set,d={};return void 0!==n&&(d.allowPooling=n),r&&(d.congestionControl=r),a=new WebTransport(t,d),a.closed.then(e=>{o="closed",u.forEach(t=>t({closeCode:e.closeCode??0,reason:e.reason??""}))}).catch(e=>{o="failed",l.forEach(t=>t(e))}),(async()=>{try{const e=a.datagrams.readable.getReader();for(;"connecting"===o||"connected"===o;){const{value:t,done:n}=await e.read();if(n)break;t&&i.forEach(e=>e(t))}}catch{}})(),(async()=>{try{const e=a.incomingBidirectionalStreams.getReader();for(;"connecting"===o||"connected"===o;){const{value:t,done:n}=await e.read();if(n)break;if(t){const e=Fe(t.readable,t.writable);s.forEach(t=>t(e))}}}catch{}})(),(async()=>{try{const e=a.incomingUnidirectionalStreams.getReader();for(;"connecting"===o||"connected"===o;){const{value:t,done:n}=await e.read();if(n)break;if(t){const e=Fe(t,null);c.forEach(t=>t(e))}}}catch{}})(),{async ready(){await a.ready,o="connected"},getState:()=>o,sendDatagram(e){if(!a||"connected"!==o)return;const t="string"==typeof e?Be.encode(e):e,n=a.datagrams.writable.getWriter();n.write(t),n.releaseLock()},onDatagram:e=>(i.add(e),()=>i.delete(e)),async createBidirectionalStream(){if(!a||"connected"!==o)throw new Error("连接未就绪");const e=await a.createBidirectionalStream();return Fe(e.readable,e.writable)},async createUnidirectionalStream(){if(!a||"connected"!==o)throw new Error("连接未就绪");return Fe(null,await a.createUnidirectionalStream())},onBidirectionalStream:e=>(s.add(e),()=>s.delete(e)),onUnidirectionalStream:e=>(c.add(e),()=>c.delete(e)),onClose:e=>(u.add(e),()=>u.delete(e)),onError:e=>(l.add(e),()=>l.delete(e)),close(e){a&&(a.close(e),o="closed",i.clear(),s.clear(),c.clear())},getTransport:()=>a}},e.createWebSocket=function(e){const{url:t,protocols:n,autoConnect:r=!0,reconnect:o=!0,reconnectInterval:a=3e3,reconnectMaxTimes:i=5,heartbeat:s=!1,heartbeatInterval:c=3e4,heartbeatMessage:d="ping",messageQueue:f=!1,messageQueueMax:h=100}=e;let m=null,g="disconnected",w=0,y=null,p=null,b=!1;const $=[],S=new Set,D=new Set,M=new Set,v=new Set,x=new Set;function E(){s&&(T(),p=u(()=>{if("connected"===g&&m){const e="function"==typeof d?d():d;m.send(e),E()}},c))}function T(){p&&(l(p),p=null)}function O(){o&&!b&&(-1!==i&&w>=i||(w++,x.forEach(e=>e(w)),y=u(()=>{I()},a)))}function I(){if("connecting"!==g&&"connected"!==g){b=!1,g="connecting";try{m=n?new WebSocket(t,n):new WebSocket(t),m.onopen=e=>{g="connected",w=0,E(),function(){for(;$.length>0&&"connected"===g&&m;){const e=$.shift();m.send(e)}}(),S.forEach(t=>t(e))},m.onmessage=e=>{let t=e.data;try{t=JSON.parse(e.data)}catch{}D.forEach(n=>n(t,e))},m.onerror=e=>{M.forEach(t=>t(e))},m.onclose=e=>{g="disconnected",m=null,T(),v.forEach(t=>t(e)),O()}}catch(e){g="disconnected",O()}}}return r&&I(),{getState:()=>g,getSocket:()=>m,connect:I,disconnect:function(e=1e3,t="manual close"){b=!0,g="disconnecting",y&&(l(y),y=null),T(),m&&(m.close(e,t),m=null),g="disconnected"},send:function(e){const t="object"==typeof e?JSON.stringify(e):e;"connected"===g&&m?m.send(t):f&&$.length<h&&$.push(t)},onOpen:function(e){return S.add(e),()=>S.delete(e)},onMessage:function(e){return D.add(e),()=>D.delete(e)},onError:function(e){return M.add(e),()=>M.delete(e)},onClose:function(e){return v.add(e),()=>v.delete(e)},onReconnect:function(e){return x.add(e),()=>x.delete(e)},offAll:function(){S.clear(),D.clear(),M.clear(),v.clear(),x.clear()}}},e.createWorker=Le,e.deleteData=function(e,t,n){return new Promise((r,o)=>{const a=qe.get(e);if(!a)return void o(new Error(`Database "${e}" not initialized`));const i=a.transaction([t],"readwrite").objectStore(t).delete(n);i.onsuccess=()=>r(),i.onerror=()=>o(new Error(`Delete data failed: ${i.error}`))})},e.deleteDataByIndex=function(e,t,n,r){return new Promise((o,a)=>{const i=qe.get(e);if(!i)return void a(new Error(`Database "${e}" not initialized`));const s=i.transaction([t],"readwrite").objectStore(t).index(n).openCursor(r);let c=0;s.onsuccess=e=>{const t=e.target.result;t?(t.delete(),c++,t.continue()):o(c)},s.onerror=()=>a(new Error(`Delete data by index failed: ${s.error}`))})},e.deleteDatabase=function(e){return new Promise((t,n)=>{Je(e);const r=indexedDB.deleteDatabase(e);r.onsuccess=()=>t(),r.onerror=()=>n(new Error(`Delete database failed: ${r.error}`)),r.onblocked=()=>n(new Error("Delete database blocked, please close other tabs using this database"))})},e.format=B,e.formatDate=E,e.formatDateOnly=I,e.formatDateTime=O,e.formatDateTimeColon=T,e.formatHourMinute=j,e.formatNumber=$,e.formatRelativeTime=x,e.formatStorageSize=function(e){if(!e)return"0 B";const t=["B","KB","MB","GB"];let n=e,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r++;return`${n.toFixed(2)} ${t[r]}`},e.formatTimeOnly=C,e.formatYearMonth=k,e.getAllData=function(e,t){return new Promise((n,r)=>{const o=qe.get(e);if(!o)return void r(new Error(`Database "${e}" not initialized`));const a=o.transaction([t],"readonly").objectStore(t).getAll();a.onsuccess=()=>n(a.result),a.onerror=()=>r(new Error(`Get all data failed: ${a.error}`))})},e.getDB=function(e){return qe.get(e)},e.getData=function(e,t,n){return new Promise((r,o)=>{const a=qe.get(e);if(!a)return void o(new Error(`Database "${e}" not initialized`));const i=a.transaction([t],"readonly").objectStore(t).get(n);i.onsuccess=()=>r(i.result),i.onerror=()=>o(new Error(`Get data failed: ${i.error}`))})},e.getDataByIndex=function(e,t,n,r){return new Promise((o,a)=>{const i=qe.get(e);if(!i)return void a(new Error(`Database "${e}" not initialized`));const s=i.transaction([t],"readonly").objectStore(t).index(n).getAll(r);s.onsuccess=()=>o(s.result),s.onerror=()=>a(new Error(`Get data by index failed: ${s.error}`))})},e.getDataByIndexRange=function(e,t,n,r){return new Promise((o,a)=>{const i=qe.get(e);if(!i)return void a(new Error(`Database "${e}" not initialized`));const s=i.transaction([t],"readonly").objectStore(t).index(n).getAll(r);s.onsuccess=()=>o(s.result),s.onerror=()=>a(new Error(`Get data by index range failed: ${s.error}`))})},e.getDay=Y,e.getDaysAgoStart=L,e.getHour=A,e.getMinute=H,e.getMonth=R,e.getSecond=U,e.getStorageEstimate=async function(){return"storage"in navigator&&"estimate"in navigator.storage?await navigator.storage.estimate():null},e.getTimestamp=_,e.getTodayStart=N,e.getType=F,e.getYear=P,e.getYesterdayStart=z,e.http=w,e.idleCallback=function(e,t){const n=++f;if("undefined"!=typeof requestIdleCallback){const r=requestIdleCallback(e,t);return d.set(n,r),n}const r=Date.now(),o=t?.timeout??0,a=window.setTimeout(()=>{const t=Date.now()-r,a={didTimeout:o>0&&t>=o,timeRemaining:()=>Math.max(0,50-(Date.now()-r))};d.delete(n),e(a)},1);return d.set(n,a),n},e.initDB=function(e){return new Promise((t,n)=>{const r=qe.get(e.name);if(r)return void t(r);const o=indexedDB.open(e.name,e.version);o.onupgradeneeded=t=>{const n=t.target.result;e.stores.forEach(e=>{n.objectStoreNames.contains(e.name)&&n.deleteObjectStore(e.name);const t=n.createObjectStore(e.name,{keyPath:e.keyPath,autoIncrement:e.autoIncrement||!1});e.indexes&&e.indexes.forEach(e=>{t.createIndex(e.name,e.keyPath,{unique:e.unique||!1})})})},o.onsuccess=n=>{const r=n.target.result;qe.set(e.name,r),t(r)},o.onerror=e=>{n(new Error(`Database init failed: ${e.target.error}`))}})},e.isArray=Z,e.isBankCard=ye,e.isBoolean=J,e.isCarNumber=we,e.isChinese=he,e.isDate=Q,e.isEmail=ie,e.isEmptyValue=oe,e.isFunction=V,e.isIdCard=ce,e.isIp=le,e.isLetter=fe,e.isNotEmpty=ae,e.isNull=te,e.isNullOrUndefined=re,e.isNumber=q,e.isNumericString=de,e.isObject=G,e.isPhone=se,e.isPostalCode=pe,e.isPromise=ee,e.isRegExp=X,e.isString=W,e.isStrongPassword=ge,e.isSymbol=K,e.isTransportSupported=We,e.isUndefined=ne,e.isUrl=ue,e.isUsername=me,e.numberToChinese=v,e.numericId=ve,e.putData=function(e,t,n){return new Promise((r,o)=>{const a=qe.get(e);if(!a)return void o(new Error(`Database "${e}" not initialized`));const i=a.transaction([t],"readwrite").objectStore(t).put(n);i.onsuccess=()=>r(i.result),i.onerror=()=>o(new Error(`Put data failed: ${i.error}`))})},e.rafInterval=function(e,t){const n=++o;let a=performance.now();return r.set(n,requestAnimationFrame(function o(i){r.has(n)&&(i-a>=t&&(a=i,e()),r.set(n,requestAnimationFrame(o)))})),n},e.rafTimeout=u,e.rafTimes=function(e,t,n){const r=++c;let o=0;return s.set(r,{currentRafId:0,cancelled:!1}),s.get(r).currentRafId=u(function a(){const i=s.get(r);i&&!i.cancelled&&(o++,e(o),o<n?i.currentRafId=u(a,t):s.delete(r))},t),r},e.recursiveInterval=function(e,t){const n=++i;return a.set(n,window.setTimeout(function r(){a.has(n)&&(e(),a.set(n,window.setTimeout(r,t)))},t)),n},e.resizeAndCompress=Ge,e.runInWorker=function(e,t,n){const r=Le(e),{timeout:o}=n||{};return new Promise((e,n)=>{let a;o&&(a=window.setTimeout(()=>{r.terminate(),n(new Error("Worker 执行超时"))},o)),r.run(t).then(t=>{a&&clearTimeout(a),r.terminate(),e(t)}).catch(e=>{a&&clearTimeout(a),r.terminate(),n(e)})})},e.safe=ze,e.safeExecute=He,e.safeExecuteAsync=Ue,e.safeGet=_e,e.safeJsonParse=je,e.safeJsonStringify=Pe,e.safeLocalStorage=Ye,e.safeSessionStorage=Ae,e.safeSet=Ne,e.shortId=Ce,e.smartCompress=async function(e,t,n=.85){if("image/webp"===e.type){const n=await Ve(e);if(!(n.width>t||n.height>t))return{blob:e,width:n.width,height:n.height,originalSize:e.size,compressedSize:e.size,ratio:1}}return Ge(e,t,n)},e.snowflakeId=Ie,e.timestampId=Me,e.toWebP=async function(e,t=.85){return(await Ze(e,{maxWidth:1/0,maxHeight:1/0,format:"image/webp",quality:t})).blob},e.uid=ke,e.uuid=De,e.validate=be});
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).SharedJS={})}(this,function(e){"use strict";const t=new Map;let n=0;const r=new Map;let o=0;const a=new Map;let i=0;const s=new Map;let c=0;function u(e,r){const o=++n,a=performance.now();return t.set(o,requestAnimationFrame(function n(i){t.has(o)&&(i-a>=r?(t.delete(o),e()):t.set(o,requestAnimationFrame(n)))})),o}function l(e){const n=t.get(e);void 0!==n&&(cancelAnimationFrame(n),t.delete(e))}const d=new Map;let f=0;class h extends Error{constructor(e,t,n){super(e),this.name="HttpError",this.status=t,this.response=n}}function m(){const e=[];return{handlers:e,use:t=>(e.push(t),e.length-1),eject(t){e[t]&&e.splice(t,1)}}}function g(e={}){const t={baseURL:e.baseURL||"",timeout:e.timeout||15e3,headers:e.headers||{},withCredentials:e.withCredentials??!1,retry:e.retry??0},n={request:m(),response:m()};async function r(e,t){const r=function(e,t){if(!t||0===Object.keys(t).length)return e;const n=Object.keys(t).filter(e=>void 0!==t[e]&&null!==t[e]).map(e=>`${encodeURIComponent(e)}=${encodeURIComponent(t[e])}`).join("&");return e+(e.includes("?")?"&":"?")+n}(e.url,e.params),o=function(e){const t={method:e.method||"GET",headers:{"Content-Type":"application/json;charset=UTF-8",...e.headers},credentials:e.withCredentials?"include":"same-origin"};return e.data&&(e.data instanceof FormData?(t.body=e.data,delete t.headers["Content-Type"]):"object"==typeof e.data?t.body=JSON.stringify(e.data):t.body=e.data),t}(e),a=u(()=>t.abort(),e.timeout);try{const i=await fetch(r,{...o,signal:t.signal});if(l(a),!i.ok)throw new h(`请求失败 (${i.status})`,i.status,i);let s=await async function(e,t){switch(t){case"blob":return e.blob();case"text":return e.text();case"arrayBuffer":return e.arrayBuffer();default:return e.json()}}(i,e.responseType);for(const e of n.response.handlers)if(e.onFulfilled)try{s=await e.onFulfilled(s)}catch(t){if(e.onRejected)return await e.onRejected(t);throw t}return s}catch(e){if(l(a),"AbortError"===e.name)throw new h("请求超时或已取消");throw e}}function o(e){const o=new AbortController,a=(async()=>{let a=function(e){return{...e,url:t.baseURL+e.url,timeout:e.timeout||t.timeout,headers:{...t.headers,...e.headers},withCredentials:e.withCredentials??t.withCredentials}}(e);for(const e of n.request.handlers)if(e.onFulfilled)try{a=await e.onFulfilled(a)}catch(t){throw e.onRejected&&await e.onRejected(t),t}a.signal&&a.signal.addEventListener("abort",()=>o.abort());const i=t.retry||0;let s;for(let e=0;e<=i;e++)try{return await r(a,o)}catch(t){if(s=t,"请求超时或已取消"===t.message||o.signal.aborted)break;if(e===i)break}for(const e of n.response.handlers)if(e.onRejected)return await e.onRejected(s);throw s})();return a.abort=()=>o.abort(),a}return{interceptors:n,request:o,get:function(e,t,n){return o({...n,url:e,method:"GET",params:t})},post:function(e,t,n){return o({...n,url:e,method:"POST",data:t})},put:function(e,t,n){return o({...n,url:e,method:"PUT",data:t})},delete:function(e,t,n){return o({...n,url:e,method:"DELETE",params:t})},options:function(e,t){return o({...t,url:e,method:"OPTIONS"})},patch:function(e,t,n){return o({...n,url:e,method:"PATCH",data:t})},upload:function(e){const{url:n,file:r,name:a="file",data:i={},headers:s={},onProgress:c,signal:u}=e,l=new FormData;if(l.append(a,r),Object.keys(i).forEach(e=>l.append(e,i[e])),!c)return o({url:n,method:"POST",data:l,headers:s,signal:u});const d=new AbortController;u&&u.addEventListener("abort",()=>d.abort());const f=function(e,t,n,r,o){return new Promise((a,i)=>{const s=new XMLHttpRequest;s.upload.addEventListener("progress",e=>{e.lengthComputable&&r(Math.round(e.loaded/e.total*100))}),s.addEventListener("load",()=>{if(s.status>=200&&s.status<300)try{a(JSON.parse(s.responseText))}catch{a(s.responseText)}else i(new h(`上传失败 (${s.status})`,s.status))}),s.addEventListener("error",()=>i(new h("上传失败"))),o&&o.addEventListener("abort",()=>{s.abort(),i(new h("上传已取消"))}),s.open("POST",e),Object.keys(n).forEach(e=>s.setRequestHeader(e,n[e])),s.send(t)})}(t.baseURL+n,l,s,c,d.signal);return f.abort=()=>d.abort(),f}}}const w=g();"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;function y(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var p={exports:{}};!function(e){e.exports=function(){var e=1e3,t=6e4,n=36e5,r="millisecond",o="second",a="minute",i="hour",s="day",c="week",u="month",l="quarter",d="year",f="date",h="Invalid Date",m=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,g=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,w={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(e){var t=["th","st","nd","rd"],n=e%100;return"["+e+(t[(n-20)%10]||t[n]||t[0])+"]"}},y=function(e,t,n){var r=String(e);return!r||r.length>=t?e:""+Array(t+1-r.length).join(n)+e},p={s:y,z:function(e){var t=-e.utcOffset(),n=Math.abs(t),r=Math.floor(n/60),o=n%60;return(t<=0?"+":"-")+y(r,2,"0")+":"+y(o,2,"0")},m:function e(t,n){if(t.date()<n.date())return-e(n,t);var r=12*(n.year()-t.year())+(n.month()-t.month()),o=t.clone().add(r,u),a=n-o<0,i=t.clone().add(r+(a?-1:1),u);return+(-(r+(n-o)/(a?o-i:i-o))||0)},a:function(e){return e<0?Math.ceil(e)||0:Math.floor(e)},p:function(e){return{M:u,y:d,w:c,d:s,D:f,h:i,m:a,s:o,ms:r,Q:l}[e]||String(e||"").toLowerCase().replace(/s$/,"")},u:function(e){return void 0===e}},b="en",S={};S[b]=w;var $="$isDayjsObject",D=function(e){return e instanceof E||!(!e||!e[$])},M=function e(t,n,r){var o;if(!t)return b;if("string"==typeof t){var a=t.toLowerCase();S[a]&&(o=a),n&&(S[a]=n,o=a);var i=t.split("-");if(!o&&i.length>1)return e(i[0])}else{var s=t.name;S[s]=t,o=s}return!r&&o&&(b=o),o||!r&&b},v=function(e,t){if(D(e))return e.clone();var n="object"==typeof t?t:{};return n.date=e,n.args=arguments,new E(n)},x=p;x.l=M,x.i=D,x.w=function(e,t){return v(e,{locale:t.$L,utc:t.$u,x:t.$x,$offset:t.$offset})};var E=function(){function w(e){this.$L=M(e.locale,null,!0),this.parse(e),this.$x=this.$x||e.x||{},this[$]=!0}var y=w.prototype;return y.parse=function(e){this.$d=function(e){var t=e.date,n=e.utc;if(null===t)return new Date(NaN);if(x.u(t))return new Date;if(t instanceof Date)return new Date(t);if("string"==typeof t&&!/Z$/i.test(t)){var r=t.match(m);if(r){var o=r[2]-1||0,a=(r[7]||"0").substring(0,3);return n?new Date(Date.UTC(r[1],o,r[3]||1,r[4]||0,r[5]||0,r[6]||0,a)):new Date(r[1],o,r[3]||1,r[4]||0,r[5]||0,r[6]||0,a)}}return new Date(t)}(e),this.init()},y.init=function(){var e=this.$d;this.$y=e.getFullYear(),this.$M=e.getMonth(),this.$D=e.getDate(),this.$W=e.getDay(),this.$H=e.getHours(),this.$m=e.getMinutes(),this.$s=e.getSeconds(),this.$ms=e.getMilliseconds()},y.$utils=function(){return x},y.isValid=function(){return!(this.$d.toString()===h)},y.isSame=function(e,t){var n=v(e);return this.startOf(t)<=n&&n<=this.endOf(t)},y.isAfter=function(e,t){return v(e)<this.startOf(t)},y.isBefore=function(e,t){return this.endOf(t)<v(e)},y.$g=function(e,t,n){return x.u(e)?this[t]:this.set(n,e)},y.unix=function(){return Math.floor(this.valueOf()/1e3)},y.valueOf=function(){return this.$d.getTime()},y.startOf=function(e,t){var n=this,r=!!x.u(t)||t,l=x.p(e),h=function(e,t){var o=x.w(n.$u?Date.UTC(n.$y,t,e):new Date(n.$y,t,e),n);return r?o:o.endOf(s)},m=function(e,t){return x.w(n.toDate()[e].apply(n.toDate("s"),(r?[0,0,0,0]:[23,59,59,999]).slice(t)),n)},g=this.$W,w=this.$M,y=this.$D,p="set"+(this.$u?"UTC":"");switch(l){case d:return r?h(1,0):h(31,11);case u:return r?h(1,w):h(0,w+1);case c:var b=this.$locale().weekStart||0,S=(g<b?g+7:g)-b;return h(r?y-S:y+(6-S),w);case s:case f:return m(p+"Hours",0);case i:return m(p+"Minutes",1);case a:return m(p+"Seconds",2);case o:return m(p+"Milliseconds",3);default:return this.clone()}},y.endOf=function(e){return this.startOf(e,!1)},y.$set=function(e,t){var n,c=x.p(e),l="set"+(this.$u?"UTC":""),h=(n={},n[s]=l+"Date",n[f]=l+"Date",n[u]=l+"Month",n[d]=l+"FullYear",n[i]=l+"Hours",n[a]=l+"Minutes",n[o]=l+"Seconds",n[r]=l+"Milliseconds",n)[c],m=c===s?this.$D+(t-this.$W):t;if(c===u||c===d){var g=this.clone().set(f,1);g.$d[h](m),g.init(),this.$d=g.set(f,Math.min(this.$D,g.daysInMonth())).$d}else h&&this.$d[h](m);return this.init(),this},y.set=function(e,t){return this.clone().$set(e,t)},y.get=function(e){return this[x.p(e)]()},y.add=function(r,l){var f,h=this;r=Number(r);var m=x.p(l),g=function(e){var t=v(h);return x.w(t.date(t.date()+Math.round(e*r)),h)};if(m===u)return this.set(u,this.$M+r);if(m===d)return this.set(d,this.$y+r);if(m===s)return g(1);if(m===c)return g(7);var w=(f={},f[a]=t,f[i]=n,f[o]=e,f)[m]||1,y=this.$d.getTime()+r*w;return x.w(y,this)},y.subtract=function(e,t){return this.add(-1*e,t)},y.format=function(e){var t=this,n=this.$locale();if(!this.isValid())return n.invalidDate||h;var r=e||"YYYY-MM-DDTHH:mm:ssZ",o=x.z(this),a=this.$H,i=this.$m,s=this.$M,c=n.weekdays,u=n.months,l=n.meridiem,d=function(e,n,o,a){return e&&(e[n]||e(t,r))||o[n].slice(0,a)},f=function(e){return x.s(a%12||12,e,"0")},m=l||function(e,t,n){var r=e<12?"AM":"PM";return n?r.toLowerCase():r};return r.replace(g,function(e,r){return r||function(e){switch(e){case"YY":return String(t.$y).slice(-2);case"YYYY":return x.s(t.$y,4,"0");case"M":return s+1;case"MM":return x.s(s+1,2,"0");case"MMM":return d(n.monthsShort,s,u,3);case"MMMM":return d(u,s);case"D":return t.$D;case"DD":return x.s(t.$D,2,"0");case"d":return String(t.$W);case"dd":return d(n.weekdaysMin,t.$W,c,2);case"ddd":return d(n.weekdaysShort,t.$W,c,3);case"dddd":return c[t.$W];case"H":return String(a);case"HH":return x.s(a,2,"0");case"h":return f(1);case"hh":return f(2);case"a":return m(a,i,!0);case"A":return m(a,i,!1);case"m":return String(i);case"mm":return x.s(i,2,"0");case"s":return String(t.$s);case"ss":return x.s(t.$s,2,"0");case"SSS":return x.s(t.$ms,3,"0");case"Z":return o}return null}(e)||o.replace(":","")})},y.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},y.diff=function(r,f,h){var m,g=this,w=x.p(f),y=v(r),p=(y.utcOffset()-this.utcOffset())*t,b=this-y,S=function(){return x.m(g,y)};switch(w){case d:m=S()/12;break;case u:m=S();break;case l:m=S()/3;break;case c:m=(b-p)/6048e5;break;case s:m=(b-p)/864e5;break;case i:m=b/n;break;case a:m=b/t;break;case o:m=b/e;break;default:m=b}return h?m:x.a(m)},y.daysInMonth=function(){return this.endOf(u).$D},y.$locale=function(){return S[this.$L]},y.locale=function(e,t){if(!e)return this.$L;var n=this.clone(),r=M(e,t,!0);return r&&(n.$L=r),n},y.clone=function(){return x.w(this.$d,this)},y.toDate=function(){return new Date(this.valueOf())},y.toJSON=function(){return this.isValid()?this.toISOString():null},y.toISOString=function(){return this.$d.toISOString()},y.toString=function(){return this.$d.toUTCString()},w}(),T=E.prototype;return v.prototype=T,[["$ms",r],["$s",o],["$m",a],["$H",i],["$W",s],["$M",u],["$y",d],["$D",f]].forEach(function(e){T[e[1]]=function(t){return this.$g(t,e[0],e[1])}}),v.extend=function(e,t){return e.$i||(e(t,E,v),e.$i=!0),v},v.locale=M,v.isDayjs=D,v.unix=function(e){return v(1e3*e)},v.en=S[b],v.Ls=S,v.p={},v}()}(p);var b=y(p.exports);function S(e,t={}){const{decimals:n=0,prefix:r="",suffix:o=""}=t,a="string"==typeof e?parseFloat(e):e;if(isNaN(a))return"";const i=a.toFixed(n),[s,c]=i.split("."),u=s.replace(/\B(?=(\d{3})+(?!\d))/g,",");return r+(c?`${u}.${c}`:u)+o}const $=["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"],D=["","拾","佰","仟"],M=["","万","亿","兆"];function v(e){const t="string"==typeof e?parseFloat(e):e;if(isNaN(t))return"";if(0===t)return"零元整";const n=t<0,r=Math.abs(t),[o,a=""]=r.toFixed(2).split(".");let i="";if("0"!==o){const e=o,t=e.length;let n=!1;for(let r=0;r<t;r++){const o=parseInt(e[r]),a=t-r-1,s=a%4,c=Math.floor(a/4);0===o?(n=!0,0===s&&c>0&&(i+=M[c])):(n&&(i+=$[0],n=!1),i+=$[o]+D[s],0===s&&c>0&&(i+=M[c]))}i+="元"}const s=parseInt(a[0]||"0"),c=parseInt(a[1]||"0");return 0===s&&0===c?i+="整":(s>0?i+=$[s]+"角":c>0&&(i+="零"),c>0&&(i+=$[c]+"分")),n?"负"+i:i}function x(e){const t=b(e),n=b(),r=n.diff(t,"second"),o=n.diff(t,"minute"),a=n.diff(t,"hour"),i=n.diff(t,"day");return r<60?"刚刚":o<60?`${o}分钟前`:a<24?`${a}小时前`:i<7?`${i}天前`:t.year()===n.year()?t.format("M月D日"):t.format("YYYY年M月D日")}function E(e,t="YYYY-MM-DD HH:mm:ss"){return b(e).format(t)}function T(e){return b(e).format("YYYY:MM:DD HH:mm:ss")}function O(e){return b(e).format("YYYY-MM-DD HH:mm:ss")}function I(e){return b(e).format("YYYY-MM-DD")}function C(e){return b(e).format("HH:mm:ss")}function k(e){return b(e).format("YYYY-MM")}function j(e){return b(e).format("HH:mm")}function A(e){return b(e).format("YYYY")}function P(e){return b(e).format("MM")}function R(e){return b(e).format("DD")}function Y(e){return b(e).format("HH")}function U(e){return b(e).format("mm")}function H(e){return b(e).format("ss")}function _(){return Date.now()}function N(){return b().startOf("day").valueOf()}function z(){return b().subtract(1,"day").startOf("day").valueOf()}function L(e){return b().subtract(e,"day").startOf("day").valueOf()}const B={formatNumber:S,numberToChinese:v,formatRelativeTime:x,formatDate:E,formatDateTimeColon:T,formatDateTime:O,formatDateOnly:I,formatTimeOnly:C,formatYearMonth:k,formatHourMinute:j,getYear:A,getMonth:P,getDay:R,getHour:Y,getMinute:U,getSecond:H,getTimestamp:_,getTodayStart:N,getYesterdayStart:z,getDaysAgoStart:L};function F(e){return Object.prototype.toString.call(e).slice(8,-1)}function W(e){return"String"===F(e)}function q(e){return"Number"===F(e)&&!isNaN(e)}function J(e){return"Boolean"===F(e)}function Z(e){return"Array"===F(e)}function G(e){return"Object"===F(e)}function V(e){return"Function"===F(e)}function Q(e){return"Date"===F(e)}function K(e){return"RegExp"===F(e)}function X(e){return"Symbol"===F(e)}function ee(e){return"Promise"===F(e)}function te(e){return"Null"===F(e)}function ne(e){return"Undefined"===F(e)}function re(e){return te(e)||ne(e)}function oe(e){return!!re(e)||(W(e)?""===e.trim():Z(e)?0===e.length:!!G(e)&&0===Object.keys(e).length)}function ae(e){return!oe(e)}function ie(e){return/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}$/.test(e)}function se(e){return/^1[3-9]\d{9}$/.test(e)}function ce(e){return/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(e)}function ue(e){return/^(https?:\/\/)?([\da-z.-]+)\.([a-z.]{2,6})([/\w .-]*)*\/?(\?[;&a-z\d%_.~+=-]*)?(\#[-a-z\d_]*)?$/i.test(e)}function le(e){return/^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$/.test(e)}function de(e){return/^\d+$/.test(e)}function fe(e){return/^[A-Za-z]+$/.test(e)}function he(e){return/^[\u4e00-\u9fa5]+$/.test(e)}function me(e){return/^[a-zA-Z][a-zA-Z0-9_]{3,15}$/.test(e)}function ge(e){return/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{6,20}$/.test(e)}function we(e){return/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-HJ-NP-Z][A-HJ-NP-Z0-9]{4,5}[A-HJ-NP-Z0-9挂学警港澳]$/.test(e)}function ye(e){return/^\d{16,19}$/.test(e)}function pe(e){return/^\d{6}$/.test(e)}const be={getType:F,isString:W,isNumber:q,isBoolean:J,isArray:Z,isObject:G,isFunction:V,isDate:Q,isRegExp:K,isSymbol:X,isPromise:ee,isNull:te,isUndefined:ne,isNullOrUndefined:re,isEmptyValue:oe,isNotEmpty:ae,isEmail:ie,isPhone:se,isIdCard:ce,isUrl:ue,isIp:le,isNumericString:de,isLetter:fe,isChinese:he,isUsername:me,isStrongPassword:ge,isCarNumber:we,isBankCard:ye,isPostalCode:pe},Se="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",$e="0123456789";function De(e=!1){if("undefined"!=typeof crypto&&crypto.randomUUID){const t=crypto.randomUUID();return e?t.replace(/-/g,""):t}const t="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)});return e?t.replace(/-/g,""):t}function Me(e=6){return Date.now().toString()+xe(e)}function ve(e=9){const t=Math.max(1,Math.min(20,e));let n=$e[Math.floor(9*Math.random())+1];for(let e=1;e<t;e++)n+=$e[Math.floor(10*Math.random())];return n}function xe(e=8){let t="";for(let n=0;n<e;n++)t+=Se[Math.floor(62*Math.random())];return t}function Ee(e=16){const t=Math.ceil(e/2);if("undefined"!=typeof crypto&&crypto.getRandomValues){const n=new Uint8Array(t);crypto.getRandomValues(n);let r="";for(let e=0;e<n.length;e++)r+=n[e].toString(16).padStart(2,"0");return r.slice(0,e)}let n="";for(let t=0;t<e;t++)n+="0123456789abcdef"[Math.floor(16*Math.random())];return n}let Te=-1,Oe=0;function Ie(){let e=Date.now();if(e===Te){if(Oe=Oe+1&4095,0===Oe)for(;e<=Te;)e=Date.now()}else Oe=0;return Te=e,e.toString()+Oe.toString().padStart(6,"0")}function Ce(e=8){let t="",n=1e6*Date.now()+Math.floor(1e6*Math.random());for(;n>0;)t=Se[n%62]+t,n=Math.floor(n/62);for(;t.length<e;)t=Se[Math.floor(62*Math.random())]+t;return t}const ke={uuid:De,timestampId:Me,numericId:ve,alphanumericId:xe,binaryId:Ee,snowflakeId:Ie,shortId:Ce};function je(e,t=null){try{return JSON.parse(e)}catch{return t}}function Ae(e,t=null,n){try{return JSON.stringify(e,null,n)}catch{return t}}function Pe(e){return{get(t,n=null){try{if(!e)return n;const r=e.getItem(t);return null===r?n:je(r,n)}catch{return n}},getString(t,n=""){try{return e?e.getItem(t)??n:n}catch{return n}},set(t,n){try{if(!e)return!1;const r=Ae(n);return null!==r&&(e.setItem(t,r),!0)}catch{return!1}},remove(t){try{return!!e&&(e.removeItem(t),!0)}catch{return!1}},clear(){try{return!!e&&(e.clear(),!0)}catch{return!1}},has(t){try{return!!e&&null!==e.getItem(t)}catch{return!1}},keys(){try{if(!e)return[];const t=[];for(let n=0;n<e.length;n++){const r=e.key(n);null!==r&&t.push(r)}return t}catch{return[]}},size(){try{return e?e.length:0}catch{return 0}}}}const Re=Pe(function(){try{return"undefined"!=typeof window?window.localStorage:null}catch{return null}}()),Ye=Pe(function(){try{return"undefined"!=typeof window?window.sessionStorage:null}catch{return null}}());function Ue(e,t){try{return e()}catch{return t}}async function He(e,t){try{return await e()}catch{return t}}function _e(e,t,n=void 0){try{if(null==e)return n;const r=t.replace(/\[(\d+)\]/g,".$1").split(".");let o=e;for(const e of r){if(null==o)return n;o=o[e]}return void 0===o?n:o}catch{return n}}function Ne(e,t,n){try{if(null==e||"object"!=typeof e)return!1;const r=t.replace(/\[(\d+)\]/g,".$1").split(".");let o=e;for(let e=0;e<r.length-1;e++){const t=r[e],n=r[e+1],a=/^\d+$/.test(n);null==o[t]&&(o[t]=a?[]:{}),o=o[t]}return o[r[r.length-1]]=n,!0}catch{return!1}}const ze={jsonParse:je,jsonStringify:Ae,localStorage:Re,sessionStorage:Ye,execute:Ue,executeAsync:He,get:_e,set:Ne};function Le(e){const t=function(e){const t=`\n const fn = ${e.toString()};\n self.onmessage = async (e) => {\n try {\n const result = await fn(e.data);\n self.postMessage({ type: '__result__', data: result });\n } catch (error) {\n self.postMessage({ type: '__error__', error: error.message });\n }\n };\n `,n=new Blob([t],{type:"application/javascript"});return URL.createObjectURL(n)}(e),n=new Worker(t),r=new Set,o=new Set;let a=null,i=null;return n.onmessage=e=>{const{type:t,data:n,error:o}=e.data;"__result__"===t?(a?.(n),a=null,i=null):"__error__"===t?(i?.(new Error(o)),a=null,i=null):r.forEach(t=>t(e.data))},n.onerror=e=>{i?.(e),a=null,i=null,o.forEach(t=>t(e))},{run:e=>new Promise((t,r)=>{a=t,i=r,n.postMessage(e)}),postMessage(e){n.postMessage(e)},onMessage:e=>(r.add(e),()=>r.delete(e)),onError:e=>(o.add(e),()=>o.delete(e)),terminate(){n.terminate(),URL.revokeObjectURL(t),r.clear(),o.clear()}}}const Be=new TextEncoder;function Fe(e,t){const n=new Set;let r=null,o=!1;if(e){const t=e.getReader();(async()=>{try{for(;!o;){const{value:e,done:r}=await t.read();if(r)break;e&&n.forEach(t=>t(e))}}catch{}})()}return{async send(e){if(!t||o)return;r||(r=t.getWriter());const n="string"==typeof e?Be.encode(e):e;await r.write(n)},onMessage:e=>(n.add(e),()=>n.delete(e)),close(){o=!0,r?.close(),n.clear()},getReadable:()=>e,getWritable:()=>t}}function We(){return"undefined"!=typeof WebTransport}new TextDecoder;const qe=new Map;function Je(e){const t=qe.get(e);t&&(t.close(),qe.delete(e))}async function Ze(e,t={}){const{maxWidth:n=1e3,maxHeight:r=1e3,format:o="image/webp",quality:a=.85}=t;let i=0;(e instanceof File||e instanceof Blob)&&(i=e.size);const s=await Ve(e);let{width:c,height:u}=s;if(c>n||u>r){const e=Math.min(n/c,r/u);c=Math.round(c*e),u=Math.round(u*e)}const l=document.createElement("canvas");l.width=c,l.height=u;l.getContext("2d").drawImage(s,0,0,c,u);const d=await function(e,t,n){return new Promise((r,o)=>{e.toBlob(e=>{e?r(e):o(new Error("Canvas 转换失败"))},t,n)})}(l,o,a);return{blob:d,width:c,height:u,originalSize:i,compressedSize:d.size,ratio:i>0?d.size/i:0}}async function Ge(e,t,n=.85){return Ze(e,{maxWidth:t,maxHeight:t,format:"image/webp",quality:n})}async function Ve(e){return e instanceof HTMLImageElement?e:new Promise((t,n)=>{const r=new Image,o=URL.createObjectURL(e);r.onload=()=>{URL.revokeObjectURL(o),t(r)},r.onerror=()=>{URL.revokeObjectURL(o),n(new Error("图片加载失败"))},r.src=o})}e.HttpError=h,e.addData=function(e,t,n){return new Promise((r,o)=>{const a=qe.get(e);if(!a)return void o(new Error(`Database "${e}" not initialized`));const i=a.transaction([t],"readwrite").objectStore(t).add(n);i.onsuccess=()=>r(i.result),i.onerror=()=>o(new Error(`Add data failed: ${i.error}`))})},e.aesGcmDecrypt=async function(e,t){const n=(new TextEncoder).encode(t);if(32!==n.length)throw new Error("AES-256 密钥必须是 32 字节");const r=Uint8Array.from(atob(e),e=>e.charCodeAt(0)),o=r.slice(0,12),a=r.slice(12),i=await crypto.subtle.importKey("raw",n,{name:"AES-GCM"},!1,["decrypt"]),s=await crypto.subtle.decrypt({name:"AES-GCM",iv:o},i,a),c=(new TextDecoder).decode(s);return JSON.parse(c)},e.alphanumericId=xe,e.binaryId=Ee,e.cancelIdleCallback=function(e){const t=d.get(e);void 0!==t&&(void 0!==window.cancelIdleCallback?window.cancelIdleCallback(t):clearTimeout(t),d.delete(e))},e.cancelRafInterval=function(e){const t=r.get(e);void 0!==t&&(cancelAnimationFrame(t),r.delete(e))},e.cancelRafTimeout=l,e.cancelRafTimes=function(e){const t=s.get(e);t&&(t.cancelled=!0,l(t.currentRafId),s.delete(e))},e.cancelRecursiveInterval=function(e){const t=a.get(e);void 0!==t&&(clearTimeout(t),a.delete(e))},e.clearStore=function(e,t){return new Promise((n,r)=>{const o=qe.get(e);if(!o)return void r(new Error(`Database "${e}" not initialized`));const a=o.transaction([t],"readwrite").objectStore(t).clear();a.onsuccess=()=>n(),a.onerror=()=>r(new Error(`Clear store failed: ${a.error}`))})},e.closeAllDB=function(){qe.forEach((e,t)=>{e.close()}),qe.clear()},e.closeDB=Je,e.compressImage=Ze,e.countData=function(e,t){return new Promise((n,r)=>{const o=qe.get(e);if(!o)return void r(new Error(`Database "${e}" not initialized`));const a=o.transaction([t],"readonly").objectStore(t).count();a.onsuccess=()=>n(a.result),a.onerror=()=>r(new Error(`Count data failed: ${a.error}`))})},e.createHttpClient=g,e.createTransport=function(e){const{url:t,allowPooling:n,congestionControl:r}=e;if(!We())throw new Error("当前浏览器不支持 WebTransport");let o="connecting",a=null;const i=new Set,s=new Set,c=new Set,u=new Set,l=new Set,d={};return void 0!==n&&(d.allowPooling=n),r&&(d.congestionControl=r),a=new WebTransport(t,d),a.closed.then(e=>{o="closed",u.forEach(t=>t({closeCode:e.closeCode??0,reason:e.reason??""}))}).catch(e=>{o="failed",l.forEach(t=>t(e))}),(async()=>{try{const e=a.datagrams.readable.getReader();for(;"connecting"===o||"connected"===o;){const{value:t,done:n}=await e.read();if(n)break;t&&i.forEach(e=>e(t))}}catch{}})(),(async()=>{try{const e=a.incomingBidirectionalStreams.getReader();for(;"connecting"===o||"connected"===o;){const{value:t,done:n}=await e.read();if(n)break;if(t){const e=Fe(t.readable,t.writable);s.forEach(t=>t(e))}}}catch{}})(),(async()=>{try{const e=a.incomingUnidirectionalStreams.getReader();for(;"connecting"===o||"connected"===o;){const{value:t,done:n}=await e.read();if(n)break;if(t){const e=Fe(t,null);c.forEach(t=>t(e))}}}catch{}})(),{async ready(){await a.ready,o="connected"},getState:()=>o,sendDatagram(e){if(!a||"connected"!==o)return;const t="string"==typeof e?Be.encode(e):e,n=a.datagrams.writable.getWriter();n.write(t),n.releaseLock()},onDatagram:e=>(i.add(e),()=>i.delete(e)),async createBidirectionalStream(){if(!a||"connected"!==o)throw new Error("连接未就绪");const e=await a.createBidirectionalStream();return Fe(e.readable,e.writable)},async createUnidirectionalStream(){if(!a||"connected"!==o)throw new Error("连接未就绪");return Fe(null,await a.createUnidirectionalStream())},onBidirectionalStream:e=>(s.add(e),()=>s.delete(e)),onUnidirectionalStream:e=>(c.add(e),()=>c.delete(e)),onClose:e=>(u.add(e),()=>u.delete(e)),onError:e=>(l.add(e),()=>l.delete(e)),close(e){a&&(a.close(e),o="closed",i.clear(),s.clear(),c.clear())},getTransport:()=>a}},e.createWebSocket=function(e){const{url:t,protocols:n,autoConnect:r=!0,reconnect:o=!0,reconnectInterval:a=3e3,reconnectMaxTimes:i=5,heartbeat:s=!1,heartbeatInterval:c=3e4,heartbeatMessage:d="ping",messageQueue:f=!1,messageQueueMax:h=100}=e;let m=null,g="disconnected",w=0,y=null,p=null,b=!1;const S=[],$=new Set,D=new Set,M=new Set,v=new Set,x=new Set;function E(){s&&(T(),p=u(()=>{if("connected"===g&&m){const e="function"==typeof d?d():d;m.send(e),E()}},c))}function T(){p&&(l(p),p=null)}function O(){o&&!b&&(-1!==i&&w>=i||(w++,x.forEach(e=>e(w)),y=u(()=>{I()},a)))}function I(){if("connecting"!==g&&"connected"!==g){b=!1,g="connecting";try{m=n?new WebSocket(t,n):new WebSocket(t),m.onopen=e=>{g="connected",w=0,E(),function(){for(;S.length>0&&"connected"===g&&m;){const e=S.shift();m.send(e)}}(),$.forEach(t=>t(e))},m.onmessage=e=>{let t=e.data;try{t=JSON.parse(e.data)}catch{}D.forEach(n=>n(t,e))},m.onerror=e=>{M.forEach(t=>t(e))},m.onclose=e=>{g="disconnected",m=null,T(),v.forEach(t=>t(e)),O()}}catch(e){g="disconnected",O()}}}return r&&I(),{getState:()=>g,getSocket:()=>m,connect:I,disconnect:function(e=1e3,t="manual close"){b=!0,g="disconnecting",y&&(l(y),y=null),T(),m&&(m.close(e,t),m=null),g="disconnected"},send:function(e){const t="object"==typeof e?JSON.stringify(e):e;"connected"===g&&m?m.send(t):f&&S.length<h&&S.push(t)},onOpen:function(e){return $.add(e),()=>$.delete(e)},onMessage:function(e){return D.add(e),()=>D.delete(e)},onError:function(e){return M.add(e),()=>M.delete(e)},onClose:function(e){return v.add(e),()=>v.delete(e)},onReconnect:function(e){return x.add(e),()=>x.delete(e)},offAll:function(){$.clear(),D.clear(),M.clear(),v.clear(),x.clear()}}},e.createWorker=Le,e.deleteData=function(e,t,n){return new Promise((r,o)=>{const a=qe.get(e);if(!a)return void o(new Error(`Database "${e}" not initialized`));const i=a.transaction([t],"readwrite").objectStore(t).delete(n);i.onsuccess=()=>r(),i.onerror=()=>o(new Error(`Delete data failed: ${i.error}`))})},e.deleteDataByIndex=function(e,t,n,r){return new Promise((o,a)=>{const i=qe.get(e);if(!i)return void a(new Error(`Database "${e}" not initialized`));const s=i.transaction([t],"readwrite").objectStore(t).index(n).openCursor(r);let c=0;s.onsuccess=e=>{const t=e.target.result;t?(t.delete(),c++,t.continue()):o(c)},s.onerror=()=>a(new Error(`Delete data by index failed: ${s.error}`))})},e.deleteDatabase=function(e){return new Promise((t,n)=>{Je(e);const r=indexedDB.deleteDatabase(e);r.onsuccess=()=>t(),r.onerror=()=>n(new Error(`Delete database failed: ${r.error}`)),r.onblocked=()=>n(new Error("Delete database blocked, please close other tabs using this database"))})},e.format=B,e.formatDate=E,e.formatDateOnly=I,e.formatDateTime=O,e.formatDateTimeColon=T,e.formatHourMinute=j,e.formatNumber=S,e.formatRelativeTime=x,e.formatStorageSize=function(e){if(!e)return"0 B";const t=["B","KB","MB","GB"];let n=e,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r++;return`${n.toFixed(2)} ${t[r]}`},e.formatTimeOnly=C,e.formatYearMonth=k,e.getAllData=function(e,t){return new Promise((n,r)=>{const o=qe.get(e);if(!o)return void r(new Error(`Database "${e}" not initialized`));const a=o.transaction([t],"readonly").objectStore(t).getAll();a.onsuccess=()=>n(a.result),a.onerror=()=>r(new Error(`Get all data failed: ${a.error}`))})},e.getDB=function(e){return qe.get(e)},e.getData=function(e,t,n){return new Promise((r,o)=>{const a=qe.get(e);if(!a)return void o(new Error(`Database "${e}" not initialized`));const i=a.transaction([t],"readonly").objectStore(t).get(n);i.onsuccess=()=>r(i.result),i.onerror=()=>o(new Error(`Get data failed: ${i.error}`))})},e.getDataByIndex=function(e,t,n,r){return new Promise((o,a)=>{const i=qe.get(e);if(!i)return void a(new Error(`Database "${e}" not initialized`));const s=i.transaction([t],"readonly").objectStore(t).index(n).getAll(r);s.onsuccess=()=>o(s.result),s.onerror=()=>a(new Error(`Get data by index failed: ${s.error}`))})},e.getDataByIndexRange=function(e,t,n,r){return new Promise((o,a)=>{const i=qe.get(e);if(!i)return void a(new Error(`Database "${e}" not initialized`));const s=i.transaction([t],"readonly").objectStore(t).index(n).getAll(r);s.onsuccess=()=>o(s.result),s.onerror=()=>a(new Error(`Get data by index range failed: ${s.error}`))})},e.getDay=R,e.getDaysAgoStart=L,e.getHour=Y,e.getMinute=U,e.getMonth=P,e.getSecond=H,e.getStorageEstimate=async function(){return"storage"in navigator&&"estimate"in navigator.storage?await navigator.storage.estimate():null},e.getTimestamp=_,e.getTodayStart=N,e.getType=F,e.getYear=A,e.getYesterdayStart=z,e.http=w,e.idleCallback=function(e,t){const n=++f;if("undefined"!=typeof requestIdleCallback){const r=requestIdleCallback(e,t);return d.set(n,r),n}const r=Date.now(),o=t?.timeout??0,a=window.setTimeout(()=>{const t=Date.now()-r,a={didTimeout:o>0&&t>=o,timeRemaining:()=>Math.max(0,50-(Date.now()-r))};d.delete(n),e(a)},1);return d.set(n,a),n},e.initDB=function(e){return new Promise((t,n)=>{const r=qe.get(e.name);if(r)return void t(r);const o=indexedDB.open(e.name,e.version);o.onupgradeneeded=t=>{const n=t.target.result;e.stores.forEach(e=>{n.objectStoreNames.contains(e.name)&&n.deleteObjectStore(e.name);const t=n.createObjectStore(e.name,{keyPath:e.keyPath,autoIncrement:e.autoIncrement||!1});e.indexes&&e.indexes.forEach(e=>{t.createIndex(e.name,e.keyPath,{unique:e.unique||!1})})})},o.onsuccess=n=>{const r=n.target.result;qe.set(e.name,r),t(r)},o.onerror=e=>{n(new Error(`Database init failed: ${e.target.error}`))}})},e.isArray=Z,e.isBankCard=ye,e.isBoolean=J,e.isCarNumber=we,e.isChinese=he,e.isDate=Q,e.isEmail=ie,e.isEmptyValue=oe,e.isFunction=V,e.isIdCard=ce,e.isIp=le,e.isLetter=fe,e.isNotEmpty=ae,e.isNull=te,e.isNullOrUndefined=re,e.isNumber=q,e.isNumericString=de,e.isObject=G,e.isPhone=se,e.isPostalCode=pe,e.isPromise=ee,e.isRegExp=K,e.isString=W,e.isStrongPassword=ge,e.isSymbol=X,e.isTransportSupported=We,e.isUndefined=ne,e.isUrl=ue,e.isUsername=me,e.numberToChinese=v,e.numericId=ve,e.putData=function(e,t,n){return new Promise((r,o)=>{const a=qe.get(e);if(!a)return void o(new Error(`Database "${e}" not initialized`));const i=a.transaction([t],"readwrite").objectStore(t).put(n);i.onsuccess=()=>r(i.result),i.onerror=()=>o(new Error(`Put data failed: ${i.error}`))})},e.rafInterval=function(e,t){const n=++o;let a=performance.now();return r.set(n,requestAnimationFrame(function o(i){r.has(n)&&(i-a>=t&&(a=i,e()),r.set(n,requestAnimationFrame(o)))})),n},e.rafTimeout=u,e.rafTimes=function(e,t,n){const r=++c;let o=0;return s.set(r,{currentRafId:0,cancelled:!1}),s.get(r).currentRafId=u(function a(){const i=s.get(r);i&&!i.cancelled&&(o++,e(o),o<n?i.currentRafId=u(a,t):s.delete(r))},t),r},e.recursiveInterval=function(e,t){const n=++i;return a.set(n,window.setTimeout(function r(){a.has(n)&&(e(),a.set(n,window.setTimeout(r,t)))},t)),n},e.resizeAndCompress=Ge,e.runInWorker=function(e,t,n){const r=Le(e),{timeout:o}=n||{};return new Promise((e,n)=>{let a;o&&(a=window.setTimeout(()=>{r.terminate(),n(new Error("Worker 执行超时"))},o)),r.run(t).then(t=>{a&&clearTimeout(a),r.terminate(),e(t)}).catch(e=>{a&&clearTimeout(a),r.terminate(),n(e)})})},e.safe=ze,e.safeExecute=Ue,e.safeExecuteAsync=He,e.safeGet=_e,e.safeJsonParse=je,e.safeJsonStringify=Ae,e.safeLocalStorage=Re,e.safeSessionStorage=Ye,e.safeSet=Ne,e.shortId=Ce,e.smartCompress=async function(e,t,n=.85){if("image/webp"===e.type){const n=await Ve(e);if(!(n.width>t||n.height>t))return{blob:e,width:n.width,height:n.height,originalSize:e.size,compressedSize:e.size,ratio:1}}return Ge(e,t,n)},e.snowflakeId=Ie,e.timestampId=Me,e.toWebP=async function(e,t=.85){return(await Ze(e,{maxWidth:1/0,maxHeight:1/0,format:"image/webp",quality:t})).blob},e.uid=ke,e.uuid=De,e.validate=be});
|