@andrewcaires/utils.js 0.4.9 → 0.4.10

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/dist/index.cjs.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /*!
2
- * @andrewcaires/utils.js v0.4.9
2
+ * @andrewcaires/utils.js v0.4.10
3
3
  * JavaScript utility library for web and nodejs development
4
4
  * (c) 2025 Andrew Caires
5
5
  * @license: MIT
6
6
  */
7
- "use strict";const t=(t,e,s)=>Math.max(e,Math.min(s,t)),e=(t,e)=>Math.floor(Math.random()*(e-t+1)+t),s=t=>{for(let s=t.length-1;s>0;s--){const r=e(0,s);[t[s],t[r]]=[t[r],t[s]]}return t},r={},n=t=>null==t?"null":r[r.toString.call(t)]||"object";["Array","AsyncFunction","Boolean","Date","Function","Map","Number","Object","RegExp","Set","String"].forEach((t=>r["[object "+t+"]"]=t.toLowerCase()));const i=t=>"array"==n(t),a=t=>"boolean"==n(t),o=t=>"null"!=n(t),u=t=>"number"==n(t),l=t=>u(t)&&!!(t%1),h=t=>"function"==typeof t,c=t=>u(t)&&!(t%1),p=t=>"object"==n(t),v=t=>p(t)&&t.constructor===Object,d=["boolean","number","string"],x=t=>"string"==typeof t,m=t=>void 0===t,f=[1,"1",!0,"true"],g=t=>-1!=f.indexOf(t),y=(t,e,s)=>{for(let r=0;r<t.length&&!1!==e.call(s,t[r],r,t);r++);return t},E=(t,e,s)=>{let r="";const n=Object.keys(t);for(let i=0;i<n.length&&(r=n[i],!1!==e.call(s,t[r],r,t));i++);return t},b=(t,e,s)=>Object.fromEntries(Object.entries(t).map((([r,n])=>[r,e.call(s,n,r,t)]))),S=t=>parseInt(null!=t?t:"0",16)||0,w=t=>{var e;return(null===(e=t.replace(/^#/,"").match(/.{1,2}/g))||void 0===e?void 0:e.map(S))||[]},O=t=>("0"+t.toString(16)).slice(-2),R=(t,e,s)=>"#"+O(t)+O(e)+O(s),C=(e,s)=>{const r=w(e);s=t(s,0,1);const[n,i,a]=r.map((t=>Math.round(t*s)));return R(n,i,a)},I=(e,s)=>{const r=w(e);s=t(s,0,1);const[n,i,a]=r.map((t=>Math.round(t+(255-t)*s)));return R(n,i,a)},M={50:.95,100:.9,200:.75,300:.6,400:.3,500:0,600:-.1,700:-.25,800:-.4,900:-.55,950:-.71},k=(t,e,s,r,n)=>0===t?0:e===s?(r-n)/t%6:e===r?(n-s)/t+2:e===n?(s-r)/t+4:0,A=(t,e)=>0===t?0:t/(1-Math.abs(2*e-1));class D{constructor(t){this.key=this.shuffle(D.dictionary,t,!1)}encrypt(t){return this.shuffle(t,this.key,!1)}decrypt(t){return this.shuffle(t,this.key,!0)}index(t,e,s){return[D.dictionary.indexOf(t[s]),D.dictionary.indexOf(e[s%e.length])]}result(t,e,s){return D.dictionary[(s?t-e+D.dictionary.length:t+e)%D.dictionary.length]}shuffle(t,e,s){let r="";for(let n=0;n<t.length;n++){const[i,a]=this.index(t,e,n);r+=-1===i||-1===a?t[n]:this.result(i,a,s)}return r}}D.dictionary="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";const N=t=>Math.random().toString(16).slice(t),j=()=>N(-3),T=()=>N(-4),Y=()=>T()+T(),P=()=>Y()+Y(),U=t=>("0"+t.toString()).slice(-2),L={"%y":t=>U(t.getFullYear()),"%Y":t=>t.getFullYear().toString(),"%m":t=>U(t.getMonth()+1),"%d":t=>U(t.getDate()),"%H":t=>U(t.getHours()),"%M":t=>U(t.getMinutes()),"%S":t=>U(t.getSeconds())},$=(t,e)=>(e=null!=e?e:new Date,t.replace(/%[yYmdHMS]/g,(t=>L[t]?L[t](e):t.slice(1)))),F=36e5,q=24*F,K={ms:1,s:1e3,m:6e4,h:F,d:q,w:7*q,y:315576e5},_=["y","d","h","m","s","ms"];function H(t,e,s,r){return new(s||(s=Promise))((function(n,i){function a(t){try{u(r.next(t))}catch(t){i(t)}}function o(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){t.done?n(t.value):function(t){return t instanceof s?t:new s((function(e){e(t)}))}(t.value).then(a,o)}u((r=r.apply(t,e||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;const X=t=>{var e;return 0==(null!==(e=null==t?void 0:t.length)&&void 0!==e?e:0)},Q=["",0,"0",null,!1,void 0],B=t=>-1==Q.indexOf(t),J=()=>{},z=(t,e,s)=>e(t.toLowerCase().replace(/\W+/g," ")).replace(/\s/g,null!=s?s:""),V=(t,e)=>z(t,(t=>t.replace(/\s(\w)/g,(t=>t.toUpperCase()))),e),Z=V,W=/&(amp|apos|lt|gt|nbsp|quot);/g,G={amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",quot:'"'},tt=t=>/^[\d]$/.test(t),et=t=>/^[A-Za-z]$/.test(t),st=t=>/^[^\w]$/.test(t),rt=t=>s(t.split("")).join("");class nt{constructor(){this.hasSpace=!1,this._space=" ",this.hasNumbers=!1,this._numbers="0123456789",this.hasSymbols=!1,this._symbols="!@#$%^&*()<>.<~:;?+=-_",this.hasUpper=!1,this._upper="ABCDEFGHIJKLMNOPQRSTUVWXYZ",this.hasLower=!1,this._lower="abcdefghijklmnopqrstuvwxyz",this.hasChars=!1,this._chars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"}chars(){return this.hasChars=!0,this}static chars(){return(new nt).chars()}lower(){return this.hasLower=!0,this}static lower(){return(new nt).lower()}make(t){let s="";this.hasSpace&&(s+=this._space),this.hasNumbers&&(s+=this._numbers),this.hasSymbols&&(s+=this._symbols),this.hasUpper&&!this.hasChars&&(s+=this._upper),this.hasLower&&!this.hasChars&&(s+=this._lower),this.hasChars&&(s+=this._chars);let r="";if(t&&s.length){s=rt(s);for(let n=0;n<t;n++)r+=s.charAt(e(0,s.length-1))}return r}numbers(){return this.hasNumbers=!0,this}static numbers(){return(new nt).numbers()}space(){return this.hasSpace=!0,this}static space(){return(new nt).space()}symbols(){return this.hasSymbols=!0,this}static symbols(){return(new nt).symbols()}upper(){return this.hasUpper=!0,this}static upper(){return(new nt).upper()}}const it=t=>t.split("").reverse().join(""),at=(t,e)=>z(t,(t=>t.replace(/(\w)(\w*)/g,((t,e,s)=>e.toUpperCase()+s))),e),ot=(t,e)=>e(t.value)?t.value:(t=>(t.maskIndex--,""))(t),ut={"#":t=>t.value,0:t=>ot(t,tt),9:t=>ot(t,tt),A:t=>ot(t,et),Z:t=>ot(t,et),L:t=>ot(t,et).toLowerCase(),U:t=>ot(t,et).toUpperCase(),S:t=>ot(t,st)},lt=t=>{t.maskIndex++,t.textIndex++;const{mask:e,maskIndex:s,text:r,textIndex:n}=t;t.key=e[s],t.value=r[n];const{key:i,value:a}=t;return m(i)||m(a)?"":(t=>ut[t.key]?ut[t.key](t):(t.key!=t.value&&t.textIndex--,t.key))(t)+lt(t)},ht=(t,e)=>lt({mask:t,maskIndex:-1,text:e,textIndex:-1,key:"",value:""}),ct=(t,e)=>it(ht(it(t),it(e))),pt=(t,e)=>t.reduce(((t,s)=>Object.assign(Object.assign({},t),{[s]:e[s]})),{}),vt=(t,...e)=>{if(!e.length)return t;const s=e.shift();if(v(t)&&v(s))for(const e in s)v(s[e])?(t[e]||(t=Object.assign(Object.assign({},t),{[e]:{}})),t[e]=vt(t[e],s[e])):t=Object.assign(Object.assign({},t),{[e]:s[e]});return vt(t,...e)};class dt{}var xt,mt,ft,gt,yt,Et,bt;dt.DESCRIPTION=Symbol("DESCRIPTION"),dt.ERROR=Symbol("ERROR"),dt.INDEXES=Symbol("INDEXES"),dt.KEYS=Symbol("KEYS"),dt.NAME=Symbol("NAME"),dt.REQUIRED=Symbol("REQUIRED"),dt.SOURCE=Symbol("SOURCE"),dt.TYPE=Symbol("TYPE");class St{constructor(t){this[xt]="",this[mt]="",this[ft]="",this[gt]="any",this[yt]=!1,this.rules=[],this.custom=[],this[dt.TYPE]=t}description(t){return this[dt.DESCRIPTION]=t,this}empty(t){const e=t;return this.unshift((({value:t})=>{const s=o(t);return{break:!o(e)&&!s,value:s?t:h(e)?e():e}}))}equal(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>{const n=s({value:t,context:r});return t==n?{value:t}:this.invalid(`.equal(${n})`,e)}))}error(t){return x(t)&&(this[dt.ERROR]=t),this}filter(...t){const e=t;return this.unshift((({value:t})=>{const s=-1==e.indexOf(t);return{break:!s,value:s?t:void 0}}))}fn(t){return h(t)?t:()=>t}from(t){return this[dt.SOURCE]=t,this}invalid(t,e){return t=`[${this[dt.TYPE]}]${t}`,{error:this[dt.ERROR]?this[dt.ERROR]:this[dt.NAME]?this[dt.NAME]+":"+t:t,message:e}}model(){return this.toString()}parse(){return this.unshift((({value:t})=>({value:t})))}push(t){return this.rules.push(t),this}required(t){return this[dt.REQUIRED]=!0,this.unshift((({value:e})=>o(e)?{value:e}:this.invalid(".required",t)))}test(t){return!x(this.validate(t).error)}testAsync(t){return H(this,void 0,void 0,(function*(){return!x((yield this.validateAsync(t)).error)}))}toString(){return this[dt.TYPE]}unshift(t){return this.rules.unshift(t),this}validate(t,e){var s;if(this.custom.length)return this.invalid("[async]");let r={value:t};for(let t=0;t<this.rules.length;t++){if(r=this.rules[t]({value:r.value,context:e}),null===(s=r.error)||void 0===s?void 0:s.length)return Object.assign({error:r.error},r.message?{message:r.message}:{});if(r.break)return{value:r.value}}return{value:r.value}}validateAsync(t,e){return H(this,void 0,void 0,(function*(){let s=this.validate(t,e);if(s.error)return{error:s.error};for(let t=0;t<this.custom.length;t++){if(s=yield this.custom[t]({value:s.value}),s.error)return{error:s.error};if(s.break)return{value:s.value}}return{value:s.value}}))}}xt=dt.NAME,mt=dt.DESCRIPTION,dt.SOURCE,ft=dt.ERROR,gt=dt.TYPE,yt=dt.REQUIRED;class wt extends St{constructor(t){super("array"),this[Et]=[],this.push((({value:e})=>i(e)?{value:e}:this.invalid("",t)))}between(t,e,s){return this.min(t,s),this.max(e,s)}items(t,e){const s=t;return s&&this[dt.INDEXES].push(s),s?this.push((({value:t})=>{s[dt.NAME]="";for(let r=0;r<t.length;r++){const{error:n,value:i}=s.validate(t[r],t);if(n)return this.invalid("< "+n+"["+r+"] >",e);t[r]=i}return{value:t}})):this}length(t,e){const s=t;return this.push((({value:t})=>t.length==s?{value:t}:this.invalid(".length("+s+")",e)))}max(t,e){const s=t;return this.push((({value:t})=>t.length<=s?{value:t}:this.invalid(".max("+s+")",e)))}min(t,e){const s=t;return this.push((({value:t})=>t.length>=s?{value:t}:this.invalid(".min("+s+")",e)))}model(){return this[dt.INDEXES].length?this[dt.INDEXES].map((t=>t.model())):this[dt.TYPE]}toString(){return this[dt.INDEXES].length?JSON.stringify(this.model(),null,4):this[dt.TYPE]}}Et=dt.INDEXES;class Ot extends St{constructor(t){super("boolean"),this.push((({value:e})=>a(e)?{value:e}:this.invalid("",t)))}parse(){return this.unshift((({value:t})=>({value:o(t)?g(t):t})))}}class Rt extends St{constructor(t){super("date"),this.push((({value:e})=>x(e)&&e.length>=9&&!isNaN(new Date(e).getTime())?{value:e}:this.invalid("",t)))}format(t){const e=t;return this.push((({value:t})=>({value:$(e,new Date(t))})))}parse(){return this.unshift((({value:t})=>({value:new Date(x(t)&&t.length<=10?`${t} 12:00`:t)})))}}class Ct extends St{constructor(t){super("number"),this.push((({value:e})=>u(e)?{value:e}:this.invalid("",t)))}between(t,e,s){return this.min(t,s),this.max(e,s)}float(t){return this.push((({value:e})=>l(e)?{value:e}:this.invalid(".float",t)))}integer(t){return this.push((({value:e})=>c(e)?{value:e}:this.invalid(".integer",t)))}max(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>{const n=s({value:t,context:r});return t<=n?{value:t}:this.invalid(`.max(${n})`,e)}))}min(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>{const n=s({value:t,context:r});return t>=n?{value:t}:this.invalid(`.min(${n})`,e)}))}parse(){return this.unshift((({value:t})=>({value:o(t)?parseFloat(t.toString()):t})))}}class It extends St{constructor(t){super("object"),this[bt]={},this.push((({value:e})=>p(e)?{value:e}:this.invalid("",t)))}keys(t,e){const s=t;return s&&(this[dt.KEYS]=Object.assign(Object.assign({},this[dt.KEYS]),s)),s?this.push((({value:t})=>{const r=[],n={};return Object.keys(s).forEach((i=>{var a;const u=s[i];u[dt.NAME]=null!==(a=u[dt.SOURCE])&&void 0!==a?a:i;const{error:l,message:h,value:c}=u.validate(t[u[dt.NAME]],n);!e&&h&&(e=h),l&&r.push(l),o(c)&&(n[i]=c)})),r.length?this.invalid("{ "+r.join(", ")+" }",e):{value:n}})):this}model(){const t={},e=Object.keys(this[dt.KEYS]);return e.length&&e.forEach((e=>t[e]=this[dt.KEYS][e].model())),e.length?t:this[dt.TYPE]}parse(t){return this.unshift((({value:e})=>{if(!p(e))try{e=JSON.parse(e)}catch(e){return this.invalid("",t)}return{value:e}}))}toString(){return Object.keys(this[dt.KEYS]).length?JSON.stringify(this.model(),null,4):this[dt.TYPE]}}bt=dt.KEYS;class Mt extends St{constructor(t){super("string"),this.push((({value:e})=>x(e)?{value:e}:this.invalid("",t)))}between(t,e,s){return this.min(t,s),this.max(e,s)}email(t){const e=/^[\w-\\.]+@([\w-]+\.)+[\w-]{2,4}$/i;return this.push((({value:s})=>e.test(s)?{value:s}:this.invalid(".email",t)))}length(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>{const n=s({value:t,context:r});return t.length==n?{value:t}:this.invalid(`.length(${n})`,e)}))}lowerCase(){return this.push((({value:t})=>({value:t.toLowerCase()})))}lowerCamelCase(){return this.push((({value:t})=>({value:V(t)})))}max(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>{const n=s({value:t,context:r});return t.length<=n?{value:t}:this.invalid(`.max(${n})`,e)}))}mask(t){const e=this.fn(t);return this.push((({value:t,context:s})=>({value:ht(e({value:t,context:s}),t)})))}min(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>{const n=s({value:t,context:r});return t.length>=n?{value:t}:this.invalid(`.min(${n})`,e)}))}parse(){return this.unshift((({value:t})=>({value:p(t)?JSON.stringify(t):o(t)?t.toString():t})))}required(t){return this[dt.REQUIRED]=!0,this.push((({value:e})=>e.length?{value:e}:this.invalid(".required",t)))}regex(t,e){return this.push((({value:s})=>t.test(s)?{value:s}:this.invalid(".regex",e)))}replace(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>({value:t.replace(s({value:t,context:r}),e)})))}trim(){return this.push((({value:t})=>({value:t.trim()})))}upperCase(){return this.push((({value:t})=>({value:t.toUpperCase()})))}upperCamelCase(){return this.push((({value:t})=>({value:at(t)})))}}class kt{static array(t,e){return new wt(e).items(t)}static boolean(t){return new Ot(t)}static date(t){return new Rt(t)}static number(t){return new Ct(t)}static object(t,e){return new It(e).keys(t)}static ref(t,e){return({context:s})=>s&&o(s[t])?s[t]:e}static string(t){return new Mt(t)}test(t,...e){return!x(kt.validate(t,...e).error)}testAsync(t,...e){return H(this,void 0,void 0,(function*(){return!x((yield kt.validateAsync(t,...e)).error)}))}static validate(t,...e){let s={value:t};for(let t=0;t<e.length;t++)if(s=e[t].validate(s.value),s.error)return{value:s.value,error:s.error};return{value:s.value}}static validateAsync(t,...e){return H(this,void 0,void 0,(function*(){let s={value:t};for(let t=0;t<e.length;t++)if(s=yield e[t].validateAsync(s.value),s.error)return{value:s.value,error:s.error};return{value:s.value}}))}}exports.EventEmitter=class{constructor(){this.events=new Map}on(t,e){const s=this.events.get(t);return s?s.push(e):this.events.set(t,[e]),{dispose:()=>this.off(t,e)}}once(t,e){const s=r=>{e(r),this.off(t,s)};return this.on(t,s),{dispose:()=>this.off(t,s)}}off(t,e){const s=this.events.get(t);if(e){if(s){const t=s.indexOf(e);t>=0&&s.splice(t,1)}}else this.events.set(t,[])}emit(t,e){const s=this.events.get(t);s&&s.forEach((t=>t(e)))}},exports.Hash=D,exports.RandomString=nt,exports.Validation=kt,exports.ValidationBase=St,exports.ValidationKeys=dt,exports.allowed=pt,exports.cache=()=>{const t=[],e=[];return s=>{let r=t.indexOf(s);return-1==r&&(t.push(s),e.push({}),r=e.length-1),e[r]}},exports.camelCase=Z,exports.chunkArray=(t,e)=>{const s=[];for(let r=0;r<t.length;r+=e)s.push(t.slice(r,r+e));return s},exports.clamp=t,exports.colorPalette=(t,e)=>b(null!=e?e:M,(e=>0==e?t:e>0?I(t,e):C(t,1- -1*e))),exports.compareArray=(t,e)=>t.length===e.length&&t.every(((t,s)=>t===e[s])),exports.countArray=t=>{const e={};return t.forEach((t=>{const s=t.toString();e[s]=(e[s]||0)+1})),e},exports.cutText=(t,e)=>{if(t.length>e){const s=t.substring(0,e).split(" ");return s.pop(),s.join(" ")+"..."}return t},exports.dateFormat=$,exports.dateRange=(t,e)=>{const s=new Date(t),r=[];for(;t<e;)s.setDate(s.getDate()+1),r.push(new Date(s));return r},exports.debounce=(t,e)=>{let s;const r=()=>{s&&clearTimeout(s)};return{cancel:r,run(...n){r(),s=setTimeout((()=>t(...n)),e)}}},exports.decodeHTML=t=>t.replace(W,((t,e)=>G[e])).replace(/&#(\d+);/gi,((t,e)=>String.fromCharCode(parseInt(e,10)))),exports.denied=(t,e)=>pt(Object.keys(e).filter((e=>-1==t.indexOf(e))),e),exports.each=(t,e,s)=>i(t)?y(t,e,s):p(t)?E(t,e,s):t,exports.encodeHTML=t=>t.replace(/[^0-9A-Za-z ]/g,(t=>"&#"+t.charCodeAt(0)+";")),exports.forEachAsync=(t,e,s)=>H(void 0,void 0,void 0,(function*(){yield Promise.allSettled(t.map(((r,n)=>{var i;return null===(i=e.call(s,r,n,t))||void 0===i?void 0:i.catch(J)}))).catch(J)})),exports.forEachIndex=y,exports.forEachKey=E,exports.forEachPage=t=>H(void 0,void 0,void 0,(function*(){var e;let s=!0;const r=()=>s=!0;let n=1;for(;s;)s=!1,yield null===(e=t(n,r))||void 0===e?void 0:e.catch(J),n+=1})),exports.forEachSeries=(t,e,s)=>H(void 0,void 0,void 0,(function*(){var r;for(let n=0;n<t.length;n++)yield null===(r=e.call(s,t[n],n,t))||void 0===r?void 0:r.catch(J)})),exports.forLoop=(t,e,s)=>{for(let r=1;r<=t&&!1!==e.call(s,r,t);r++);return t},exports.hexToRgb=w,exports.hslToRgb=(t,e,s)=>{t/=60;const r=(1-Math.abs(2*s-1))*e,n=r*(1-Math.abs(t%2-1));let i=[0,0,0];t<=1?i=[r,n,0]:t<=2?i=[n,r,0]:t<=3?i=[0,r,n]:t<=4?i=[0,n,r]:t<=5?i=[n,0,r]:t<=6&&(i=[r,0,n]);const a=s-.5*r;return[Math.round(255*(i[0]+a)),Math.round(255*(i[1]+a)),Math.round(255*(i[2]+a))]},exports.isArray=i,exports.isBoolean=a,exports.isCharacter=t=>/^[\w]$/.test(t),exports.isDate=t=>"date"==n(t),exports.isDef=o,exports.isDigit=tt,exports.isEmpty=X,exports.isFalse=t=>!B(t),exports.isFloat=l,exports.isFunction=h,exports.isInteger=c,exports.isLetter=et,exports.isMap=t=>"map"==n(t),exports.isNotEmpty=t=>!X(t),exports.isNull=t=>null===t,exports.isNumber=u,exports.isObject=p,exports.isPlainObject=v,exports.isRegExp=t=>"regexp"==n(t),exports.isScalar=t=>-1!=d.indexOf(n(t)),exports.isSet=t=>"set"==n(t),exports.isSpecialChar=st,exports.isString=x,exports.isSymbol=t=>"symbol"==typeof t,exports.isTrue=B,exports.isUndefined=m,exports.lerp=(e,s,r)=>e+(s-e)*t(r,0,1),exports.loop=(t,e)=>{let s=!1;const r=()=>H(void 0,void 0,void 0,(function*(){s&&(yield t(),setTimeout(r,e))}));return{start(){s||(s=!0,r())},stop(){s=!1}}},exports.lowerCamelCase=V,exports.map=b,exports.mask=ht,exports.maskMoney=(t,e,s)=>(s++,e=parseInt((e||"0").replace(/\D/g,"")).toString(),ct(t,e.length<s?("0".repeat(s)+e).slice(-1*s):e)),exports.maskReverse=ct,exports.maskTest=(t,e)=>t.length==ht(t,e).length,exports.merge=vt,exports.msToString=t=>{const e=[];return _.forEach((s=>{const r=K[s],n=(t-t%r)/r;n&&(t-=n*r,e.push(n.toString()+s))})),e.join(" ")},exports.noop=J,exports.parseMs=t=>{const e=/(-?(?:\d+)?\.?\d+) *(ms|s|m|h|d|w|y)/gm;let s,r=0;for(;null!==(s=e.exec(t));)s.index===e.lastIndex&&e.lastIndex++,r+=parseFloat(s[1])*K[s[2]]||0;return r},exports.parseSize=t=>{if(u(t))return t+"px";const e=(t=>/(-?(?:\d+)?\.?\d+) *(px|%|cm|mm|in|pt|pc|en|ex|ch|rem|vw|vh|vmin|vmax)*/g.exec(t))(t);return e?parseFloat(e[1])+(e[2]||"px"):"0px"},exports.random=e,exports.randomCase=t=>t.split("").map((t=>Math.random()<.5?t.toUpperCase():t.toLowerCase())).join(""),exports.randomElement=t=>t.length?t[e(0,t.length-1)]:null,exports.rangeArray=(t,e,s=1)=>Array.from({length:(e-t)/s+1},((e,r)=>t+r*s)),exports.rgbToHex=R,exports.rgbToHsl=(t,e,s)=>{const[r,n,i]=((...t)=>t.map((t=>t/255)))(t,e,s),a=Math.max(r,n,i),o=Math.min(r,n,i),u=a-o,l=(o+a)/2;return[60*k(u,a,r,n,i),A(u,l),l]},exports.shadeColor=C,exports.shuffleArray=s,exports.shuffleString=rt,exports.simpleID=()=>j()+T(),exports.sleep=t=>new Promise((e=>setTimeout(e,t))),exports.stringReverse=it,exports.tintColor=I,exports.toArray=t=>i(t)?t:o(t)?[t]:[],exports.toBool=g,exports.type=n,exports.uniqueArray=t=>t.filter(((t,e,s)=>s.indexOf(t)===e)),exports.uniqueID=()=>P()+P()+P()+P(),exports.upperCamelCase=at,exports.uuidv4=()=>Y()+"-"+T()+"-4"+j()+"-"+T()+"-"+(Y()+T());
7
+ "use strict";const t=(t,e,s)=>Math.max(e,Math.min(s,t)),e=(t,e)=>Math.floor(Math.random()*(e-t+1)+t),s=t=>{for(let s=t.length-1;s>0;s--){const r=e(0,s);[t[s],t[r]]=[t[r],t[s]]}return t},r={},n=t=>null==t?"null":r[r.toString.call(t)]||"object";["Array","AsyncFunction","Boolean","Date","Function","Map","Number","Object","RegExp","Set","String"].forEach((t=>r["[object "+t+"]"]=t.toLowerCase()));const a=t=>"array"==n(t),i=t=>"boolean"==n(t),o=t=>"null"!=n(t),l=t=>"number"==n(t),u=t=>l(t)&&!!(t%1),h=t=>"function"==typeof t,c=t=>l(t)&&!(t%1),p=t=>"object"==n(t),v=t=>p(t)&&t.constructor===Object,x=["boolean","number","string"],m=t=>"string"==typeof t,d=t=>void 0===t,g=[1,"1",!0,"true"],f=t=>-1!=g.indexOf(t),y=(t,e,s)=>{for(let r=0;r<t.length&&!1!==e.call(s,t[r],r,t);r++);return t},E=(t,e,s)=>{let r="";const n=Object.keys(t);for(let a=0;a<n.length&&(r=n[a],!1!==e.call(s,t[r],r,t));a++);return t},S=(t,e,s)=>Object.fromEntries(Object.entries(t).map((([r,n])=>[r,e.call(s,n,r,t)]))),b=t=>parseInt(t??"0",16)||0,w=t=>t.replace(/^#/,"").match(/.{1,2}/g)?.map(b)||[],I=t=>("0"+t.toString(16)).slice(-2),R=(t,e,s)=>"#"+I(t)+I(e)+I(s),C=(e,s)=>{const r=w(e);s=t(s,0,1);const[n,a,i]=r.map((t=>Math.round(t*s)));return R(n,a,i)},M=(e,s)=>{const r=w(e);s=t(s,0,1);const[n,a,i]=r.map((t=>Math.round(t+(255-t)*s)));return R(n,a,i)},O={50:.95,100:.9,200:.75,300:.6,400:.3,500:0,600:-.1,700:-.25,800:-.4,900:-.55,950:-.71},T=(t,e,s,r,n)=>0===t?0:e===s?(r-n)/t%6:e===r?(n-s)/t+2:e===n?(s-r)/t+4:0,A=(t,e)=>0===t?0:t/(1-Math.abs(2*e-1));class k{constructor(t){this.key=this.shuffle(k.dictionary,t,!1)}encrypt(t){return this.shuffle(t,this.key,!1)}decrypt(t){return this.shuffle(t,this.key,!0)}index(t,e,s){return[k.dictionary.indexOf(t[s]),k.dictionary.indexOf(e[s%e.length])]}result(t,e,s){return k.dictionary[(s?t-e+k.dictionary.length:t+e)%k.dictionary.length]}shuffle(t,e,s){let r="";for(let n=0;n<t.length;n++){const[a,i]=this.index(t,e,n);r+=-1===a||-1===i?t[n]:this.result(a,i,s)}return r}}k.dictionary="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";const D=(t=64)=>Array(Math.ceil(t/2)).fill(0).map((()=>e(0,255).toString(16).padStart(2,"0"))).join("").slice(0,t),N=t=>("0"+t.toString()).slice(-2),j={"%y":t=>N(t.getFullYear()),"%Y":t=>t.getFullYear().toString(),"%m":t=>N(t.getMonth()+1),"%d":t=>N(t.getDate()),"%H":t=>N(t.getHours()),"%M":t=>N(t.getMinutes()),"%S":t=>N(t.getSeconds())},L=(t,e)=>(e=e??new Date,t.replace(/%[yYmdHMS]/g,(t=>j[t]?j[t](e):t.slice(1)))),P=36e5,Y=24*P,U={ms:1,s:1e3,m:6e4,h:P,d:Y,w:7*Y,y:315576e5},$=["y","d","h","m","s","ms"];const F=t=>0==(t?.length??0),X=["",0,"0",null,!1,void 0],q=t=>-1==X.indexOf(t),K=()=>{},_=(t,e,s)=>e(t.toLowerCase().replace(/\W+/g," ")).replace(/\s/g,s??""),H=(t,e)=>_(t,(t=>t.replace(/\s(\w)/g,(t=>t.toUpperCase()))),e),Q=H,B=/&(amp|apos|lt|gt|nbsp|quot);/g,J={amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",quot:'"'},z=t=>/^[\d]$/.test(t),V=t=>/^[A-Za-z]$/.test(t),Z=t=>/^[^\w]$/.test(t),W=t=>s(t.split("")).join("");class G{constructor(){this.hasSpace=!1,this._space=" ",this.hasNumbers=!1,this._numbers="0123456789",this.hasSymbols=!1,this._symbols="!@#$%^&*()<>.<~:;?+=-_",this.hasUpper=!1,this._upper="ABCDEFGHIJKLMNOPQRSTUVWXYZ",this.hasLower=!1,this._lower="abcdefghijklmnopqrstuvwxyz",this.hasChars=!1,this._chars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"}chars(){return this.hasChars=!0,this}static chars(){return(new G).chars()}lower(){return this.hasLower=!0,this}static lower(){return(new G).lower()}make(t){let s="";this.hasSpace&&(s+=this._space),this.hasNumbers&&(s+=this._numbers),this.hasSymbols&&(s+=this._symbols),this.hasUpper&&!this.hasChars&&(s+=this._upper),this.hasLower&&!this.hasChars&&(s+=this._lower),this.hasChars&&(s+=this._chars);let r="";if(t&&s.length){s=W(s);for(let n=0;n<t;n++)r+=s.charAt(e(0,s.length-1))}return r}numbers(){return this.hasNumbers=!0,this}static numbers(){return(new G).numbers()}space(){return this.hasSpace=!0,this}static space(){return(new G).space()}symbols(){return this.hasSymbols=!0,this}static symbols(){return(new G).symbols()}upper(){return this.hasUpper=!0,this}static upper(){return(new G).upper()}}const tt=t=>t.split("").reverse().join(""),et=(t,e)=>_(t,(t=>t.replace(/(\w)(\w*)/g,((t,e,s)=>e.toUpperCase()+s))),e),st=(t,e)=>e(t.value)?t.value:(t=>(t.maskIndex--,""))(t),rt={"#":t=>t.value,0:t=>st(t,z),9:t=>st(t,z),A:t=>st(t,V),Z:t=>st(t,V),L:t=>st(t,V).toLowerCase(),U:t=>st(t,V).toUpperCase(),S:t=>st(t,Z)},nt=t=>{t.maskIndex++,t.textIndex++;const{mask:e,maskIndex:s,text:r,textIndex:n}=t;t.key=e[s],t.value=r[n];const{key:a,value:i}=t;return d(a)||d(i)?"":(t=>rt[t.key]?rt[t.key](t):(t.key!=t.value&&t.textIndex--,t.key))(t)+nt(t)},at=(t,e)=>nt({mask:t,maskIndex:-1,text:e,textIndex:-1,key:"",value:""}),it=(t,e)=>tt(at(tt(t),tt(e))),ot=(t,e)=>t.reduce(((t,s)=>({...t,[s]:e[s]})),{}),lt=(t,...e)=>{if(!e.length)return t;const s=e.shift();if(v(t)&&v(s))for(const e in s)v(s[e])?(t[e]||(t={...t,[e]:{}}),t[e]=lt(t[e],s[e])):t={...t,[e]:s[e]};return lt(t,...e)};class ut{}var ht,ct,pt,vt,xt,mt,dt,gt,ft;ut.DESCRIPTION=Symbol("DESCRIPTION"),ut.ERROR=Symbol("ERROR"),ut.EXAMPLE=Symbol("EXAMPLE"),ut.INDEXES=Symbol("INDEXES"),ut.KEYS=Symbol("KEYS"),ut.LIST=Symbol("LIST"),ut.NAME=Symbol("NAME"),ut.REQUIRED=Symbol("REQUIRED"),ut.SOURCE=Symbol("SOURCE"),ut.TYPE=Symbol("TYPE");class yt{constructor(t){this[ht]="",this[ct]="",this[pt]=null,this[vt]="",this[xt]="any",this[mt]=!1,this.rules=[],this.custom=[],this[ut.TYPE]=t}description(t){return this[ut.DESCRIPTION]=t,this}example(t){return this[ut.EXAMPLE]=t,this}empty(t){const e=t;return this.unshift((({value:t})=>{const s=o(t);return{break:!o(e)&&!s,value:s?t:h(e)?e():e}}))}equal(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>{const n=s({value:t,context:r});return t==n?{value:t}:this.invalid(`.equal(${n})`,e)}))}error(t){return m(t)&&(this[ut.ERROR]=t),this}filter(...t){const e=t;return this.unshift((({value:t})=>{const s=-1==e.indexOf(t);return{break:!s,value:s?t:void 0}}))}fn(t){return h(t)?t:()=>t}from(t){return this[ut.SOURCE]=t,this}invalid(t,e){return t=`[${this[ut.TYPE]}]${t}`,{error:this[ut.ERROR]?this[ut.ERROR]:this[ut.NAME]?this[ut.NAME]+":"+t:t,message:e}}model(){return this.toString()}parse(){return this.unshift((({value:t})=>({value:t})))}push(t){return this.rules.push(t),this}required(t){return this[ut.REQUIRED]=!0,this.unshift((({value:e})=>o(e)?{value:e}:this.invalid(".required",t)))}test(t){return!m(this.validate(t).error)}async testAsync(t){return!m((await this.validateAsync(t)).error)}toString(){return this[ut.TYPE]}unshift(t){return this.rules.unshift(t),this}validate(t,e){if(this.custom.length)return this.invalid("[async]");let s={value:t};for(let t=0;t<this.rules.length;t++){if(s=this.rules[t]({value:s.value,context:e}),s.error?.length)return{error:s.error,...s.message?{message:s.message}:{}};if(s.break)return{value:s.value}}return{value:s.value}}async validateAsync(t,e){let s=this.validate(t,e);if(s.error)return{error:s.error};for(let t=0;t<this.custom.length;t++){if(s=await this.custom[t]({value:s.value}),s.error)return{error:s.error};if(s.break)return{value:s.value}}return{value:s.value}}}ht=ut.NAME,ct=ut.DESCRIPTION,pt=ut.EXAMPLE,ut.SOURCE,vt=ut.ERROR,xt=ut.TYPE,mt=ut.REQUIRED;class Et extends yt{constructor(t){super("array"),this[dt]=[],this.push((({value:e})=>a(e)?{value:e}:this.invalid("",t)))}between(t,e,s){return this.min(t,s),this.max(e,s)}items(t,e){const s=t;return s&&this[ut.INDEXES].push(s),s?this.push((({value:t})=>{s[ut.NAME]="";for(let r=0;r<t.length;r++){const{error:n,value:a}=s.validate(t[r],t);if(n)return this.invalid("< "+n+"["+r+"] >",e);t[r]=a}return{value:t}})):this}length(t,e){const s=t;return this.push((({value:t})=>t.length==s?{value:t}:this.invalid(".length("+s+")",e)))}max(t,e){const s=t;return this.push((({value:t})=>t.length<=s?{value:t}:this.invalid(".max("+s+")",e)))}min(t,e){const s=t;return this.push((({value:t})=>t.length>=s?{value:t}:this.invalid(".min("+s+")",e)))}model(){return this[ut.INDEXES].length?this[ut.INDEXES].map((t=>t.model())):this[ut.TYPE]}toString(){return this[ut.INDEXES].length?JSON.stringify(this.model(),null,4):this[ut.TYPE]}}dt=ut.INDEXES;class St extends yt{constructor(t){super("boolean"),this.push((({value:e})=>i(e)?{value:e}:this.invalid("",t)))}parse(){return this.unshift((({value:t})=>({value:o(t)?f(t):t})))}}class bt extends yt{constructor(t){super("date"),this.push((({value:e})=>m(e)&&e.length>=9&&!isNaN(new Date(e).getTime())?{value:e}:this.invalid("",t)))}format(t){const e=t;return this.push((({value:t})=>({value:L(e,new Date(t))})))}parse(){return this.unshift((({value:t})=>({value:new Date(m(t)&&t.length<=10?`${t} 12:00`:t)})))}}class wt extends yt{constructor(t){super("enum"),this[gt]=[],this.push((({value:e})=>o(e)?{value:e}:this.invalid(`('${this[ut.LIST].join("', '")}')`,t)))}list(t,e){const s=t;return s&&this[ut.LIST].push(...s),s?this.push((({value:t})=>-1!=this[ut.LIST].indexOf(t)?{value:t}:this.invalid(`('${this[ut.LIST].join("', '")}')`,e))):this}toString(){return`${this[ut.TYPE]}('${this[ut.LIST].join("', '")}')`}}gt=ut.LIST;class It extends yt{constructor(t){super("number"),this.push((({value:e})=>l(e)?{value:e}:this.invalid("",t)))}between(t,e,s){return this.min(t,s),this.max(e,s)}float(t){return this.push((({value:e})=>u(e)?{value:e}:this.invalid(".float",t)))}integer(t){return this.push((({value:e})=>c(e)?{value:e}:this.invalid(".integer",t)))}max(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>{const n=s({value:t,context:r});return t<=n?{value:t}:this.invalid(`.max(${n})`,e)}))}min(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>{const n=s({value:t,context:r});return t>=n?{value:t}:this.invalid(`.min(${n})`,e)}))}parse(){return this.unshift((({value:t})=>({value:o(t)?parseFloat(t.toString()):t})))}}class Rt extends yt{constructor(t){super("object"),this[ft]={},this.push((({value:e})=>p(e)?{value:e}:this.invalid("",t)))}keys(t,e){const s=t;return s&&(this[ut.KEYS]={...this[ut.KEYS],...s}),s?this.push((({value:t})=>{const r=[],n={};return Object.keys(s).forEach((a=>{const i=s[a];i[ut.NAME]=i[ut.SOURCE]??a;const{error:l,message:u,value:h}=i.validate(t[i[ut.NAME]],n);!e&&u&&(e=u),l&&r.push(l),o(h)&&(n[a]=h)})),r.length?this.invalid("{ "+r.join(", ")+" }",e):{value:n}})):this}model(){const t={},e=Object.keys(this[ut.KEYS]);return e.length&&e.forEach((e=>t[e]=this[ut.KEYS][e].model())),e.length?t:this[ut.TYPE]}parse(t){return this.unshift((({value:e})=>{if(!p(e))try{e=JSON.parse(e)}catch(e){return this.invalid("",t)}return{value:e}}))}toString(){return Object.keys(this[ut.KEYS]).length?JSON.stringify(this.model(),null,4):this[ut.TYPE]}}ft=ut.KEYS;class Ct extends yt{constructor(t){super("string"),this.push((({value:e})=>m(e)?{value:e}:this.invalid("",t)))}between(t,e,s){return this.min(t,s),this.max(e,s)}email(t){const e=/^[\w-\\.]+@([\w-]+\.)+[\w-]{2,4}$/i;return this.push((({value:s})=>e.test(s)?{value:s}:this.invalid(".email",t)))}length(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>{const n=s({value:t,context:r});return t.length==n?{value:t}:this.invalid(`.length(${n})`,e)}))}lowerCase(){return this.push((({value:t})=>({value:t.toLowerCase()})))}lowerCamelCase(){return this.push((({value:t})=>({value:H(t)})))}max(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>{const n=s({value:t,context:r});return t.length<=n?{value:t}:this.invalid(`.max(${n})`,e)}))}mask(t){const e=this.fn(t);return this.push((({value:t,context:s})=>({value:at(e({value:t,context:s}),t)})))}min(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>{const n=s({value:t,context:r});return t.length>=n?{value:t}:this.invalid(`.min(${n})`,e)}))}parse(){return this.unshift((({value:t})=>({value:p(t)?JSON.stringify(t):o(t)?t.toString():t})))}required(t){return this[ut.REQUIRED]=!0,this.push((({value:e})=>e.length?{value:e}:this.invalid(".required",t)))}regex(t,e){return this.push((({value:s})=>t.test(s)?{value:s}:this.invalid(".regex",e)))}replace(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>({value:t.replace(s({value:t,context:r}),e)})))}trim(){return this.push((({value:t})=>({value:t.trim()})))}upperCase(){return this.push((({value:t})=>({value:t.toUpperCase()})))}upperCamelCase(){return this.push((({value:t})=>({value:et(t)})))}}class Mt{static array(t,e){return new Et(e).items(t)}static boolean(t){return new St(t)}static date(t){return new bt(t)}static enum(t,e){return new wt(e).list(t)}static number(t){return new It(t)}static object(t,e){return new Rt(e).keys(t)}static ref(t,e){return({context:s})=>s&&o(s[t])?s[t]:e}static string(t){return new Ct(t)}test(t,...e){return!m(Mt.validate(t,...e).error)}async testAsync(t,...e){return!m((await Mt.validateAsync(t,...e)).error)}static validate(t,...e){let s={value:t};for(let t=0;t<e.length;t++)if(s=e[t].validate(s.value),s.error)return{value:s.value,error:s.error};return{value:s.value}}static async validateAsync(t,...e){let s={value:t};for(let t=0;t<e.length;t++)if(s=await e[t].validateAsync(s.value),s.error)return{value:s.value,error:s.error};return{value:s.value}}}exports.EventEmitter=class{constructor(){this.events=new Map}on(t,e){const s=this.events.get(t);return s?s.push(e):this.events.set(t,[e]),{dispose:()=>this.off(t,e)}}once(t,e){const s=r=>{e(r),this.off(t,s)};return this.on(t,s),{dispose:()=>this.off(t,s)}}off(t,e){const s=this.events.get(t);if(e){if(s){const t=s.indexOf(e);t>=0&&s.splice(t,1)}}else this.events.set(t,[])}emit(t,e){const s=this.events.get(t);s&&s.forEach((t=>t(e)))}},exports.Hash=k,exports.RandomString=G,exports.Validation=Mt,exports.ValidationBase=yt,exports.ValidationKeys=ut,exports.allowed=ot,exports.cache=()=>{const t=[],e=[];return s=>{let r=t.indexOf(s);return-1==r&&(t.push(s),e.push({}),r=e.length-1),e[r]}},exports.camelCase=Q,exports.chunkArray=(t,e)=>{const s=[];for(let r=0;r<t.length;r+=e)s.push(t.slice(r,r+e));return s},exports.clamp=t,exports.colorPalette=(t,e)=>S(e??O,(e=>0==e?t:e>0?M(t,e):C(t,1- -1*e))),exports.compareArray=(t,e)=>t.length===e.length&&t.every(((t,s)=>t===e[s])),exports.countArray=t=>{const e={};return t.forEach((t=>{const s=t.toString();e[s]=(e[s]||0)+1})),e},exports.cutText=(t,e)=>{if(t.length>e){const s=t.substring(0,e).split(" ");return s.pop(),s.join(" ")+"..."}return t},exports.dateFormat=L,exports.dateRange=(t,e)=>{const s=new Date(t),r=[];for(;t<e;)s.setDate(s.getDate()+1),r.push(new Date(s));return r},exports.debounce=(t,e)=>{let s;const r=()=>{s&&clearTimeout(s)};return{cancel:r,run(...n){r(),s=setTimeout((()=>t(...n)),e)}}},exports.decodeHTML=t=>t.replace(B,((t,e)=>J[e])).replace(/&#(\d+);/gi,((t,e)=>String.fromCharCode(parseInt(e,10)))),exports.denied=(t,e)=>ot(Object.keys(e).filter((e=>-1==t.indexOf(e))),e),exports.each=(t,e,s)=>a(t)?y(t,e,s):p(t)?E(t,e,s):t,exports.encodeHTML=t=>t.replace(/[^0-9A-Za-z ]/g,(t=>"&#"+t.charCodeAt(0)+";")),exports.forEachAsync=async(t,e,s)=>{await Promise.allSettled(t.map(((r,n)=>e.call(s,r,n,t)?.catch(K)))).catch(K)},exports.forEachIndex=y,exports.forEachKey=E,exports.forEachPage=async t=>{let e=!0;const s=()=>e=!0;let r=1;for(;e;)e=!1,await(t(r,s)?.catch(K)),r+=1},exports.forEachSeries=async(t,e,s)=>{for(let r=0;r<t.length;r++)await(e.call(s,t[r],r,t)?.catch(K))},exports.forLoop=(t,e,s)=>{for(let r=1;r<=t&&!1!==e.call(s,r,t);r++);return t},exports.hexToRgb=w,exports.hslToRgb=(t,e,s)=>{t/=60;const r=(1-Math.abs(2*s-1))*e,n=r*(1-Math.abs(t%2-1));let a=[0,0,0];t<=1?a=[r,n,0]:t<=2?a=[n,r,0]:t<=3?a=[0,r,n]:t<=4?a=[0,n,r]:t<=5?a=[n,0,r]:t<=6&&(a=[r,0,n]);const i=s-.5*r;return[Math.round(255*(a[0]+i)),Math.round(255*(a[1]+i)),Math.round(255*(a[2]+i))]},exports.inArray=(t,e)=>-1!=e.indexOf(t),exports.isArray=a,exports.isBoolean=i,exports.isCharacter=t=>/^[\w]$/.test(t),exports.isDate=t=>"date"==n(t),exports.isDef=o,exports.isDigit=z,exports.isEmpty=F,exports.isFalse=t=>!q(t),exports.isFloat=u,exports.isFunction=h,exports.isInteger=c,exports.isLetter=V,exports.isMap=t=>"map"==n(t),exports.isNotEmpty=t=>!F(t),exports.isNull=t=>null===t,exports.isNumber=l,exports.isObject=p,exports.isPlainObject=v,exports.isRegExp=t=>"regexp"==n(t),exports.isScalar=t=>-1!=x.indexOf(n(t)),exports.isSet=t=>"set"==n(t),exports.isSpecialChar=Z,exports.isString=m,exports.isSymbol=t=>"symbol"==typeof t,exports.isTrue=q,exports.isUndefined=d,exports.lerp=(e,s,r)=>e+(s-e)*t(r,0,1),exports.loop=(t,e)=>{let s=!1;const r=async()=>{s&&(await t(),setTimeout(r,e))};return{start(){s||(s=!0,r())},stop(){s=!1}}},exports.lowerCamelCase=H,exports.map=S,exports.mask=at,exports.maskMoney=(t,e,s)=>(s++,e=parseInt((e||"0").replace(/\D/g,"")).toString(),it(t,e.length<s?("0".repeat(s)+e).slice(-1*s):e)),exports.maskReverse=it,exports.maskTest=(t,e)=>t.length==at(t,e).length,exports.merge=lt,exports.msToString=t=>{const e=[];return $.forEach((s=>{const r=U[s],n=(t-t%r)/r;n&&(t-=n*r,e.push(n.toString()+s))})),e.join(" ")},exports.noop=K,exports.parseMs=t=>{const e=/(-?(?:\d+)?\.?\d+) *(ms|s|m|h|d|w|y)/gm;let s,r=0;for(;null!==(s=e.exec(t));)s.index===e.lastIndex&&e.lastIndex++,r+=parseFloat(s[1])*U[s[2]]||0;return r},exports.parseSize=t=>{if(l(t))return t+"px";const e=(t=>/(-?(?:\d+)?\.?\d+) *(px|%|cm|mm|in|pt|pc|en|ex|ch|rem|vw|vh|vmin|vmax)*/g.exec(t))(t);return e?parseFloat(e[1])+(e[2]||"px"):"0px"},exports.random=e,exports.randomCase=t=>t.split("").map((t=>Math.random()<.5?t.toUpperCase():t.toLowerCase())).join(""),exports.randomElement=t=>t.length?t[e(0,t.length-1)]:null,exports.rangeArray=(t,e,s=1)=>Array.from({length:(e-t)/s+1},((e,r)=>t+r*s)),exports.rgbToHex=R,exports.rgbToHsl=(t,e,s)=>{const[r,n,a]=((...t)=>t.map((t=>t/255)))(t,e,s),i=Math.max(r,n,a),o=Math.min(r,n,a),l=i-o,u=(o+i)/2;return[60*T(l,i,r,n,a),A(l,u),u]},exports.shadeColor=C,exports.shuffleArray=s,exports.shuffleString=W,exports.sleep=t=>new Promise((e=>setTimeout(e,t))),exports.stringReverse=tt,exports.tintColor=M,exports.toArray=t=>a(t)?t:o(t)?[t]:[],exports.toBool=f,exports.type=n,exports.uniqueArray=t=>t.filter(((t,e,s)=>s.indexOf(t)===e)),exports.uniqueID=D,exports.upperCamelCase=et,exports.uuidv1=()=>{const t=1e4*(Date.now()+122192928e5),s=(4294967295&t)>>>0,r=(t/4294967296&65535)>>>0,n=(t/281474976710656&4095)>>>0,a=e(0,s),i=(t,e)=>t.toString(16).padStart(e,"0");return[i(s,8),i(r,4),i(4096|n,4),i(a>>8&63|128,2)+i(255&a,2),D(12)].join("-")},exports.uuidv1ToTimestamp=t=>{const e=t.replace(/-/g,""),s=parseInt(e.slice(0,8),16),r=parseInt(e.slice(8,12),16),n=(4095&parseInt(e.slice(12,16),16))*Math.pow(2,48)+r*Math.pow(2,32)+s;return Math.floor((n-122192928e9)/1e4)},exports.uuidv4=()=>{const t=[];t.push(...Array(16).fill(0).map((()=>e(0,255)))),t[6]=15&t[6]|64;const s=t.map((t=>t.toString(16).padStart(2,"0"))).join("");return[s.slice(0,8),s.slice(8,12),s.slice(12,16),s.slice(16,20),s.slice(20)].join("-")},exports.uuidv7=()=>{const t=Date.now(),s=[];s[0]=t/2**40&255,s[1]=t/2**32&255,s[2]=t>>>24&255,s[3]=t>>>16&255,s[4]=t>>>8&255,s[5]=255&t,s.push(...Array(10).fill(0).map((()=>e(0,255)))),s[6]=15&s[6]|112,s[8]=63&s[8]|128;const r=s.map((t=>t.toString(16).padStart(2,"0"))).join("");return[r.slice(0,8),r.slice(8,12),r.slice(12,16),r.slice(16,20),r.slice(20)].join("-")},exports.uuidv7ToTimestamp=t=>parseInt(t.replace(/-/g,"").slice(0,12),16);
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @andrewcaires/utils.js v0.4.9
2
+ * @andrewcaires/utils.js v0.4.10
3
3
  * JavaScript utility library for web and nodejs development
4
4
  * (c) 2025 Andrew Caires
5
5
  * @license: MIT
@@ -73,6 +73,8 @@ declare const type: (test: any) => string;
73
73
 
74
74
  declare const countArray: <T extends TypeKey>(arr: Array<T>) => TypeObject<number, string>;
75
75
 
76
+ declare const inArray: (value: any, arr: Array<any>) => boolean;
77
+
76
78
  declare const randomElement: <T>(arr: Array<T>) => T | null;
77
79
 
78
80
  declare const rangeArray: (start: number, end: number, step?: number) => Array<number>;
@@ -114,12 +116,18 @@ declare class Hash {
114
116
  private shuffle;
115
117
  }
116
118
 
117
- declare const simpleID: () => string;
119
+ declare const uniqueID: (length?: number) => string;
120
+
121
+ declare const uuidv1: () => string;
118
122
 
119
- declare const uniqueID: () => string;
123
+ declare const uuidv1ToTimestamp: (uuid: string) => number;
120
124
 
121
125
  declare const uuidv4: () => string;
122
126
 
127
+ declare const uuidv7: () => string;
128
+
129
+ declare const uuidv7ToTimestamp: (uuid: string) => number;
130
+
123
131
  declare const dateFormat: (format: string, date?: Date) => string;
124
132
 
125
133
  declare const dateRange: (start: Date, end: Date) => Array<Date>;
@@ -278,8 +286,10 @@ type ValidationCallback<T = any> = (value: IValidationInput<T>) => IValidationOu
278
286
  declare class ValidationKeys {
279
287
  static readonly DESCRIPTION: unique symbol;
280
288
  static readonly ERROR: unique symbol;
289
+ static readonly EXAMPLE: unique symbol;
281
290
  static readonly INDEXES: unique symbol;
282
291
  static readonly KEYS: unique symbol;
292
+ static readonly LIST: unique symbol;
283
293
  static readonly NAME: unique symbol;
284
294
  static readonly REQUIRED: unique symbol;
285
295
  static readonly SOURCE: unique symbol;
@@ -289,6 +299,7 @@ declare class ValidationKeys {
289
299
  declare class ValidationBase<T = any> {
290
300
  [ValidationKeys.NAME]: string;
291
301
  [ValidationKeys.DESCRIPTION]: string;
302
+ [ValidationKeys.EXAMPLE]: T | null;
292
303
  [ValidationKeys.SOURCE]?: string;
293
304
  [ValidationKeys.ERROR]: string;
294
305
  [ValidationKeys.TYPE]: string;
@@ -297,6 +308,7 @@ declare class ValidationBase<T = any> {
297
308
  private custom;
298
309
  constructor(type: string);
299
310
  description(value: string): this;
311
+ example(value: T): this;
300
312
  empty(value?: T | TypeCallbackFunction<T>): this;
301
313
  equal(value: T | IValidationFunction<T>, message?: string): this;
302
314
  error(value?: string): this;
@@ -354,6 +366,13 @@ declare class ValidationDate extends ValidationBase<Date | string> {
354
366
  parse(): this;
355
367
  }
356
368
 
369
+ declare class ValidationEnum extends ValidationBase<string> {
370
+ private [ValidationKeys.LIST];
371
+ constructor(message?: string);
372
+ list(value?: Array<string>, message?: string): this;
373
+ toString(): string;
374
+ }
375
+
357
376
  declare class ValidationNumber extends ValidationBase<number> {
358
377
  constructor(message?: string);
359
378
  between(min: number | TypeCallbackFunction, max: number | TypeCallbackFunction, message?: string): this;
@@ -396,6 +415,7 @@ declare class Validation {
396
415
  static array(value?: ValidationBase, message?: string): ValidationArray;
397
416
  static boolean(message?: string): ValidationBoolean;
398
417
  static date(message?: string): ValidationDate;
418
+ static enum(value?: Array<any>, message?: string): ValidationEnum;
399
419
  static number(message?: string): ValidationNumber;
400
420
  static object(value?: TypeObject<ValidationBase>, message?: string): ValidationObject;
401
421
  static ref(ref: string | number, value?: any): TypeCallbackFunction;
@@ -408,5 +428,5 @@ declare class Validation {
408
428
 
409
429
  type ValidationCallbackAsync<T = any> = (value: IValidationInput<T>) => Promise<IValidationOutput<T>>;
410
430
 
411
- export { EventEmitter, Hash, RandomString, Validation, ValidationBase, ValidationKeys, allowed, cache, camelCase, chunkArray, clamp, colorPalette, compareArray, countArray, cutText, dateFormat, dateRange, debounce, decodeHTML, denied, each, encodeHTML, forEachAsync, forEachIndex, forEachKey, forEachPage, forEachSeries, forLoop, hexToRgb, hslToRgb, isArray, isBoolean, isCharacter, isDate, isDef, isDigit, isEmpty, isFalse, isFloat, isFunction, isInteger, isLetter, isMap, isNotEmpty, isNull, isNumber, isObject, isPlainObject, isRegExp, isScalar, isSet, isSpecialChar, isString, isSymbol, isTrue, isUndefined, lerp, loop, lowerCamelCase, map, mask, maskMoney, maskReverse, maskTest, merge, msToString, noop, parseMs, parseSize, random, randomCase, randomElement, rangeArray, rgbToHex, rgbToHsl, shadeColor, shuffleArray, shuffleString, simpleID, sleep, stringReverse, tintColor, toArray, toBool, type, uniqueArray, uniqueID, upperCamelCase, uuidv4 };
431
+ export { EventEmitter, Hash, RandomString, Validation, ValidationBase, ValidationKeys, allowed, cache, camelCase, chunkArray, clamp, colorPalette, compareArray, countArray, cutText, dateFormat, dateRange, debounce, decodeHTML, denied, each, encodeHTML, forEachAsync, forEachIndex, forEachKey, forEachPage, forEachSeries, forLoop, hexToRgb, hslToRgb, inArray, isArray, isBoolean, isCharacter, isDate, isDef, isDigit, isEmpty, isFalse, isFloat, isFunction, isInteger, isLetter, isMap, isNotEmpty, isNull, isNumber, isObject, isPlainObject, isRegExp, isScalar, isSet, isSpecialChar, isString, isSymbol, isTrue, isUndefined, lerp, loop, lowerCamelCase, map, mask, maskMoney, maskReverse, maskTest, merge, msToString, noop, parseMs, parseSize, random, randomCase, randomElement, rangeArray, rgbToHex, rgbToHsl, shadeColor, shuffleArray, shuffleString, sleep, stringReverse, tintColor, toArray, toBool, type, uniqueArray, uniqueID, upperCamelCase, uuidv1, uuidv1ToTimestamp, uuidv4, uuidv7, uuidv7ToTimestamp };
412
432
  export type { CacheCallback, EachCallback, EachValue, EventCallback, EventList, ForEachCallback, IDebounceCallbacks, IEventDisposable, ILoopCallbacks, IValidationFunction, IValidationInput, IValidationOutput, TypeArray, TypeArrayAny, TypeArrayFunction, TypeArrayNumber, TypeArrayString, TypeCallback, TypeCallbackArray, TypeCallbackFunction, TypeCallbackMap, TypeCallbackObject, TypeKey, TypeNullable, TypeObject, TypeObjectAny, TypeObjectBoolean, TypeObjectFunction, TypeObjectNullable, TypeObjectNumber, TypeObjectString, TypeScalar, ValidationCallback, ValidationCallbackAsync, forEachPageCallback };
package/dist/index.esm.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /*!
2
- * @andrewcaires/utils.js v0.4.9
2
+ * @andrewcaires/utils.js v0.4.10
3
3
  * JavaScript utility library for web and nodejs development
4
4
  * (c) 2025 Andrew Caires
5
5
  * @license: MIT
6
6
  */
7
- const t=(t,e)=>{const s=[];for(let r=0;r<t.length;r+=e)s.push(t.slice(r,r+e));return s},e=(t,e)=>t.length===e.length&&t.every(((t,s)=>t===e[s])),s=t=>{const e={};return t.forEach((t=>{const s=t.toString();e[s]=(e[s]||0)+1})),e},r=(t,e,s)=>Math.max(e,Math.min(s,t)),n=(t,e,s)=>t+(e-t)*r(s,0,1),i=(t,e)=>Math.floor(Math.random()*(e-t+1)+t),a=t=>t.length?t[i(0,t.length-1)]:null,u=(t,e,s=1)=>Array.from({length:(e-t)/s+1},((e,r)=>t+r*s)),l=t=>{for(let e=t.length-1;e>0;e--){const s=i(0,e);[t[e],t[s]]=[t[s],t[e]]}return t},h={},o=t=>null==t?"null":h[h.toString.call(t)]||"object";["Array","AsyncFunction","Boolean","Date","Function","Map","Number","Object","RegExp","Set","String"].forEach((t=>h["[object "+t+"]"]=t.toLowerCase()));const c=t=>"array"==o(t),v=t=>"boolean"==o(t),d=t=>"date"==o(t),p=t=>"null"!=o(t),m=t=>"number"==o(t),f=t=>m(t)&&!!(t%1),g=t=>"function"==typeof t,y=t=>m(t)&&!(t%1),x=t=>"map"==o(t),E=t=>null===t,b=t=>"object"==o(t),S=t=>b(t)&&t.constructor===Object,w=t=>"regexp"==o(t),O=["boolean","number","string"],R=t=>-1!=O.indexOf(o(t)),C=t=>"set"==o(t),I=t=>"string"==typeof t,M=t=>"symbol"==typeof t,j=t=>void 0===t,k=t=>c(t)?t:p(t)?[t]:[],N=t=>t.filter(((t,e,s)=>s.indexOf(t)===e)),D=[1,"1",!0,"true"],A=t=>-1!=D.indexOf(t),Y=()=>{const t=[],e=[];return s=>{let r=t.indexOf(s);return-1==r&&(t.push(s),e.push({}),r=e.length-1),e[r]}},T=(t,e,s)=>{for(let r=0;r<t.length&&!1!==e.call(s,t[r],r,t);r++);return t},U=(t,e,s)=>{let r="";const n=Object.keys(t);for(let i=0;i<n.length&&(r=n[i],!1!==e.call(s,t[r],r,t));i++);return t},P=(t,e,s)=>c(t)?T(t,e,s):b(t)?U(t,e,s):t,$=(t,e,s)=>{for(let r=1;r<=t&&!1!==e.call(s,r,t);r++);return t},_=(t,e,s)=>Object.fromEntries(Object.entries(t).map((([r,n])=>[r,e.call(s,n,r,t)]))),L=t=>parseInt(null!=t?t:"0",16)||0,q=t=>{var e;return(null===(e=t.replace(/^#/,"").match(/.{1,2}/g))||void 0===e?void 0:e.map(L))||[]},K=t=>("0"+t.toString(16)).slice(-2),F=(t,e,s)=>"#"+K(t)+K(e)+K(s),X=(t,e)=>{const s=q(t);e=r(e,0,1);const[n,i,a]=s.map((t=>Math.round(t*e)));return F(n,i,a)},Q=(t,e)=>{const s=q(t);e=r(e,0,1);const[n,i,a]=s.map((t=>Math.round(t+(255-t)*e)));return F(n,i,a)},J={50:.95,100:.9,200:.75,300:.6,400:.3,500:0,600:-.1,700:-.25,800:-.4,900:-.55,950:-.71},H=(t,e)=>_(null!=e?e:J,(e=>0==e?t:e>0?Q(t,e):X(t,1- -1*e))),Z=(t,e,s)=>{t/=60;const r=(1-Math.abs(2*s-1))*e,n=r*(1-Math.abs(t%2-1));let i=[0,0,0];t<=1?i=[r,n,0]:t<=2?i=[n,r,0]:t<=3?i=[0,r,n]:t<=4?i=[0,n,r]:t<=5?i=[n,0,r]:t<=6&&(i=[r,0,n]);const a=s-.5*r;return[Math.round(255*(i[0]+a)),Math.round(255*(i[1]+a)),Math.round(255*(i[2]+a))]},z=(t,e,s,r,n)=>0===t?0:e===s?(r-n)/t%6:e===r?(n-s)/t+2:e===n?(s-r)/t+4:0,B=(t,e)=>0===t?0:t/(1-Math.abs(2*e-1)),W=(t,e,s)=>{const[r,n,i]=((...t)=>t.map((t=>t/255)))(t,e,s),a=Math.max(r,n,i),u=Math.min(r,n,i),l=a-u,h=(u+a)/2;return[60*z(l,a,r,n,i),B(l,h),h]};class G{constructor(t){this.key=this.shuffle(G.dictionary,t,!1)}encrypt(t){return this.shuffle(t,this.key,!1)}decrypt(t){return this.shuffle(t,this.key,!0)}index(t,e,s){return[G.dictionary.indexOf(t[s]),G.dictionary.indexOf(e[s%e.length])]}result(t,e,s){return G.dictionary[(s?t-e+G.dictionary.length:t+e)%G.dictionary.length]}shuffle(t,e,s){let r="";for(let n=0;n<t.length;n++){const[i,a]=this.index(t,e,n);r+=-1===i||-1===a?t[n]:this.result(i,a,s)}return r}}G.dictionary="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";const V=t=>Math.random().toString(16).slice(t),tt=()=>V(-3),et=()=>V(-4),st=()=>et()+et(),rt=()=>st()+st(),nt=()=>tt()+et(),it=()=>rt()+rt()+rt()+rt(),at=()=>st()+"-"+et()+"-4"+tt()+"-"+et()+"-"+(st()+et()),ut=t=>("0"+t.toString()).slice(-2),lt={"%y":t=>ut(t.getFullYear()),"%Y":t=>t.getFullYear().toString(),"%m":t=>ut(t.getMonth()+1),"%d":t=>ut(t.getDate()),"%H":t=>ut(t.getHours()),"%M":t=>ut(t.getMinutes()),"%S":t=>ut(t.getSeconds())},ht=(t,e)=>(e=null!=e?e:new Date,t.replace(/%[yYmdHMS]/g,(t=>lt[t]?lt[t](e):t.slice(1)))),ot=(t,e)=>{const s=new Date(t),r=[];for(;t<e;)s.setDate(s.getDate()+1),r.push(new Date(s));return r},ct=36e5,vt=24*ct,dt={ms:1,s:1e3,m:6e4,h:ct,d:vt,w:7*vt,y:315576e5},pt=["y","d","h","m","s","ms"],mt=t=>{const e=[];return pt.forEach((s=>{const r=dt[s],n=(t-t%r)/r;n&&(t-=n*r,e.push(n.toString()+s))})),e.join(" ")},ft=t=>{const e=/(-?(?:\d+)?\.?\d+) *(ms|s|m|h|d|w|y)/gm;let s,r=0;for(;null!==(s=e.exec(t));)s.index===e.lastIndex&&e.lastIndex++,r+=parseFloat(s[1])*dt[s[2]]||0;return r},gt=(t,e)=>{let s;const r=()=>{s&&clearTimeout(s)};return{cancel:r,run(...n){r(),s=setTimeout((()=>t(...n)),e)}}};class yt{constructor(){this.events=new Map}on(t,e){const s=this.events.get(t);return s?s.push(e):this.events.set(t,[e]),{dispose:()=>this.off(t,e)}}once(t,e){const s=r=>{e(r),this.off(t,s)};return this.on(t,s),{dispose:()=>this.off(t,s)}}off(t,e){const s=this.events.get(t);if(e){if(s){const t=s.indexOf(e);t>=0&&s.splice(t,1)}}else this.events.set(t,[])}emit(t,e){const s=this.events.get(t);s&&s.forEach((t=>t(e)))}}function xt(t,e,s,r){return new(s||(s=Promise))((function(n,i){function a(t){try{l(r.next(t))}catch(t){i(t)}}function u(t){try{l(r.throw(t))}catch(t){i(t)}}function l(t){t.done?n(t.value):function(t){return t instanceof s?t:new s((function(e){e(t)}))}(t.value).then(a,u)}l((r=r.apply(t,e||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;const Et=(t,e)=>{let s=!1;const r=()=>xt(void 0,void 0,void 0,(function*(){s&&(yield t(),setTimeout(r,e))}));return{start(){s||(s=!0,r())},stop(){s=!1}}},bt=t=>{var e;return 0==(null!==(e=null==t?void 0:t.length)&&void 0!==e?e:0)},St=["",0,"0",null,!1,void 0],wt=t=>-1==St.indexOf(t),Ot=t=>!wt(t),Rt=t=>!bt(t),Ct=()=>{},It=(t,e,s)=>e(t.toLowerCase().replace(/\W+/g," ")).replace(/\s/g,null!=s?s:""),Mt=(t,e)=>It(t,(t=>t.replace(/\s(\w)/g,(t=>t.toUpperCase()))),e),jt=Mt,kt=(t,e)=>{if(t.length>e){const s=t.substring(0,e).split(" ");return s.pop(),s.join(" ")+"..."}return t},Nt=/&(amp|apos|lt|gt|nbsp|quot);/g,Dt={amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",quot:'"'},At=t=>t.replace(Nt,((t,e)=>Dt[e])).replace(/&#(\d+);/gi,((t,e)=>String.fromCharCode(parseInt(e,10)))),Yt=t=>t.replace(/[^0-9A-Za-z ]/g,(t=>"&#"+t.charCodeAt(0)+";")),Tt=t=>/^[\w]$/.test(t),Ut=t=>/^[\d]$/.test(t),Pt=t=>/^[A-Za-z]$/.test(t),$t=t=>/^[^\w]$/.test(t),_t=t=>{if(m(t))return t+"px";const e=(t=>/(-?(?:\d+)?\.?\d+) *(px|%|cm|mm|in|pt|pc|en|ex|ch|rem|vw|vh|vmin|vmax)*/g.exec(t))(t);return e?parseFloat(e[1])+(e[2]||"px"):"0px"},Lt=t=>t.split("").map((t=>Math.random()<.5?t.toUpperCase():t.toLowerCase())).join(""),qt=t=>l(t.split("")).join("");class Kt{constructor(){this.hasSpace=!1,this._space=" ",this.hasNumbers=!1,this._numbers="0123456789",this.hasSymbols=!1,this._symbols="!@#$%^&*()<>.<~:;?+=-_",this.hasUpper=!1,this._upper="ABCDEFGHIJKLMNOPQRSTUVWXYZ",this.hasLower=!1,this._lower="abcdefghijklmnopqrstuvwxyz",this.hasChars=!1,this._chars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"}chars(){return this.hasChars=!0,this}static chars(){return(new Kt).chars()}lower(){return this.hasLower=!0,this}static lower(){return(new Kt).lower()}make(t){let e="";this.hasSpace&&(e+=this._space),this.hasNumbers&&(e+=this._numbers),this.hasSymbols&&(e+=this._symbols),this.hasUpper&&!this.hasChars&&(e+=this._upper),this.hasLower&&!this.hasChars&&(e+=this._lower),this.hasChars&&(e+=this._chars);let s="";if(t&&e.length){e=qt(e);for(let r=0;r<t;r++)s+=e.charAt(i(0,e.length-1))}return s}numbers(){return this.hasNumbers=!0,this}static numbers(){return(new Kt).numbers()}space(){return this.hasSpace=!0,this}static space(){return(new Kt).space()}symbols(){return this.hasSymbols=!0,this}static symbols(){return(new Kt).symbols()}upper(){return this.hasUpper=!0,this}static upper(){return(new Kt).upper()}}const Ft=t=>t.split("").reverse().join(""),Xt=(t,e)=>It(t,(t=>t.replace(/(\w)(\w*)/g,((t,e,s)=>e.toUpperCase()+s))),e),Qt=(t,e)=>e(t.value)?t.value:(t=>(t.maskIndex--,""))(t),Jt={"#":t=>t.value,0:t=>Qt(t,Ut),9:t=>Qt(t,Ut),A:t=>Qt(t,Pt),Z:t=>Qt(t,Pt),L:t=>Qt(t,Pt).toLowerCase(),U:t=>Qt(t,Pt).toUpperCase(),S:t=>Qt(t,$t)},Ht=t=>{t.maskIndex++,t.textIndex++;const{mask:e,maskIndex:s,text:r,textIndex:n}=t;t.key=e[s],t.value=r[n];const{key:i,value:a}=t;return j(i)||j(a)?"":(t=>Jt[t.key]?Jt[t.key](t):(t.key!=t.value&&t.textIndex--,t.key))(t)+Ht(t)},Zt=(t,e)=>Ht({mask:t,maskIndex:-1,text:e,textIndex:-1,key:"",value:""}),zt=(t,e)=>Ft(Zt(Ft(t),Ft(e))),Bt=(t,e,s)=>(s++,e=parseInt((e||"0").replace(/\D/g,"")).toString(),zt(t,e.length<s?("0".repeat(s)+e).slice(-1*s):e)),Wt=(t,e)=>t.length==Zt(t,e).length,Gt=(t,e)=>t.reduce(((t,s)=>Object.assign(Object.assign({},t),{[s]:e[s]})),{}),Vt=(t,e)=>Gt(Object.keys(e).filter((e=>-1==t.indexOf(e))),e),te=(t,...e)=>{if(!e.length)return t;const s=e.shift();if(S(t)&&S(s))for(const e in s)S(s[e])?(t[e]||(t=Object.assign(Object.assign({},t),{[e]:{}})),t[e]=te(t[e],s[e])):t=Object.assign(Object.assign({},t),{[e]:s[e]});return te(t,...e)},ee=(t,e,s)=>xt(void 0,void 0,void 0,(function*(){yield Promise.allSettled(t.map(((r,n)=>{var i;return null===(i=e.call(s,r,n,t))||void 0===i?void 0:i.catch(Ct)}))).catch(Ct)})),se=t=>xt(void 0,void 0,void 0,(function*(){var e;let s=!0;const r=()=>s=!0;let n=1;for(;s;)s=!1,yield null===(e=t(n,r))||void 0===e?void 0:e.catch(Ct),n+=1})),re=(t,e,s)=>xt(void 0,void 0,void 0,(function*(){var r;for(let n=0;n<t.length;n++)yield null===(r=e.call(s,t[n],n,t))||void 0===r?void 0:r.catch(Ct)})),ne=t=>new Promise((e=>setTimeout(e,t)));class ie{}var ae,ue,le,he,oe,ce,ve;ie.DESCRIPTION=Symbol("DESCRIPTION"),ie.ERROR=Symbol("ERROR"),ie.INDEXES=Symbol("INDEXES"),ie.KEYS=Symbol("KEYS"),ie.NAME=Symbol("NAME"),ie.REQUIRED=Symbol("REQUIRED"),ie.SOURCE=Symbol("SOURCE"),ie.TYPE=Symbol("TYPE");class de{constructor(t){this[ae]="",this[ue]="",this[le]="",this[he]="any",this[oe]=!1,this.rules=[],this.custom=[],this[ie.TYPE]=t}description(t){return this[ie.DESCRIPTION]=t,this}empty(t){const e=t;return this.unshift((({value:t})=>{const s=p(t);return{break:!p(e)&&!s,value:s?t:g(e)?e():e}}))}equal(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>{const n=s({value:t,context:r});return t==n?{value:t}:this.invalid(`.equal(${n})`,e)}))}error(t){return I(t)&&(this[ie.ERROR]=t),this}filter(...t){const e=t;return this.unshift((({value:t})=>{const s=-1==e.indexOf(t);return{break:!s,value:s?t:void 0}}))}fn(t){return g(t)?t:()=>t}from(t){return this[ie.SOURCE]=t,this}invalid(t,e){return t=`[${this[ie.TYPE]}]${t}`,{error:this[ie.ERROR]?this[ie.ERROR]:this[ie.NAME]?this[ie.NAME]+":"+t:t,message:e}}model(){return this.toString()}parse(){return this.unshift((({value:t})=>({value:t})))}push(t){return this.rules.push(t),this}required(t){return this[ie.REQUIRED]=!0,this.unshift((({value:e})=>p(e)?{value:e}:this.invalid(".required",t)))}test(t){return!I(this.validate(t).error)}testAsync(t){return xt(this,void 0,void 0,(function*(){return!I((yield this.validateAsync(t)).error)}))}toString(){return this[ie.TYPE]}unshift(t){return this.rules.unshift(t),this}validate(t,e){var s;if(this.custom.length)return this.invalid("[async]");let r={value:t};for(let t=0;t<this.rules.length;t++){if(r=this.rules[t]({value:r.value,context:e}),null===(s=r.error)||void 0===s?void 0:s.length)return Object.assign({error:r.error},r.message?{message:r.message}:{});if(r.break)return{value:r.value}}return{value:r.value}}validateAsync(t,e){return xt(this,void 0,void 0,(function*(){let s=this.validate(t,e);if(s.error)return{error:s.error};for(let t=0;t<this.custom.length;t++){if(s=yield this.custom[t]({value:s.value}),s.error)return{error:s.error};if(s.break)return{value:s.value}}return{value:s.value}}))}}ae=ie.NAME,ue=ie.DESCRIPTION,ie.SOURCE,le=ie.ERROR,he=ie.TYPE,oe=ie.REQUIRED;class pe extends de{constructor(t){super("array"),this[ce]=[],this.push((({value:e})=>c(e)?{value:e}:this.invalid("",t)))}between(t,e,s){return this.min(t,s),this.max(e,s)}items(t,e){const s=t;return s&&this[ie.INDEXES].push(s),s?this.push((({value:t})=>{s[ie.NAME]="";for(let r=0;r<t.length;r++){const{error:n,value:i}=s.validate(t[r],t);if(n)return this.invalid("< "+n+"["+r+"] >",e);t[r]=i}return{value:t}})):this}length(t,e){const s=t;return this.push((({value:t})=>t.length==s?{value:t}:this.invalid(".length("+s+")",e)))}max(t,e){const s=t;return this.push((({value:t})=>t.length<=s?{value:t}:this.invalid(".max("+s+")",e)))}min(t,e){const s=t;return this.push((({value:t})=>t.length>=s?{value:t}:this.invalid(".min("+s+")",e)))}model(){return this[ie.INDEXES].length?this[ie.INDEXES].map((t=>t.model())):this[ie.TYPE]}toString(){return this[ie.INDEXES].length?JSON.stringify(this.model(),null,4):this[ie.TYPE]}}ce=ie.INDEXES;class me extends de{constructor(t){super("boolean"),this.push((({value:e})=>v(e)?{value:e}:this.invalid("",t)))}parse(){return this.unshift((({value:t})=>({value:p(t)?A(t):t})))}}class fe extends de{constructor(t){super("date"),this.push((({value:e})=>I(e)&&e.length>=9&&!isNaN(new Date(e).getTime())?{value:e}:this.invalid("",t)))}format(t){const e=t;return this.push((({value:t})=>({value:ht(e,new Date(t))})))}parse(){return this.unshift((({value:t})=>({value:new Date(I(t)&&t.length<=10?`${t} 12:00`:t)})))}}class ge extends de{constructor(t){super("number"),this.push((({value:e})=>m(e)?{value:e}:this.invalid("",t)))}between(t,e,s){return this.min(t,s),this.max(e,s)}float(t){return this.push((({value:e})=>f(e)?{value:e}:this.invalid(".float",t)))}integer(t){return this.push((({value:e})=>y(e)?{value:e}:this.invalid(".integer",t)))}max(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>{const n=s({value:t,context:r});return t<=n?{value:t}:this.invalid(`.max(${n})`,e)}))}min(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>{const n=s({value:t,context:r});return t>=n?{value:t}:this.invalid(`.min(${n})`,e)}))}parse(){return this.unshift((({value:t})=>({value:p(t)?parseFloat(t.toString()):t})))}}class ye extends de{constructor(t){super("object"),this[ve]={},this.push((({value:e})=>b(e)?{value:e}:this.invalid("",t)))}keys(t,e){const s=t;return s&&(this[ie.KEYS]=Object.assign(Object.assign({},this[ie.KEYS]),s)),s?this.push((({value:t})=>{const r=[],n={};return Object.keys(s).forEach((i=>{var a;const u=s[i];u[ie.NAME]=null!==(a=u[ie.SOURCE])&&void 0!==a?a:i;const{error:l,message:h,value:o}=u.validate(t[u[ie.NAME]],n);!e&&h&&(e=h),l&&r.push(l),p(o)&&(n[i]=o)})),r.length?this.invalid("{ "+r.join(", ")+" }",e):{value:n}})):this}model(){const t={},e=Object.keys(this[ie.KEYS]);return e.length&&e.forEach((e=>t[e]=this[ie.KEYS][e].model())),e.length?t:this[ie.TYPE]}parse(t){return this.unshift((({value:e})=>{if(!b(e))try{e=JSON.parse(e)}catch(e){return this.invalid("",t)}return{value:e}}))}toString(){return Object.keys(this[ie.KEYS]).length?JSON.stringify(this.model(),null,4):this[ie.TYPE]}}ve=ie.KEYS;class xe extends de{constructor(t){super("string"),this.push((({value:e})=>I(e)?{value:e}:this.invalid("",t)))}between(t,e,s){return this.min(t,s),this.max(e,s)}email(t){const e=/^[\w-\\.]+@([\w-]+\.)+[\w-]{2,4}$/i;return this.push((({value:s})=>e.test(s)?{value:s}:this.invalid(".email",t)))}length(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>{const n=s({value:t,context:r});return t.length==n?{value:t}:this.invalid(`.length(${n})`,e)}))}lowerCase(){return this.push((({value:t})=>({value:t.toLowerCase()})))}lowerCamelCase(){return this.push((({value:t})=>({value:Mt(t)})))}max(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>{const n=s({value:t,context:r});return t.length<=n?{value:t}:this.invalid(`.max(${n})`,e)}))}mask(t){const e=this.fn(t);return this.push((({value:t,context:s})=>({value:Zt(e({value:t,context:s}),t)})))}min(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>{const n=s({value:t,context:r});return t.length>=n?{value:t}:this.invalid(`.min(${n})`,e)}))}parse(){return this.unshift((({value:t})=>({value:b(t)?JSON.stringify(t):p(t)?t.toString():t})))}required(t){return this[ie.REQUIRED]=!0,this.push((({value:e})=>e.length?{value:e}:this.invalid(".required",t)))}regex(t,e){return this.push((({value:s})=>t.test(s)?{value:s}:this.invalid(".regex",e)))}replace(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>({value:t.replace(s({value:t,context:r}),e)})))}trim(){return this.push((({value:t})=>({value:t.trim()})))}upperCase(){return this.push((({value:t})=>({value:t.toUpperCase()})))}upperCamelCase(){return this.push((({value:t})=>({value:Xt(t)})))}}class Ee{static array(t,e){return new pe(e).items(t)}static boolean(t){return new me(t)}static date(t){return new fe(t)}static number(t){return new ge(t)}static object(t,e){return new ye(e).keys(t)}static ref(t,e){return({context:s})=>s&&p(s[t])?s[t]:e}static string(t){return new xe(t)}test(t,...e){return!I(Ee.validate(t,...e).error)}testAsync(t,...e){return xt(this,void 0,void 0,(function*(){return!I((yield Ee.validateAsync(t,...e)).error)}))}static validate(t,...e){let s={value:t};for(let t=0;t<e.length;t++)if(s=e[t].validate(s.value),s.error)return{value:s.value,error:s.error};return{value:s.value}}static validateAsync(t,...e){return xt(this,void 0,void 0,(function*(){let s={value:t};for(let t=0;t<e.length;t++)if(s=yield e[t].validateAsync(s.value),s.error)return{value:s.value,error:s.error};return{value:s.value}}))}}export{yt as EventEmitter,G as Hash,Kt as RandomString,Ee as Validation,de as ValidationBase,ie as ValidationKeys,Gt as allowed,Y as cache,jt as camelCase,t as chunkArray,r as clamp,H as colorPalette,e as compareArray,s as countArray,kt as cutText,ht as dateFormat,ot as dateRange,gt as debounce,At as decodeHTML,Vt as denied,P as each,Yt as encodeHTML,ee as forEachAsync,T as forEachIndex,U as forEachKey,se as forEachPage,re as forEachSeries,$ as forLoop,q as hexToRgb,Z as hslToRgb,c as isArray,v as isBoolean,Tt as isCharacter,d as isDate,p as isDef,Ut as isDigit,bt as isEmpty,Ot as isFalse,f as isFloat,g as isFunction,y as isInteger,Pt as isLetter,x as isMap,Rt as isNotEmpty,E as isNull,m as isNumber,b as isObject,S as isPlainObject,w as isRegExp,R as isScalar,C as isSet,$t as isSpecialChar,I as isString,M as isSymbol,wt as isTrue,j as isUndefined,n as lerp,Et as loop,Mt as lowerCamelCase,_ as map,Zt as mask,Bt as maskMoney,zt as maskReverse,Wt as maskTest,te as merge,mt as msToString,Ct as noop,ft as parseMs,_t as parseSize,i as random,Lt as randomCase,a as randomElement,u as rangeArray,F as rgbToHex,W as rgbToHsl,X as shadeColor,l as shuffleArray,qt as shuffleString,nt as simpleID,ne as sleep,Ft as stringReverse,Q as tintColor,k as toArray,A as toBool,o as type,N as uniqueArray,it as uniqueID,Xt as upperCamelCase,at as uuidv4};
7
+ const t=(t,e)=>{const s=[];for(let r=0;r<t.length;r+=e)s.push(t.slice(r,r+e));return s},e=(t,e)=>t.length===e.length&&t.every(((t,s)=>t===e[s])),s=t=>{const e={};return t.forEach((t=>{const s=t.toString();e[s]=(e[s]||0)+1})),e},r=(t,e)=>-1!=e.indexOf(t),n=(t,e,s)=>Math.max(e,Math.min(s,t)),i=(t,e,s)=>t+(e-t)*n(s,0,1),a=(t,e)=>Math.floor(Math.random()*(e-t+1)+t),l=t=>t.length?t[a(0,t.length-1)]:null,u=(t,e,s=1)=>Array.from({length:(e-t)/s+1},((e,r)=>t+r*s)),h=t=>{for(let e=t.length-1;e>0;e--){const s=a(0,e);[t[e],t[s]]=[t[s],t[e]]}return t},o={},c=t=>null==t?"null":o[o.toString.call(t)]||"object";["Array","AsyncFunction","Boolean","Date","Function","Map","Number","Object","RegExp","Set","String"].forEach((t=>o["[object "+t+"]"]=t.toLowerCase()));const v=t=>"array"==c(t),p=t=>"boolean"==c(t),m=t=>"date"==c(t),d=t=>"null"!=c(t),g=t=>"number"==c(t),f=t=>g(t)&&!!(t%1),y=t=>"function"==typeof t,E=t=>g(t)&&!(t%1),S=t=>"map"==c(t),x=t=>null===t,b=t=>"object"==c(t),w=t=>b(t)&&t.constructor===Object,I=t=>"regexp"==c(t),O=["boolean","number","string"],R=t=>-1!=O.indexOf(c(t)),M=t=>"set"==c(t),C=t=>"string"==typeof t,A=t=>"symbol"==typeof t,j=t=>void 0===t,k=t=>v(t)?t:d(t)?[t]:[],D=t=>t.filter(((t,e,s)=>s.indexOf(t)===e)),N=[1,"1",!0,"true"],T=t=>-1!=N.indexOf(t),Y=()=>{const t=[],e=[];return s=>{let r=t.indexOf(s);return-1==r&&(t.push(s),e.push({}),r=e.length-1),e[r]}},L=(t,e,s)=>{for(let r=0;r<t.length&&!1!==e.call(s,t[r],r,t);r++);return t},P=(t,e,s)=>{let r="";const n=Object.keys(t);for(let i=0;i<n.length&&(r=n[i],!1!==e.call(s,t[r],r,t));i++);return t},U=(t,e,s)=>v(t)?L(t,e,s):b(t)?P(t,e,s):t,$=(t,e,s)=>{for(let r=1;r<=t&&!1!==e.call(s,r,t);r++);return t},X=(t,e,s)=>Object.fromEntries(Object.entries(t).map((([r,n])=>[r,e.call(s,n,r,t)]))),_=t=>parseInt(t??"0",16)||0,q=t=>t.replace(/^#/,"").match(/.{1,2}/g)?.map(_)||[],K=t=>("0"+t.toString(16)).slice(-2),F=(t,e,s)=>"#"+K(t)+K(e)+K(s),Q=(t,e)=>{const s=q(t);e=n(e,0,1);const[r,i,a]=s.map((t=>Math.round(t*e)));return F(r,i,a)},J=(t,e)=>{const s=q(t);e=n(e,0,1);const[r,i,a]=s.map((t=>Math.round(t+(255-t)*e)));return F(r,i,a)},H={50:.95,100:.9,200:.75,300:.6,400:.3,500:0,600:-.1,700:-.25,800:-.4,900:-.55,950:-.71},Z=(t,e)=>X(e??H,(e=>0==e?t:e>0?J(t,e):Q(t,1- -1*e))),z=(t,e,s)=>{t/=60;const r=(1-Math.abs(2*s-1))*e,n=r*(1-Math.abs(t%2-1));let i=[0,0,0];t<=1?i=[r,n,0]:t<=2?i=[n,r,0]:t<=3?i=[0,r,n]:t<=4?i=[0,n,r]:t<=5?i=[n,0,r]:t<=6&&(i=[r,0,n]);const a=s-.5*r;return[Math.round(255*(i[0]+a)),Math.round(255*(i[1]+a)),Math.round(255*(i[2]+a))]},B=(t,e,s,r,n)=>0===t?0:e===s?(r-n)/t%6:e===r?(n-s)/t+2:e===n?(s-r)/t+4:0,W=(t,e)=>0===t?0:t/(1-Math.abs(2*e-1)),G=(t,e,s)=>{const[r,n,i]=((...t)=>t.map((t=>t/255)))(t,e,s),a=Math.max(r,n,i),l=Math.min(r,n,i),u=a-l,h=(l+a)/2;return[60*B(u,a,r,n,i),W(u,h),h]};class V{constructor(t){this.key=this.shuffle(V.dictionary,t,!1)}encrypt(t){return this.shuffle(t,this.key,!1)}decrypt(t){return this.shuffle(t,this.key,!0)}index(t,e,s){return[V.dictionary.indexOf(t[s]),V.dictionary.indexOf(e[s%e.length])]}result(t,e,s){return V.dictionary[(s?t-e+V.dictionary.length:t+e)%V.dictionary.length]}shuffle(t,e,s){let r="";for(let n=0;n<t.length;n++){const[i,a]=this.index(t,e,n);r+=-1===i||-1===a?t[n]:this.result(i,a,s)}return r}}V.dictionary="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";const tt=(t=64)=>Array(Math.ceil(t/2)).fill(0).map((()=>a(0,255).toString(16).padStart(2,"0"))).join("").slice(0,t),et=()=>{const t=1e4*(Date.now()+122192928e5),e=(4294967295&t)>>>0,s=(t/4294967296&65535)>>>0,r=(t/281474976710656&4095)>>>0,n=a(0,e),i=(t,e)=>t.toString(16).padStart(e,"0");return[i(e,8),i(s,4),i(4096|r,4),i(n>>8&63|128,2)+i(255&n,2),tt(12)].join("-")},st=t=>{const e=t.replace(/-/g,""),s=parseInt(e.slice(0,8),16),r=parseInt(e.slice(8,12),16),n=(4095&parseInt(e.slice(12,16),16))*Math.pow(2,48)+r*Math.pow(2,32)+s;return Math.floor((n-122192928e9)/1e4)},rt=()=>{const t=[];t.push(...Array(16).fill(0).map((()=>a(0,255)))),t[6]=15&t[6]|64;const e=t.map((t=>t.toString(16).padStart(2,"0"))).join("");return[e.slice(0,8),e.slice(8,12),e.slice(12,16),e.slice(16,20),e.slice(20)].join("-")},nt=()=>{const t=Date.now(),e=[];e[0]=t/2**40&255,e[1]=t/2**32&255,e[2]=t>>>24&255,e[3]=t>>>16&255,e[4]=t>>>8&255,e[5]=255&t,e.push(...Array(10).fill(0).map((()=>a(0,255)))),e[6]=15&e[6]|112,e[8]=63&e[8]|128;const s=e.map((t=>t.toString(16).padStart(2,"0"))).join("");return[s.slice(0,8),s.slice(8,12),s.slice(12,16),s.slice(16,20),s.slice(20)].join("-")},it=t=>parseInt(t.replace(/-/g,"").slice(0,12),16),at=t=>("0"+t.toString()).slice(-2),lt={"%y":t=>at(t.getFullYear()),"%Y":t=>t.getFullYear().toString(),"%m":t=>at(t.getMonth()+1),"%d":t=>at(t.getDate()),"%H":t=>at(t.getHours()),"%M":t=>at(t.getMinutes()),"%S":t=>at(t.getSeconds())},ut=(t,e)=>(e=e??new Date,t.replace(/%[yYmdHMS]/g,(t=>lt[t]?lt[t](e):t.slice(1)))),ht=(t,e)=>{const s=new Date(t),r=[];for(;t<e;)s.setDate(s.getDate()+1),r.push(new Date(s));return r},ot=36e5,ct=24*ot,vt={ms:1,s:1e3,m:6e4,h:ot,d:ct,w:7*ct,y:315576e5},pt=["y","d","h","m","s","ms"],mt=t=>{const e=[];return pt.forEach((s=>{const r=vt[s],n=(t-t%r)/r;n&&(t-=n*r,e.push(n.toString()+s))})),e.join(" ")},dt=t=>{const e=/(-?(?:\d+)?\.?\d+) *(ms|s|m|h|d|w|y)/gm;let s,r=0;for(;null!==(s=e.exec(t));)s.index===e.lastIndex&&e.lastIndex++,r+=parseFloat(s[1])*vt[s[2]]||0;return r},gt=(t,e)=>{let s;const r=()=>{s&&clearTimeout(s)};return{cancel:r,run(...n){r(),s=setTimeout((()=>t(...n)),e)}}};class ft{constructor(){this.events=new Map}on(t,e){const s=this.events.get(t);return s?s.push(e):this.events.set(t,[e]),{dispose:()=>this.off(t,e)}}once(t,e){const s=r=>{e(r),this.off(t,s)};return this.on(t,s),{dispose:()=>this.off(t,s)}}off(t,e){const s=this.events.get(t);if(e){if(s){const t=s.indexOf(e);t>=0&&s.splice(t,1)}}else this.events.set(t,[])}emit(t,e){const s=this.events.get(t);s&&s.forEach((t=>t(e)))}}const yt=(t,e)=>{let s=!1;const r=async()=>{s&&(await t(),setTimeout(r,e))};return{start(){s||(s=!0,r())},stop(){s=!1}}},Et=t=>0==(t?.length??0),St=["",0,"0",null,!1,void 0],xt=t=>-1==St.indexOf(t),bt=t=>!xt(t),wt=t=>!Et(t),It=()=>{},Ot=(t,e,s)=>e(t.toLowerCase().replace(/\W+/g," ")).replace(/\s/g,s??""),Rt=(t,e)=>Ot(t,(t=>t.replace(/\s(\w)/g,(t=>t.toUpperCase()))),e),Mt=Rt,Ct=(t,e)=>{if(t.length>e){const s=t.substring(0,e).split(" ");return s.pop(),s.join(" ")+"..."}return t},At=/&(amp|apos|lt|gt|nbsp|quot);/g,jt={amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",quot:'"'},kt=t=>t.replace(At,((t,e)=>jt[e])).replace(/&#(\d+);/gi,((t,e)=>String.fromCharCode(parseInt(e,10)))),Dt=t=>t.replace(/[^0-9A-Za-z ]/g,(t=>"&#"+t.charCodeAt(0)+";")),Nt=t=>/^[\w]$/.test(t),Tt=t=>/^[\d]$/.test(t),Yt=t=>/^[A-Za-z]$/.test(t),Lt=t=>/^[^\w]$/.test(t),Pt=t=>{if(g(t))return t+"px";const e=(t=>/(-?(?:\d+)?\.?\d+) *(px|%|cm|mm|in|pt|pc|en|ex|ch|rem|vw|vh|vmin|vmax)*/g.exec(t))(t);return e?parseFloat(e[1])+(e[2]||"px"):"0px"},Ut=t=>t.split("").map((t=>Math.random()<.5?t.toUpperCase():t.toLowerCase())).join(""),$t=t=>h(t.split("")).join("");class Xt{constructor(){this.hasSpace=!1,this._space=" ",this.hasNumbers=!1,this._numbers="0123456789",this.hasSymbols=!1,this._symbols="!@#$%^&*()<>.<~:;?+=-_",this.hasUpper=!1,this._upper="ABCDEFGHIJKLMNOPQRSTUVWXYZ",this.hasLower=!1,this._lower="abcdefghijklmnopqrstuvwxyz",this.hasChars=!1,this._chars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"}chars(){return this.hasChars=!0,this}static chars(){return(new Xt).chars()}lower(){return this.hasLower=!0,this}static lower(){return(new Xt).lower()}make(t){let e="";this.hasSpace&&(e+=this._space),this.hasNumbers&&(e+=this._numbers),this.hasSymbols&&(e+=this._symbols),this.hasUpper&&!this.hasChars&&(e+=this._upper),this.hasLower&&!this.hasChars&&(e+=this._lower),this.hasChars&&(e+=this._chars);let s="";if(t&&e.length){e=$t(e);for(let r=0;r<t;r++)s+=e.charAt(a(0,e.length-1))}return s}numbers(){return this.hasNumbers=!0,this}static numbers(){return(new Xt).numbers()}space(){return this.hasSpace=!0,this}static space(){return(new Xt).space()}symbols(){return this.hasSymbols=!0,this}static symbols(){return(new Xt).symbols()}upper(){return this.hasUpper=!0,this}static upper(){return(new Xt).upper()}}const _t=t=>t.split("").reverse().join(""),qt=(t,e)=>Ot(t,(t=>t.replace(/(\w)(\w*)/g,((t,e,s)=>e.toUpperCase()+s))),e),Kt=(t,e)=>e(t.value)?t.value:(t=>(t.maskIndex--,""))(t),Ft={"#":t=>t.value,0:t=>Kt(t,Tt),9:t=>Kt(t,Tt),A:t=>Kt(t,Yt),Z:t=>Kt(t,Yt),L:t=>Kt(t,Yt).toLowerCase(),U:t=>Kt(t,Yt).toUpperCase(),S:t=>Kt(t,Lt)},Qt=t=>{t.maskIndex++,t.textIndex++;const{mask:e,maskIndex:s,text:r,textIndex:n}=t;t.key=e[s],t.value=r[n];const{key:i,value:a}=t;return j(i)||j(a)?"":(t=>Ft[t.key]?Ft[t.key](t):(t.key!=t.value&&t.textIndex--,t.key))(t)+Qt(t)},Jt=(t,e)=>Qt({mask:t,maskIndex:-1,text:e,textIndex:-1,key:"",value:""}),Ht=(t,e)=>_t(Jt(_t(t),_t(e))),Zt=(t,e,s)=>(s++,e=parseInt((e||"0").replace(/\D/g,"")).toString(),Ht(t,e.length<s?("0".repeat(s)+e).slice(-1*s):e)),zt=(t,e)=>t.length==Jt(t,e).length,Bt=(t,e)=>t.reduce(((t,s)=>({...t,[s]:e[s]})),{}),Wt=(t,e)=>Bt(Object.keys(e).filter((e=>-1==t.indexOf(e))),e),Gt=(t,...e)=>{if(!e.length)return t;const s=e.shift();if(w(t)&&w(s))for(const e in s)w(s[e])?(t[e]||(t={...t,[e]:{}}),t[e]=Gt(t[e],s[e])):t={...t,[e]:s[e]};return Gt(t,...e)},Vt=async(t,e,s)=>{await Promise.allSettled(t.map(((r,n)=>e.call(s,r,n,t)?.catch(It)))).catch(It)},te=async t=>{let e=!0;const s=()=>e=!0;let r=1;for(;e;)e=!1,await(t(r,s)?.catch(It)),r+=1},ee=async(t,e,s)=>{for(let r=0;r<t.length;r++)await(e.call(s,t[r],r,t)?.catch(It))},se=t=>new Promise((e=>setTimeout(e,t)));class re{}var ne,ie,ae,le,ue,he,oe,ce,ve;re.DESCRIPTION=Symbol("DESCRIPTION"),re.ERROR=Symbol("ERROR"),re.EXAMPLE=Symbol("EXAMPLE"),re.INDEXES=Symbol("INDEXES"),re.KEYS=Symbol("KEYS"),re.LIST=Symbol("LIST"),re.NAME=Symbol("NAME"),re.REQUIRED=Symbol("REQUIRED"),re.SOURCE=Symbol("SOURCE"),re.TYPE=Symbol("TYPE");class pe{constructor(t){this[ne]="",this[ie]="",this[ae]=null,this[le]="",this[ue]="any",this[he]=!1,this.rules=[],this.custom=[],this[re.TYPE]=t}description(t){return this[re.DESCRIPTION]=t,this}example(t){return this[re.EXAMPLE]=t,this}empty(t){const e=t;return this.unshift((({value:t})=>{const s=d(t);return{break:!d(e)&&!s,value:s?t:y(e)?e():e}}))}equal(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>{const n=s({value:t,context:r});return t==n?{value:t}:this.invalid(`.equal(${n})`,e)}))}error(t){return C(t)&&(this[re.ERROR]=t),this}filter(...t){const e=t;return this.unshift((({value:t})=>{const s=-1==e.indexOf(t);return{break:!s,value:s?t:void 0}}))}fn(t){return y(t)?t:()=>t}from(t){return this[re.SOURCE]=t,this}invalid(t,e){return t=`[${this[re.TYPE]}]${t}`,{error:this[re.ERROR]?this[re.ERROR]:this[re.NAME]?this[re.NAME]+":"+t:t,message:e}}model(){return this.toString()}parse(){return this.unshift((({value:t})=>({value:t})))}push(t){return this.rules.push(t),this}required(t){return this[re.REQUIRED]=!0,this.unshift((({value:e})=>d(e)?{value:e}:this.invalid(".required",t)))}test(t){return!C(this.validate(t).error)}async testAsync(t){return!C((await this.validateAsync(t)).error)}toString(){return this[re.TYPE]}unshift(t){return this.rules.unshift(t),this}validate(t,e){if(this.custom.length)return this.invalid("[async]");let s={value:t};for(let t=0;t<this.rules.length;t++){if(s=this.rules[t]({value:s.value,context:e}),s.error?.length)return{error:s.error,...s.message?{message:s.message}:{}};if(s.break)return{value:s.value}}return{value:s.value}}async validateAsync(t,e){let s=this.validate(t,e);if(s.error)return{error:s.error};for(let t=0;t<this.custom.length;t++){if(s=await this.custom[t]({value:s.value}),s.error)return{error:s.error};if(s.break)return{value:s.value}}return{value:s.value}}}ne=re.NAME,ie=re.DESCRIPTION,ae=re.EXAMPLE,re.SOURCE,le=re.ERROR,ue=re.TYPE,he=re.REQUIRED;class me extends pe{constructor(t){super("array"),this[oe]=[],this.push((({value:e})=>v(e)?{value:e}:this.invalid("",t)))}between(t,e,s){return this.min(t,s),this.max(e,s)}items(t,e){const s=t;return s&&this[re.INDEXES].push(s),s?this.push((({value:t})=>{s[re.NAME]="";for(let r=0;r<t.length;r++){const{error:n,value:i}=s.validate(t[r],t);if(n)return this.invalid("< "+n+"["+r+"] >",e);t[r]=i}return{value:t}})):this}length(t,e){const s=t;return this.push((({value:t})=>t.length==s?{value:t}:this.invalid(".length("+s+")",e)))}max(t,e){const s=t;return this.push((({value:t})=>t.length<=s?{value:t}:this.invalid(".max("+s+")",e)))}min(t,e){const s=t;return this.push((({value:t})=>t.length>=s?{value:t}:this.invalid(".min("+s+")",e)))}model(){return this[re.INDEXES].length?this[re.INDEXES].map((t=>t.model())):this[re.TYPE]}toString(){return this[re.INDEXES].length?JSON.stringify(this.model(),null,4):this[re.TYPE]}}oe=re.INDEXES;class de extends pe{constructor(t){super("boolean"),this.push((({value:e})=>p(e)?{value:e}:this.invalid("",t)))}parse(){return this.unshift((({value:t})=>({value:d(t)?T(t):t})))}}class ge extends pe{constructor(t){super("date"),this.push((({value:e})=>C(e)&&e.length>=9&&!isNaN(new Date(e).getTime())?{value:e}:this.invalid("",t)))}format(t){const e=t;return this.push((({value:t})=>({value:ut(e,new Date(t))})))}parse(){return this.unshift((({value:t})=>({value:new Date(C(t)&&t.length<=10?`${t} 12:00`:t)})))}}class fe extends pe{constructor(t){super("enum"),this[ce]=[],this.push((({value:e})=>d(e)?{value:e}:this.invalid(`('${this[re.LIST].join("', '")}')`,t)))}list(t,e){const s=t;return s&&this[re.LIST].push(...s),s?this.push((({value:t})=>-1!=this[re.LIST].indexOf(t)?{value:t}:this.invalid(`('${this[re.LIST].join("', '")}')`,e))):this}toString(){return`${this[re.TYPE]}('${this[re.LIST].join("', '")}')`}}ce=re.LIST;class ye extends pe{constructor(t){super("number"),this.push((({value:e})=>g(e)?{value:e}:this.invalid("",t)))}between(t,e,s){return this.min(t,s),this.max(e,s)}float(t){return this.push((({value:e})=>f(e)?{value:e}:this.invalid(".float",t)))}integer(t){return this.push((({value:e})=>E(e)?{value:e}:this.invalid(".integer",t)))}max(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>{const n=s({value:t,context:r});return t<=n?{value:t}:this.invalid(`.max(${n})`,e)}))}min(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>{const n=s({value:t,context:r});return t>=n?{value:t}:this.invalid(`.min(${n})`,e)}))}parse(){return this.unshift((({value:t})=>({value:d(t)?parseFloat(t.toString()):t})))}}class Ee extends pe{constructor(t){super("object"),this[ve]={},this.push((({value:e})=>b(e)?{value:e}:this.invalid("",t)))}keys(t,e){const s=t;return s&&(this[re.KEYS]={...this[re.KEYS],...s}),s?this.push((({value:t})=>{const r=[],n={};return Object.keys(s).forEach((i=>{const a=s[i];a[re.NAME]=a[re.SOURCE]??i;const{error:l,message:u,value:h}=a.validate(t[a[re.NAME]],n);!e&&u&&(e=u),l&&r.push(l),d(h)&&(n[i]=h)})),r.length?this.invalid("{ "+r.join(", ")+" }",e):{value:n}})):this}model(){const t={},e=Object.keys(this[re.KEYS]);return e.length&&e.forEach((e=>t[e]=this[re.KEYS][e].model())),e.length?t:this[re.TYPE]}parse(t){return this.unshift((({value:e})=>{if(!b(e))try{e=JSON.parse(e)}catch(e){return this.invalid("",t)}return{value:e}}))}toString(){return Object.keys(this[re.KEYS]).length?JSON.stringify(this.model(),null,4):this[re.TYPE]}}ve=re.KEYS;class Se extends pe{constructor(t){super("string"),this.push((({value:e})=>C(e)?{value:e}:this.invalid("",t)))}between(t,e,s){return this.min(t,s),this.max(e,s)}email(t){const e=/^[\w-\\.]+@([\w-]+\.)+[\w-]{2,4}$/i;return this.push((({value:s})=>e.test(s)?{value:s}:this.invalid(".email",t)))}length(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>{const n=s({value:t,context:r});return t.length==n?{value:t}:this.invalid(`.length(${n})`,e)}))}lowerCase(){return this.push((({value:t})=>({value:t.toLowerCase()})))}lowerCamelCase(){return this.push((({value:t})=>({value:Rt(t)})))}max(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>{const n=s({value:t,context:r});return t.length<=n?{value:t}:this.invalid(`.max(${n})`,e)}))}mask(t){const e=this.fn(t);return this.push((({value:t,context:s})=>({value:Jt(e({value:t,context:s}),t)})))}min(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>{const n=s({value:t,context:r});return t.length>=n?{value:t}:this.invalid(`.min(${n})`,e)}))}parse(){return this.unshift((({value:t})=>({value:b(t)?JSON.stringify(t):d(t)?t.toString():t})))}required(t){return this[re.REQUIRED]=!0,this.push((({value:e})=>e.length?{value:e}:this.invalid(".required",t)))}regex(t,e){return this.push((({value:s})=>t.test(s)?{value:s}:this.invalid(".regex",e)))}replace(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>({value:t.replace(s({value:t,context:r}),e)})))}trim(){return this.push((({value:t})=>({value:t.trim()})))}upperCase(){return this.push((({value:t})=>({value:t.toUpperCase()})))}upperCamelCase(){return this.push((({value:t})=>({value:qt(t)})))}}class xe{static array(t,e){return new me(e).items(t)}static boolean(t){return new de(t)}static date(t){return new ge(t)}static enum(t,e){return new fe(e).list(t)}static number(t){return new ye(t)}static object(t,e){return new Ee(e).keys(t)}static ref(t,e){return({context:s})=>s&&d(s[t])?s[t]:e}static string(t){return new Se(t)}test(t,...e){return!C(xe.validate(t,...e).error)}async testAsync(t,...e){return!C((await xe.validateAsync(t,...e)).error)}static validate(t,...e){let s={value:t};for(let t=0;t<e.length;t++)if(s=e[t].validate(s.value),s.error)return{value:s.value,error:s.error};return{value:s.value}}static async validateAsync(t,...e){let s={value:t};for(let t=0;t<e.length;t++)if(s=await e[t].validateAsync(s.value),s.error)return{value:s.value,error:s.error};return{value:s.value}}}export{ft as EventEmitter,V as Hash,Xt as RandomString,xe as Validation,pe as ValidationBase,re as ValidationKeys,Bt as allowed,Y as cache,Mt as camelCase,t as chunkArray,n as clamp,Z as colorPalette,e as compareArray,s as countArray,Ct as cutText,ut as dateFormat,ht as dateRange,gt as debounce,kt as decodeHTML,Wt as denied,U as each,Dt as encodeHTML,Vt as forEachAsync,L as forEachIndex,P as forEachKey,te as forEachPage,ee as forEachSeries,$ as forLoop,q as hexToRgb,z as hslToRgb,r as inArray,v as isArray,p as isBoolean,Nt as isCharacter,m as isDate,d as isDef,Tt as isDigit,Et as isEmpty,bt as isFalse,f as isFloat,y as isFunction,E as isInteger,Yt as isLetter,S as isMap,wt as isNotEmpty,x as isNull,g as isNumber,b as isObject,w as isPlainObject,I as isRegExp,R as isScalar,M as isSet,Lt as isSpecialChar,C as isString,A as isSymbol,xt as isTrue,j as isUndefined,i as lerp,yt as loop,Rt as lowerCamelCase,X as map,Jt as mask,Zt as maskMoney,Ht as maskReverse,zt as maskTest,Gt as merge,mt as msToString,It as noop,dt as parseMs,Pt as parseSize,a as random,Ut as randomCase,l as randomElement,u as rangeArray,F as rgbToHex,G as rgbToHsl,Q as shadeColor,h as shuffleArray,$t as shuffleString,se as sleep,_t as stringReverse,J as tintColor,k as toArray,T as toBool,c as type,D as uniqueArray,tt as uniqueID,qt as upperCamelCase,et as uuidv1,st as uuidv1ToTimestamp,rt as uuidv4,nt as uuidv7,it as uuidv7ToTimestamp};
package/dist/index.min.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /*!
2
- * @andrewcaires/utils.js v0.4.9
2
+ * @andrewcaires/utils.js v0.4.10
3
3
  * JavaScript utility library for web and nodejs development
4
4
  * (c) 2025 Andrew Caires
5
5
  * @license: MIT
6
6
  */
7
- var UtilsJS=function(t){"use strict";const e=(t,e,s)=>Math.max(e,Math.min(s,t)),s=(t,e)=>Math.floor(Math.random()*(e-t+1)+t),r=t=>{for(let e=t.length-1;e>0;e--){const r=s(0,e);[t[e],t[r]]=[t[r],t[e]]}return t},n={},i=t=>null==t?"null":n[n.toString.call(t)]||"object";["Array","AsyncFunction","Boolean","Date","Function","Map","Number","Object","RegExp","Set","String"].forEach((t=>n["[object "+t+"]"]=t.toLowerCase()));const a=t=>"array"==i(t),u=t=>"boolean"==i(t),l=t=>"null"!=i(t),o=t=>"number"==i(t),h=t=>o(t)&&!!(t%1),c=t=>"function"==typeof t,v=t=>o(t)&&!(t%1),d=t=>"object"==i(t),p=t=>d(t)&&t.constructor===Object,m=["boolean","number","string"],f=t=>"string"==typeof t,g=t=>void 0===t,y=[1,"1",!0,"true"],E=t=>-1!=y.indexOf(t),x=(t,e,s)=>{for(let r=0;r<t.length&&!1!==e.call(s,t[r],r,t);r++);return t},b=(t,e,s)=>{let r="";const n=Object.keys(t);for(let i=0;i<n.length&&(r=n[i],!1!==e.call(s,t[r],r,t));i++);return t},S=(t,e,s)=>Object.fromEntries(Object.entries(t).map((([r,n])=>[r,e.call(s,n,r,t)]))),w=t=>parseInt(null!=t?t:"0",16)||0,O=t=>{var e;return(null===(e=t.replace(/^#/,"").match(/.{1,2}/g))||void 0===e?void 0:e.map(w))||[]},R=t=>("0"+t.toString(16)).slice(-2),C=(t,e,s)=>"#"+R(t)+R(e)+R(s),I=(t,s)=>{const r=O(t);s=e(s,0,1);const[n,i,a]=r.map((t=>Math.round(t*s)));return C(n,i,a)},M=(t,s)=>{const r=O(t);s=e(s,0,1);const[n,i,a]=r.map((t=>Math.round(t+(255-t)*s)));return C(n,i,a)},k={50:.95,100:.9,200:.75,300:.6,400:.3,500:0,600:-.1,700:-.25,800:-.4,900:-.55,950:-.71},A=(t,e,s,r,n)=>0===t?0:e===s?(r-n)/t%6:e===r?(n-s)/t+2:e===n?(s-r)/t+4:0,D=(t,e)=>0===t?0:t/(1-Math.abs(2*e-1));class N{constructor(t){this.key=this.shuffle(N.dictionary,t,!1)}encrypt(t){return this.shuffle(t,this.key,!1)}decrypt(t){return this.shuffle(t,this.key,!0)}index(t,e,s){return[N.dictionary.indexOf(t[s]),N.dictionary.indexOf(e[s%e.length])]}result(t,e,s){return N.dictionary[(s?t-e+N.dictionary.length:t+e)%N.dictionary.length]}shuffle(t,e,s){let r="";for(let n=0;n<t.length;n++){const[i,a]=this.index(t,e,n);r+=-1===i||-1===a?t[n]:this.result(i,a,s)}return r}}N.dictionary="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";const j=t=>Math.random().toString(16).slice(t),T=()=>j(-3),Y=()=>j(-4),U=()=>Y()+Y(),P=()=>U()+U(),L=t=>("0"+t.toString()).slice(-2),$={"%y":t=>L(t.getFullYear()),"%Y":t=>t.getFullYear().toString(),"%m":t=>L(t.getMonth()+1),"%d":t=>L(t.getDate()),"%H":t=>L(t.getHours()),"%M":t=>L(t.getMinutes()),"%S":t=>L(t.getSeconds())},F=(t,e)=>(e=null!=e?e:new Date,t.replace(/%[yYmdHMS]/g,(t=>$[t]?$[t](e):t.slice(1)))),q=36e5,K=24*q,_={ms:1,s:1e3,m:6e4,h:q,d:K,w:7*K,y:315576e5},H=["y","d","h","m","s","ms"];function X(t,e,s,r){return new(s||(s=Promise))((function(n,i){function a(t){try{l(r.next(t))}catch(t){i(t)}}function u(t){try{l(r.throw(t))}catch(t){i(t)}}function l(t){t.done?n(t.value):function(t){return t instanceof s?t:new s((function(e){e(t)}))}(t.value).then(a,u)}l((r=r.apply(t,e||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;const J=t=>{var e;return 0==(null!==(e=null==t?void 0:t.length)&&void 0!==e?e:0)},Q=["",0,"0",null,!1,void 0],B=t=>-1==Q.indexOf(t),z=()=>{},V=(t,e,s)=>e(t.toLowerCase().replace(/\W+/g," ")).replace(/\s/g,null!=s?s:""),Z=(t,e)=>V(t,(t=>t.replace(/\s(\w)/g,(t=>t.toUpperCase()))),e),W=Z,G=/&(amp|apos|lt|gt|nbsp|quot);/g,tt={amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",quot:'"'},et=t=>/^[\d]$/.test(t),st=t=>/^[A-Za-z]$/.test(t),rt=t=>/^[^\w]$/.test(t),nt=t=>r(t.split("")).join("");class it{constructor(){this.hasSpace=!1,this._space=" ",this.hasNumbers=!1,this._numbers="0123456789",this.hasSymbols=!1,this._symbols="!@#$%^&*()<>.<~:;?+=-_",this.hasUpper=!1,this._upper="ABCDEFGHIJKLMNOPQRSTUVWXYZ",this.hasLower=!1,this._lower="abcdefghijklmnopqrstuvwxyz",this.hasChars=!1,this._chars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"}chars(){return this.hasChars=!0,this}static chars(){return(new it).chars()}lower(){return this.hasLower=!0,this}static lower(){return(new it).lower()}make(t){let e="";this.hasSpace&&(e+=this._space),this.hasNumbers&&(e+=this._numbers),this.hasSymbols&&(e+=this._symbols),this.hasUpper&&!this.hasChars&&(e+=this._upper),this.hasLower&&!this.hasChars&&(e+=this._lower),this.hasChars&&(e+=this._chars);let r="";if(t&&e.length){e=nt(e);for(let n=0;n<t;n++)r+=e.charAt(s(0,e.length-1))}return r}numbers(){return this.hasNumbers=!0,this}static numbers(){return(new it).numbers()}space(){return this.hasSpace=!0,this}static space(){return(new it).space()}symbols(){return this.hasSymbols=!0,this}static symbols(){return(new it).symbols()}upper(){return this.hasUpper=!0,this}static upper(){return(new it).upper()}}const at=t=>t.split("").reverse().join(""),ut=(t,e)=>V(t,(t=>t.replace(/(\w)(\w*)/g,((t,e,s)=>e.toUpperCase()+s))),e),lt=(t,e)=>e(t.value)?t.value:(t=>(t.maskIndex--,""))(t),ot={"#":t=>t.value,0:t=>lt(t,et),9:t=>lt(t,et),A:t=>lt(t,st),Z:t=>lt(t,st),L:t=>lt(t,st).toLowerCase(),U:t=>lt(t,st).toUpperCase(),S:t=>lt(t,rt)},ht=t=>{t.maskIndex++,t.textIndex++;const{mask:e,maskIndex:s,text:r,textIndex:n}=t;t.key=e[s],t.value=r[n];const{key:i,value:a}=t;return g(i)||g(a)?"":(t=>ot[t.key]?ot[t.key](t):(t.key!=t.value&&t.textIndex--,t.key))(t)+ht(t)},ct=(t,e)=>ht({mask:t,maskIndex:-1,text:e,textIndex:-1,key:"",value:""}),vt=(t,e)=>at(ct(at(t),at(e))),dt=(t,e)=>t.reduce(((t,s)=>Object.assign(Object.assign({},t),{[s]:e[s]})),{}),pt=(t,...e)=>{if(!e.length)return t;const s=e.shift();if(p(t)&&p(s))for(const e in s)p(s[e])?(t[e]||(t=Object.assign(Object.assign({},t),{[e]:{}})),t[e]=pt(t[e],s[e])):t=Object.assign(Object.assign({},t),{[e]:s[e]});return pt(t,...e)};class mt{}var ft,gt,yt,Et,xt,bt,St;mt.DESCRIPTION=Symbol("DESCRIPTION"),mt.ERROR=Symbol("ERROR"),mt.INDEXES=Symbol("INDEXES"),mt.KEYS=Symbol("KEYS"),mt.NAME=Symbol("NAME"),mt.REQUIRED=Symbol("REQUIRED"),mt.SOURCE=Symbol("SOURCE"),mt.TYPE=Symbol("TYPE");class wt{constructor(t){this[ft]="",this[gt]="",this[yt]="",this[Et]="any",this[xt]=!1,this.rules=[],this.custom=[],this[mt.TYPE]=t}description(t){return this[mt.DESCRIPTION]=t,this}empty(t){const e=t;return this.unshift((({value:t})=>{const s=l(t);return{break:!l(e)&&!s,value:s?t:c(e)?e():e}}))}equal(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>{const n=s({value:t,context:r});return t==n?{value:t}:this.invalid(`.equal(${n})`,e)}))}error(t){return f(t)&&(this[mt.ERROR]=t),this}filter(...t){const e=t;return this.unshift((({value:t})=>{const s=-1==e.indexOf(t);return{break:!s,value:s?t:void 0}}))}fn(t){return c(t)?t:()=>t}from(t){return this[mt.SOURCE]=t,this}invalid(t,e){return t=`[${this[mt.TYPE]}]${t}`,{error:this[mt.ERROR]?this[mt.ERROR]:this[mt.NAME]?this[mt.NAME]+":"+t:t,message:e}}model(){return this.toString()}parse(){return this.unshift((({value:t})=>({value:t})))}push(t){return this.rules.push(t),this}required(t){return this[mt.REQUIRED]=!0,this.unshift((({value:e})=>l(e)?{value:e}:this.invalid(".required",t)))}test(t){return!f(this.validate(t).error)}testAsync(t){return X(this,void 0,void 0,(function*(){return!f((yield this.validateAsync(t)).error)}))}toString(){return this[mt.TYPE]}unshift(t){return this.rules.unshift(t),this}validate(t,e){var s;if(this.custom.length)return this.invalid("[async]");let r={value:t};for(let t=0;t<this.rules.length;t++){if(r=this.rules[t]({value:r.value,context:e}),null===(s=r.error)||void 0===s?void 0:s.length)return Object.assign({error:r.error},r.message?{message:r.message}:{});if(r.break)return{value:r.value}}return{value:r.value}}validateAsync(t,e){return X(this,void 0,void 0,(function*(){let s=this.validate(t,e);if(s.error)return{error:s.error};for(let t=0;t<this.custom.length;t++){if(s=yield this.custom[t]({value:s.value}),s.error)return{error:s.error};if(s.break)return{value:s.value}}return{value:s.value}}))}}ft=mt.NAME,gt=mt.DESCRIPTION,mt.SOURCE,yt=mt.ERROR,Et=mt.TYPE,xt=mt.REQUIRED;class Ot extends wt{constructor(t){super("array"),this[bt]=[],this.push((({value:e})=>a(e)?{value:e}:this.invalid("",t)))}between(t,e,s){return this.min(t,s),this.max(e,s)}items(t,e){const s=t;return s&&this[mt.INDEXES].push(s),s?this.push((({value:t})=>{s[mt.NAME]="";for(let r=0;r<t.length;r++){const{error:n,value:i}=s.validate(t[r],t);if(n)return this.invalid("< "+n+"["+r+"] >",e);t[r]=i}return{value:t}})):this}length(t,e){const s=t;return this.push((({value:t})=>t.length==s?{value:t}:this.invalid(".length("+s+")",e)))}max(t,e){const s=t;return this.push((({value:t})=>t.length<=s?{value:t}:this.invalid(".max("+s+")",e)))}min(t,e){const s=t;return this.push((({value:t})=>t.length>=s?{value:t}:this.invalid(".min("+s+")",e)))}model(){return this[mt.INDEXES].length?this[mt.INDEXES].map((t=>t.model())):this[mt.TYPE]}toString(){return this[mt.INDEXES].length?JSON.stringify(this.model(),null,4):this[mt.TYPE]}}bt=mt.INDEXES;class Rt extends wt{constructor(t){super("boolean"),this.push((({value:e})=>u(e)?{value:e}:this.invalid("",t)))}parse(){return this.unshift((({value:t})=>({value:l(t)?E(t):t})))}}class Ct extends wt{constructor(t){super("date"),this.push((({value:e})=>f(e)&&e.length>=9&&!isNaN(new Date(e).getTime())?{value:e}:this.invalid("",t)))}format(t){const e=t;return this.push((({value:t})=>({value:F(e,new Date(t))})))}parse(){return this.unshift((({value:t})=>({value:new Date(f(t)&&t.length<=10?`${t} 12:00`:t)})))}}class It extends wt{constructor(t){super("number"),this.push((({value:e})=>o(e)?{value:e}:this.invalid("",t)))}between(t,e,s){return this.min(t,s),this.max(e,s)}float(t){return this.push((({value:e})=>h(e)?{value:e}:this.invalid(".float",t)))}integer(t){return this.push((({value:e})=>v(e)?{value:e}:this.invalid(".integer",t)))}max(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>{const n=s({value:t,context:r});return t<=n?{value:t}:this.invalid(`.max(${n})`,e)}))}min(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>{const n=s({value:t,context:r});return t>=n?{value:t}:this.invalid(`.min(${n})`,e)}))}parse(){return this.unshift((({value:t})=>({value:l(t)?parseFloat(t.toString()):t})))}}class Mt extends wt{constructor(t){super("object"),this[St]={},this.push((({value:e})=>d(e)?{value:e}:this.invalid("",t)))}keys(t,e){const s=t;return s&&(this[mt.KEYS]=Object.assign(Object.assign({},this[mt.KEYS]),s)),s?this.push((({value:t})=>{const r=[],n={};return Object.keys(s).forEach((i=>{var a;const u=s[i];u[mt.NAME]=null!==(a=u[mt.SOURCE])&&void 0!==a?a:i;const{error:o,message:h,value:c}=u.validate(t[u[mt.NAME]],n);!e&&h&&(e=h),o&&r.push(o),l(c)&&(n[i]=c)})),r.length?this.invalid("{ "+r.join(", ")+" }",e):{value:n}})):this}model(){const t={},e=Object.keys(this[mt.KEYS]);return e.length&&e.forEach((e=>t[e]=this[mt.KEYS][e].model())),e.length?t:this[mt.TYPE]}parse(t){return this.unshift((({value:e})=>{if(!d(e))try{e=JSON.parse(e)}catch(e){return this.invalid("",t)}return{value:e}}))}toString(){return Object.keys(this[mt.KEYS]).length?JSON.stringify(this.model(),null,4):this[mt.TYPE]}}St=mt.KEYS;class kt extends wt{constructor(t){super("string"),this.push((({value:e})=>f(e)?{value:e}:this.invalid("",t)))}between(t,e,s){return this.min(t,s),this.max(e,s)}email(t){const e=/^[\w-\\.]+@([\w-]+\.)+[\w-]{2,4}$/i;return this.push((({value:s})=>e.test(s)?{value:s}:this.invalid(".email",t)))}length(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>{const n=s({value:t,context:r});return t.length==n?{value:t}:this.invalid(`.length(${n})`,e)}))}lowerCase(){return this.push((({value:t})=>({value:t.toLowerCase()})))}lowerCamelCase(){return this.push((({value:t})=>({value:Z(t)})))}max(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>{const n=s({value:t,context:r});return t.length<=n?{value:t}:this.invalid(`.max(${n})`,e)}))}mask(t){const e=this.fn(t);return this.push((({value:t,context:s})=>({value:ct(e({value:t,context:s}),t)})))}min(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>{const n=s({value:t,context:r});return t.length>=n?{value:t}:this.invalid(`.min(${n})`,e)}))}parse(){return this.unshift((({value:t})=>({value:d(t)?JSON.stringify(t):l(t)?t.toString():t})))}required(t){return this[mt.REQUIRED]=!0,this.push((({value:e})=>e.length?{value:e}:this.invalid(".required",t)))}regex(t,e){return this.push((({value:s})=>t.test(s)?{value:s}:this.invalid(".regex",e)))}replace(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>({value:t.replace(s({value:t,context:r}),e)})))}trim(){return this.push((({value:t})=>({value:t.trim()})))}upperCase(){return this.push((({value:t})=>({value:t.toUpperCase()})))}upperCamelCase(){return this.push((({value:t})=>({value:ut(t)})))}}class At{static array(t,e){return new Ot(e).items(t)}static boolean(t){return new Rt(t)}static date(t){return new Ct(t)}static number(t){return new It(t)}static object(t,e){return new Mt(e).keys(t)}static ref(t,e){return({context:s})=>s&&l(s[t])?s[t]:e}static string(t){return new kt(t)}test(t,...e){return!f(At.validate(t,...e).error)}testAsync(t,...e){return X(this,void 0,void 0,(function*(){return!f((yield At.validateAsync(t,...e)).error)}))}static validate(t,...e){let s={value:t};for(let t=0;t<e.length;t++)if(s=e[t].validate(s.value),s.error)return{value:s.value,error:s.error};return{value:s.value}}static validateAsync(t,...e){return X(this,void 0,void 0,(function*(){let s={value:t};for(let t=0;t<e.length;t++)if(s=yield e[t].validateAsync(s.value),s.error)return{value:s.value,error:s.error};return{value:s.value}}))}}return t.EventEmitter=class{constructor(){this.events=new Map}on(t,e){const s=this.events.get(t);return s?s.push(e):this.events.set(t,[e]),{dispose:()=>this.off(t,e)}}once(t,e){const s=r=>{e(r),this.off(t,s)};return this.on(t,s),{dispose:()=>this.off(t,s)}}off(t,e){const s=this.events.get(t);if(e){if(s){const t=s.indexOf(e);t>=0&&s.splice(t,1)}}else this.events.set(t,[])}emit(t,e){const s=this.events.get(t);s&&s.forEach((t=>t(e)))}},t.Hash=N,t.RandomString=it,t.Validation=At,t.ValidationBase=wt,t.ValidationKeys=mt,t.allowed=dt,t.cache=()=>{const t=[],e=[];return s=>{let r=t.indexOf(s);return-1==r&&(t.push(s),e.push({}),r=e.length-1),e[r]}},t.camelCase=W,t.chunkArray=(t,e)=>{const s=[];for(let r=0;r<t.length;r+=e)s.push(t.slice(r,r+e));return s},t.clamp=e,t.colorPalette=(t,e)=>S(null!=e?e:k,(e=>0==e?t:e>0?M(t,e):I(t,1- -1*e))),t.compareArray=(t,e)=>t.length===e.length&&t.every(((t,s)=>t===e[s])),t.countArray=t=>{const e={};return t.forEach((t=>{const s=t.toString();e[s]=(e[s]||0)+1})),e},t.cutText=(t,e)=>{if(t.length>e){const s=t.substring(0,e).split(" ");return s.pop(),s.join(" ")+"..."}return t},t.dateFormat=F,t.dateRange=(t,e)=>{const s=new Date(t),r=[];for(;t<e;)s.setDate(s.getDate()+1),r.push(new Date(s));return r},t.debounce=(t,e)=>{let s;const r=()=>{s&&clearTimeout(s)};return{cancel:r,run(...n){r(),s=setTimeout((()=>t(...n)),e)}}},t.decodeHTML=t=>t.replace(G,((t,e)=>tt[e])).replace(/&#(\d+);/gi,((t,e)=>String.fromCharCode(parseInt(e,10)))),t.denied=(t,e)=>dt(Object.keys(e).filter((e=>-1==t.indexOf(e))),e),t.each=(t,e,s)=>a(t)?x(t,e,s):d(t)?b(t,e,s):t,t.encodeHTML=t=>t.replace(/[^0-9A-Za-z ]/g,(t=>"&#"+t.charCodeAt(0)+";")),t.forEachAsync=(t,e,s)=>X(void 0,void 0,void 0,(function*(){yield Promise.allSettled(t.map(((r,n)=>{var i;return null===(i=e.call(s,r,n,t))||void 0===i?void 0:i.catch(z)}))).catch(z)})),t.forEachIndex=x,t.forEachKey=b,t.forEachPage=t=>X(void 0,void 0,void 0,(function*(){var e;let s=!0;const r=()=>s=!0;let n=1;for(;s;)s=!1,yield null===(e=t(n,r))||void 0===e?void 0:e.catch(z),n+=1})),t.forEachSeries=(t,e,s)=>X(void 0,void 0,void 0,(function*(){var r;for(let n=0;n<t.length;n++)yield null===(r=e.call(s,t[n],n,t))||void 0===r?void 0:r.catch(z)})),t.forLoop=(t,e,s)=>{for(let r=1;r<=t&&!1!==e.call(s,r,t);r++);return t},t.hexToRgb=O,t.hslToRgb=(t,e,s)=>{t/=60;const r=(1-Math.abs(2*s-1))*e,n=r*(1-Math.abs(t%2-1));let i=[0,0,0];t<=1?i=[r,n,0]:t<=2?i=[n,r,0]:t<=3?i=[0,r,n]:t<=4?i=[0,n,r]:t<=5?i=[n,0,r]:t<=6&&(i=[r,0,n]);const a=s-.5*r;return[Math.round(255*(i[0]+a)),Math.round(255*(i[1]+a)),Math.round(255*(i[2]+a))]},t.isArray=a,t.isBoolean=u,t.isCharacter=t=>/^[\w]$/.test(t),t.isDate=t=>"date"==i(t),t.isDef=l,t.isDigit=et,t.isEmpty=J,t.isFalse=t=>!B(t),t.isFloat=h,t.isFunction=c,t.isInteger=v,t.isLetter=st,t.isMap=t=>"map"==i(t),t.isNotEmpty=t=>!J(t),t.isNull=t=>null===t,t.isNumber=o,t.isObject=d,t.isPlainObject=p,t.isRegExp=t=>"regexp"==i(t),t.isScalar=t=>-1!=m.indexOf(i(t)),t.isSet=t=>"set"==i(t),t.isSpecialChar=rt,t.isString=f,t.isSymbol=t=>"symbol"==typeof t,t.isTrue=B,t.isUndefined=g,t.lerp=(t,s,r)=>t+(s-t)*e(r,0,1),t.loop=(t,e)=>{let s=!1;const r=()=>X(void 0,void 0,void 0,(function*(){s&&(yield t(),setTimeout(r,e))}));return{start(){s||(s=!0,r())},stop(){s=!1}}},t.lowerCamelCase=Z,t.map=S,t.mask=ct,t.maskMoney=(t,e,s)=>(s++,e=parseInt((e||"0").replace(/\D/g,"")).toString(),vt(t,e.length<s?("0".repeat(s)+e).slice(-1*s):e)),t.maskReverse=vt,t.maskTest=(t,e)=>t.length==ct(t,e).length,t.merge=pt,t.msToString=t=>{const e=[];return H.forEach((s=>{const r=_[s],n=(t-t%r)/r;n&&(t-=n*r,e.push(n.toString()+s))})),e.join(" ")},t.noop=z,t.parseMs=t=>{const e=/(-?(?:\d+)?\.?\d+) *(ms|s|m|h|d|w|y)/gm;let s,r=0;for(;null!==(s=e.exec(t));)s.index===e.lastIndex&&e.lastIndex++,r+=parseFloat(s[1])*_[s[2]]||0;return r},t.parseSize=t=>{if(o(t))return t+"px";const e=(t=>/(-?(?:\d+)?\.?\d+) *(px|%|cm|mm|in|pt|pc|en|ex|ch|rem|vw|vh|vmin|vmax)*/g.exec(t))(t);return e?parseFloat(e[1])+(e[2]||"px"):"0px"},t.random=s,t.randomCase=t=>t.split("").map((t=>Math.random()<.5?t.toUpperCase():t.toLowerCase())).join(""),t.randomElement=t=>t.length?t[s(0,t.length-1)]:null,t.rangeArray=(t,e,s=1)=>Array.from({length:(e-t)/s+1},((e,r)=>t+r*s)),t.rgbToHex=C,t.rgbToHsl=(t,e,s)=>{const[r,n,i]=((...t)=>t.map((t=>t/255)))(t,e,s),a=Math.max(r,n,i),u=Math.min(r,n,i),l=a-u,o=(u+a)/2;return[60*A(l,a,r,n,i),D(l,o),o]},t.shadeColor=I,t.shuffleArray=r,t.shuffleString=nt,t.simpleID=()=>T()+Y(),t.sleep=t=>new Promise((e=>setTimeout(e,t))),t.stringReverse=at,t.tintColor=M,t.toArray=t=>a(t)?t:l(t)?[t]:[],t.toBool=E,t.type=i,t.uniqueArray=t=>t.filter(((t,e,s)=>s.indexOf(t)===e)),t.uniqueID=()=>P()+P()+P()+P(),t.upperCamelCase=ut,t.uuidv4=()=>U()+"-"+Y()+"-4"+T()+"-"+Y()+"-"+(U()+Y()),t}({});
7
+ var UtilsJS=function(t){"use strict";const e=(t,e,s)=>Math.max(e,Math.min(s,t)),s=(t,e)=>Math.floor(Math.random()*(e-t+1)+t),r=t=>{for(let e=t.length-1;e>0;e--){const r=s(0,e);[t[e],t[r]]=[t[r],t[e]]}return t},n={},a=t=>null==t?"null":n[n.toString.call(t)]||"object";["Array","AsyncFunction","Boolean","Date","Function","Map","Number","Object","RegExp","Set","String"].forEach((t=>n["[object "+t+"]"]=t.toLowerCase()));const i=t=>"array"==a(t),l=t=>"boolean"==a(t),u=t=>"null"!=a(t),h=t=>"number"==a(t),o=t=>h(t)&&!!(t%1),c=t=>"function"==typeof t,p=t=>h(t)&&!(t%1),v=t=>"object"==a(t),m=t=>v(t)&&t.constructor===Object,d=["boolean","number","string"],g=t=>"string"==typeof t,f=t=>void 0===t,y=[1,"1",!0,"true"],E=t=>-1!=y.indexOf(t),S=(t,e,s)=>{for(let r=0;r<t.length&&!1!==e.call(s,t[r],r,t);r++);return t},x=(t,e,s)=>{let r="";const n=Object.keys(t);for(let a=0;a<n.length&&(r=n[a],!1!==e.call(s,t[r],r,t));a++);return t},b=(t,e,s)=>Object.fromEntries(Object.entries(t).map((([r,n])=>[r,e.call(s,n,r,t)]))),w=t=>parseInt(t??"0",16)||0,I=t=>t.replace(/^#/,"").match(/.{1,2}/g)?.map(w)||[],R=t=>("0"+t.toString(16)).slice(-2),C=(t,e,s)=>"#"+R(t)+R(e)+R(s),M=(t,s)=>{const r=I(t);s=e(s,0,1);const[n,a,i]=r.map((t=>Math.round(t*s)));return C(n,a,i)},O=(t,s)=>{const r=I(t);s=e(s,0,1);const[n,a,i]=r.map((t=>Math.round(t+(255-t)*s)));return C(n,a,i)},T={50:.95,100:.9,200:.75,300:.6,400:.3,500:0,600:-.1,700:-.25,800:-.4,900:-.55,950:-.71},A=(t,e,s,r,n)=>0===t?0:e===s?(r-n)/t%6:e===r?(n-s)/t+2:e===n?(s-r)/t+4:0,k=(t,e)=>0===t?0:t/(1-Math.abs(2*e-1));class D{constructor(t){this.key=this.shuffle(D.dictionary,t,!1)}encrypt(t){return this.shuffle(t,this.key,!1)}decrypt(t){return this.shuffle(t,this.key,!0)}index(t,e,s){return[D.dictionary.indexOf(t[s]),D.dictionary.indexOf(e[s%e.length])]}result(t,e,s){return D.dictionary[(s?t-e+D.dictionary.length:t+e)%D.dictionary.length]}shuffle(t,e,s){let r="";for(let n=0;n<t.length;n++){const[a,i]=this.index(t,e,n);r+=-1===a||-1===i?t[n]:this.result(a,i,s)}return r}}D.dictionary="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";const N=(t=64)=>Array(Math.ceil(t/2)).fill(0).map((()=>s(0,255).toString(16).padStart(2,"0"))).join("").slice(0,t),j=t=>("0"+t.toString()).slice(-2),L={"%y":t=>j(t.getFullYear()),"%Y":t=>t.getFullYear().toString(),"%m":t=>j(t.getMonth()+1),"%d":t=>j(t.getDate()),"%H":t=>j(t.getHours()),"%M":t=>j(t.getMinutes()),"%S":t=>j(t.getSeconds())},P=(t,e)=>(e=e??new Date,t.replace(/%[yYmdHMS]/g,(t=>L[t]?L[t](e):t.slice(1)))),Y=36e5,U=24*Y,$={ms:1,s:1e3,m:6e4,h:Y,d:U,w:7*U,y:315576e5},F=["y","d","h","m","s","ms"];const X=t=>0==(t?.length??0),q=["",0,"0",null,!1,void 0],K=t=>-1==q.indexOf(t),_=()=>{},H=(t,e,s)=>e(t.toLowerCase().replace(/\W+/g," ")).replace(/\s/g,s??""),J=(t,e)=>H(t,(t=>t.replace(/\s(\w)/g,(t=>t.toUpperCase()))),e),Q=J,B=/&(amp|apos|lt|gt|nbsp|quot);/g,z={amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",quot:'"'},V=t=>/^[\d]$/.test(t),Z=t=>/^[A-Za-z]$/.test(t),W=t=>/^[^\w]$/.test(t),G=t=>r(t.split("")).join("");class tt{constructor(){this.hasSpace=!1,this._space=" ",this.hasNumbers=!1,this._numbers="0123456789",this.hasSymbols=!1,this._symbols="!@#$%^&*()<>.<~:;?+=-_",this.hasUpper=!1,this._upper="ABCDEFGHIJKLMNOPQRSTUVWXYZ",this.hasLower=!1,this._lower="abcdefghijklmnopqrstuvwxyz",this.hasChars=!1,this._chars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"}chars(){return this.hasChars=!0,this}static chars(){return(new tt).chars()}lower(){return this.hasLower=!0,this}static lower(){return(new tt).lower()}make(t){let e="";this.hasSpace&&(e+=this._space),this.hasNumbers&&(e+=this._numbers),this.hasSymbols&&(e+=this._symbols),this.hasUpper&&!this.hasChars&&(e+=this._upper),this.hasLower&&!this.hasChars&&(e+=this._lower),this.hasChars&&(e+=this._chars);let r="";if(t&&e.length){e=G(e);for(let n=0;n<t;n++)r+=e.charAt(s(0,e.length-1))}return r}numbers(){return this.hasNumbers=!0,this}static numbers(){return(new tt).numbers()}space(){return this.hasSpace=!0,this}static space(){return(new tt).space()}symbols(){return this.hasSymbols=!0,this}static symbols(){return(new tt).symbols()}upper(){return this.hasUpper=!0,this}static upper(){return(new tt).upper()}}const et=t=>t.split("").reverse().join(""),st=(t,e)=>H(t,(t=>t.replace(/(\w)(\w*)/g,((t,e,s)=>e.toUpperCase()+s))),e),rt=(t,e)=>e(t.value)?t.value:(t=>(t.maskIndex--,""))(t),nt={"#":t=>t.value,0:t=>rt(t,V),9:t=>rt(t,V),A:t=>rt(t,Z),Z:t=>rt(t,Z),L:t=>rt(t,Z).toLowerCase(),U:t=>rt(t,Z).toUpperCase(),S:t=>rt(t,W)},at=t=>{t.maskIndex++,t.textIndex++;const{mask:e,maskIndex:s,text:r,textIndex:n}=t;t.key=e[s],t.value=r[n];const{key:a,value:i}=t;return f(a)||f(i)?"":(t=>nt[t.key]?nt[t.key](t):(t.key!=t.value&&t.textIndex--,t.key))(t)+at(t)},it=(t,e)=>at({mask:t,maskIndex:-1,text:e,textIndex:-1,key:"",value:""}),lt=(t,e)=>et(it(et(t),et(e))),ut=(t,e)=>t.reduce(((t,s)=>({...t,[s]:e[s]})),{}),ht=(t,...e)=>{if(!e.length)return t;const s=e.shift();if(m(t)&&m(s))for(const e in s)m(s[e])?(t[e]||(t={...t,[e]:{}}),t[e]=ht(t[e],s[e])):t={...t,[e]:s[e]};return ht(t,...e)};class ot{}var ct,pt,vt,mt,dt,gt,ft,yt,Et;ot.DESCRIPTION=Symbol("DESCRIPTION"),ot.ERROR=Symbol("ERROR"),ot.EXAMPLE=Symbol("EXAMPLE"),ot.INDEXES=Symbol("INDEXES"),ot.KEYS=Symbol("KEYS"),ot.LIST=Symbol("LIST"),ot.NAME=Symbol("NAME"),ot.REQUIRED=Symbol("REQUIRED"),ot.SOURCE=Symbol("SOURCE"),ot.TYPE=Symbol("TYPE");class St{constructor(t){this[ct]="",this[pt]="",this[vt]=null,this[mt]="",this[dt]="any",this[gt]=!1,this.rules=[],this.custom=[],this[ot.TYPE]=t}description(t){return this[ot.DESCRIPTION]=t,this}example(t){return this[ot.EXAMPLE]=t,this}empty(t){const e=t;return this.unshift((({value:t})=>{const s=u(t);return{break:!u(e)&&!s,value:s?t:c(e)?e():e}}))}equal(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>{const n=s({value:t,context:r});return t==n?{value:t}:this.invalid(`.equal(${n})`,e)}))}error(t){return g(t)&&(this[ot.ERROR]=t),this}filter(...t){const e=t;return this.unshift((({value:t})=>{const s=-1==e.indexOf(t);return{break:!s,value:s?t:void 0}}))}fn(t){return c(t)?t:()=>t}from(t){return this[ot.SOURCE]=t,this}invalid(t,e){return t=`[${this[ot.TYPE]}]${t}`,{error:this[ot.ERROR]?this[ot.ERROR]:this[ot.NAME]?this[ot.NAME]+":"+t:t,message:e}}model(){return this.toString()}parse(){return this.unshift((({value:t})=>({value:t})))}push(t){return this.rules.push(t),this}required(t){return this[ot.REQUIRED]=!0,this.unshift((({value:e})=>u(e)?{value:e}:this.invalid(".required",t)))}test(t){return!g(this.validate(t).error)}async testAsync(t){return!g((await this.validateAsync(t)).error)}toString(){return this[ot.TYPE]}unshift(t){return this.rules.unshift(t),this}validate(t,e){if(this.custom.length)return this.invalid("[async]");let s={value:t};for(let t=0;t<this.rules.length;t++){if(s=this.rules[t]({value:s.value,context:e}),s.error?.length)return{error:s.error,...s.message?{message:s.message}:{}};if(s.break)return{value:s.value}}return{value:s.value}}async validateAsync(t,e){let s=this.validate(t,e);if(s.error)return{error:s.error};for(let t=0;t<this.custom.length;t++){if(s=await this.custom[t]({value:s.value}),s.error)return{error:s.error};if(s.break)return{value:s.value}}return{value:s.value}}}ct=ot.NAME,pt=ot.DESCRIPTION,vt=ot.EXAMPLE,ot.SOURCE,mt=ot.ERROR,dt=ot.TYPE,gt=ot.REQUIRED;class xt extends St{constructor(t){super("array"),this[ft]=[],this.push((({value:e})=>i(e)?{value:e}:this.invalid("",t)))}between(t,e,s){return this.min(t,s),this.max(e,s)}items(t,e){const s=t;return s&&this[ot.INDEXES].push(s),s?this.push((({value:t})=>{s[ot.NAME]="";for(let r=0;r<t.length;r++){const{error:n,value:a}=s.validate(t[r],t);if(n)return this.invalid("< "+n+"["+r+"] >",e);t[r]=a}return{value:t}})):this}length(t,e){const s=t;return this.push((({value:t})=>t.length==s?{value:t}:this.invalid(".length("+s+")",e)))}max(t,e){const s=t;return this.push((({value:t})=>t.length<=s?{value:t}:this.invalid(".max("+s+")",e)))}min(t,e){const s=t;return this.push((({value:t})=>t.length>=s?{value:t}:this.invalid(".min("+s+")",e)))}model(){return this[ot.INDEXES].length?this[ot.INDEXES].map((t=>t.model())):this[ot.TYPE]}toString(){return this[ot.INDEXES].length?JSON.stringify(this.model(),null,4):this[ot.TYPE]}}ft=ot.INDEXES;class bt extends St{constructor(t){super("boolean"),this.push((({value:e})=>l(e)?{value:e}:this.invalid("",t)))}parse(){return this.unshift((({value:t})=>({value:u(t)?E(t):t})))}}class wt extends St{constructor(t){super("date"),this.push((({value:e})=>g(e)&&e.length>=9&&!isNaN(new Date(e).getTime())?{value:e}:this.invalid("",t)))}format(t){const e=t;return this.push((({value:t})=>({value:P(e,new Date(t))})))}parse(){return this.unshift((({value:t})=>({value:new Date(g(t)&&t.length<=10?`${t} 12:00`:t)})))}}class It extends St{constructor(t){super("enum"),this[yt]=[],this.push((({value:e})=>u(e)?{value:e}:this.invalid(`('${this[ot.LIST].join("', '")}')`,t)))}list(t,e){const s=t;return s&&this[ot.LIST].push(...s),s?this.push((({value:t})=>-1!=this[ot.LIST].indexOf(t)?{value:t}:this.invalid(`('${this[ot.LIST].join("', '")}')`,e))):this}toString(){return`${this[ot.TYPE]}('${this[ot.LIST].join("', '")}')`}}yt=ot.LIST;class Rt extends St{constructor(t){super("number"),this.push((({value:e})=>h(e)?{value:e}:this.invalid("",t)))}between(t,e,s){return this.min(t,s),this.max(e,s)}float(t){return this.push((({value:e})=>o(e)?{value:e}:this.invalid(".float",t)))}integer(t){return this.push((({value:e})=>p(e)?{value:e}:this.invalid(".integer",t)))}max(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>{const n=s({value:t,context:r});return t<=n?{value:t}:this.invalid(`.max(${n})`,e)}))}min(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>{const n=s({value:t,context:r});return t>=n?{value:t}:this.invalid(`.min(${n})`,e)}))}parse(){return this.unshift((({value:t})=>({value:u(t)?parseFloat(t.toString()):t})))}}class Ct extends St{constructor(t){super("object"),this[Et]={},this.push((({value:e})=>v(e)?{value:e}:this.invalid("",t)))}keys(t,e){const s=t;return s&&(this[ot.KEYS]={...this[ot.KEYS],...s}),s?this.push((({value:t})=>{const r=[],n={};return Object.keys(s).forEach((a=>{const i=s[a];i[ot.NAME]=i[ot.SOURCE]??a;const{error:l,message:h,value:o}=i.validate(t[i[ot.NAME]],n);!e&&h&&(e=h),l&&r.push(l),u(o)&&(n[a]=o)})),r.length?this.invalid("{ "+r.join(", ")+" }",e):{value:n}})):this}model(){const t={},e=Object.keys(this[ot.KEYS]);return e.length&&e.forEach((e=>t[e]=this[ot.KEYS][e].model())),e.length?t:this[ot.TYPE]}parse(t){return this.unshift((({value:e})=>{if(!v(e))try{e=JSON.parse(e)}catch(e){return this.invalid("",t)}return{value:e}}))}toString(){return Object.keys(this[ot.KEYS]).length?JSON.stringify(this.model(),null,4):this[ot.TYPE]}}Et=ot.KEYS;class Mt extends St{constructor(t){super("string"),this.push((({value:e})=>g(e)?{value:e}:this.invalid("",t)))}between(t,e,s){return this.min(t,s),this.max(e,s)}email(t){const e=/^[\w-\\.]+@([\w-]+\.)+[\w-]{2,4}$/i;return this.push((({value:s})=>e.test(s)?{value:s}:this.invalid(".email",t)))}length(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>{const n=s({value:t,context:r});return t.length==n?{value:t}:this.invalid(`.length(${n})`,e)}))}lowerCase(){return this.push((({value:t})=>({value:t.toLowerCase()})))}lowerCamelCase(){return this.push((({value:t})=>({value:J(t)})))}max(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>{const n=s({value:t,context:r});return t.length<=n?{value:t}:this.invalid(`.max(${n})`,e)}))}mask(t){const e=this.fn(t);return this.push((({value:t,context:s})=>({value:it(e({value:t,context:s}),t)})))}min(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>{const n=s({value:t,context:r});return t.length>=n?{value:t}:this.invalid(`.min(${n})`,e)}))}parse(){return this.unshift((({value:t})=>({value:v(t)?JSON.stringify(t):u(t)?t.toString():t})))}required(t){return this[ot.REQUIRED]=!0,this.push((({value:e})=>e.length?{value:e}:this.invalid(".required",t)))}regex(t,e){return this.push((({value:s})=>t.test(s)?{value:s}:this.invalid(".regex",e)))}replace(t,e){const s=this.fn(t);return this.push((({value:t,context:r})=>({value:t.replace(s({value:t,context:r}),e)})))}trim(){return this.push((({value:t})=>({value:t.trim()})))}upperCase(){return this.push((({value:t})=>({value:t.toUpperCase()})))}upperCamelCase(){return this.push((({value:t})=>({value:st(t)})))}}class Ot{static array(t,e){return new xt(e).items(t)}static boolean(t){return new bt(t)}static date(t){return new wt(t)}static enum(t,e){return new It(e).list(t)}static number(t){return new Rt(t)}static object(t,e){return new Ct(e).keys(t)}static ref(t,e){return({context:s})=>s&&u(s[t])?s[t]:e}static string(t){return new Mt(t)}test(t,...e){return!g(Ot.validate(t,...e).error)}async testAsync(t,...e){return!g((await Ot.validateAsync(t,...e)).error)}static validate(t,...e){let s={value:t};for(let t=0;t<e.length;t++)if(s=e[t].validate(s.value),s.error)return{value:s.value,error:s.error};return{value:s.value}}static async validateAsync(t,...e){let s={value:t};for(let t=0;t<e.length;t++)if(s=await e[t].validateAsync(s.value),s.error)return{value:s.value,error:s.error};return{value:s.value}}}return t.EventEmitter=class{constructor(){this.events=new Map}on(t,e){const s=this.events.get(t);return s?s.push(e):this.events.set(t,[e]),{dispose:()=>this.off(t,e)}}once(t,e){const s=r=>{e(r),this.off(t,s)};return this.on(t,s),{dispose:()=>this.off(t,s)}}off(t,e){const s=this.events.get(t);if(e){if(s){const t=s.indexOf(e);t>=0&&s.splice(t,1)}}else this.events.set(t,[])}emit(t,e){const s=this.events.get(t);s&&s.forEach((t=>t(e)))}},t.Hash=D,t.RandomString=tt,t.Validation=Ot,t.ValidationBase=St,t.ValidationKeys=ot,t.allowed=ut,t.cache=()=>{const t=[],e=[];return s=>{let r=t.indexOf(s);return-1==r&&(t.push(s),e.push({}),r=e.length-1),e[r]}},t.camelCase=Q,t.chunkArray=(t,e)=>{const s=[];for(let r=0;r<t.length;r+=e)s.push(t.slice(r,r+e));return s},t.clamp=e,t.colorPalette=(t,e)=>b(e??T,(e=>0==e?t:e>0?O(t,e):M(t,1- -1*e))),t.compareArray=(t,e)=>t.length===e.length&&t.every(((t,s)=>t===e[s])),t.countArray=t=>{const e={};return t.forEach((t=>{const s=t.toString();e[s]=(e[s]||0)+1})),e},t.cutText=(t,e)=>{if(t.length>e){const s=t.substring(0,e).split(" ");return s.pop(),s.join(" ")+"..."}return t},t.dateFormat=P,t.dateRange=(t,e)=>{const s=new Date(t),r=[];for(;t<e;)s.setDate(s.getDate()+1),r.push(new Date(s));return r},t.debounce=(t,e)=>{let s;const r=()=>{s&&clearTimeout(s)};return{cancel:r,run(...n){r(),s=setTimeout((()=>t(...n)),e)}}},t.decodeHTML=t=>t.replace(B,((t,e)=>z[e])).replace(/&#(\d+);/gi,((t,e)=>String.fromCharCode(parseInt(e,10)))),t.denied=(t,e)=>ut(Object.keys(e).filter((e=>-1==t.indexOf(e))),e),t.each=(t,e,s)=>i(t)?S(t,e,s):v(t)?x(t,e,s):t,t.encodeHTML=t=>t.replace(/[^0-9A-Za-z ]/g,(t=>"&#"+t.charCodeAt(0)+";")),t.forEachAsync=async(t,e,s)=>{await Promise.allSettled(t.map(((r,n)=>e.call(s,r,n,t)?.catch(_)))).catch(_)},t.forEachIndex=S,t.forEachKey=x,t.forEachPage=async t=>{let e=!0;const s=()=>e=!0;let r=1;for(;e;)e=!1,await(t(r,s)?.catch(_)),r+=1},t.forEachSeries=async(t,e,s)=>{for(let r=0;r<t.length;r++)await(e.call(s,t[r],r,t)?.catch(_))},t.forLoop=(t,e,s)=>{for(let r=1;r<=t&&!1!==e.call(s,r,t);r++);return t},t.hexToRgb=I,t.hslToRgb=(t,e,s)=>{t/=60;const r=(1-Math.abs(2*s-1))*e,n=r*(1-Math.abs(t%2-1));let a=[0,0,0];t<=1?a=[r,n,0]:t<=2?a=[n,r,0]:t<=3?a=[0,r,n]:t<=4?a=[0,n,r]:t<=5?a=[n,0,r]:t<=6&&(a=[r,0,n]);const i=s-.5*r;return[Math.round(255*(a[0]+i)),Math.round(255*(a[1]+i)),Math.round(255*(a[2]+i))]},t.inArray=(t,e)=>-1!=e.indexOf(t),t.isArray=i,t.isBoolean=l,t.isCharacter=t=>/^[\w]$/.test(t),t.isDate=t=>"date"==a(t),t.isDef=u,t.isDigit=V,t.isEmpty=X,t.isFalse=t=>!K(t),t.isFloat=o,t.isFunction=c,t.isInteger=p,t.isLetter=Z,t.isMap=t=>"map"==a(t),t.isNotEmpty=t=>!X(t),t.isNull=t=>null===t,t.isNumber=h,t.isObject=v,t.isPlainObject=m,t.isRegExp=t=>"regexp"==a(t),t.isScalar=t=>-1!=d.indexOf(a(t)),t.isSet=t=>"set"==a(t),t.isSpecialChar=W,t.isString=g,t.isSymbol=t=>"symbol"==typeof t,t.isTrue=K,t.isUndefined=f,t.lerp=(t,s,r)=>t+(s-t)*e(r,0,1),t.loop=(t,e)=>{let s=!1;const r=async()=>{s&&(await t(),setTimeout(r,e))};return{start(){s||(s=!0,r())},stop(){s=!1}}},t.lowerCamelCase=J,t.map=b,t.mask=it,t.maskMoney=(t,e,s)=>(s++,e=parseInt((e||"0").replace(/\D/g,"")).toString(),lt(t,e.length<s?("0".repeat(s)+e).slice(-1*s):e)),t.maskReverse=lt,t.maskTest=(t,e)=>t.length==it(t,e).length,t.merge=ht,t.msToString=t=>{const e=[];return F.forEach((s=>{const r=$[s],n=(t-t%r)/r;n&&(t-=n*r,e.push(n.toString()+s))})),e.join(" ")},t.noop=_,t.parseMs=t=>{const e=/(-?(?:\d+)?\.?\d+) *(ms|s|m|h|d|w|y)/gm;let s,r=0;for(;null!==(s=e.exec(t));)s.index===e.lastIndex&&e.lastIndex++,r+=parseFloat(s[1])*$[s[2]]||0;return r},t.parseSize=t=>{if(h(t))return t+"px";const e=(t=>/(-?(?:\d+)?\.?\d+) *(px|%|cm|mm|in|pt|pc|en|ex|ch|rem|vw|vh|vmin|vmax)*/g.exec(t))(t);return e?parseFloat(e[1])+(e[2]||"px"):"0px"},t.random=s,t.randomCase=t=>t.split("").map((t=>Math.random()<.5?t.toUpperCase():t.toLowerCase())).join(""),t.randomElement=t=>t.length?t[s(0,t.length-1)]:null,t.rangeArray=(t,e,s=1)=>Array.from({length:(e-t)/s+1},((e,r)=>t+r*s)),t.rgbToHex=C,t.rgbToHsl=(t,e,s)=>{const[r,n,a]=((...t)=>t.map((t=>t/255)))(t,e,s),i=Math.max(r,n,a),l=Math.min(r,n,a),u=i-l,h=(l+i)/2;return[60*A(u,i,r,n,a),k(u,h),h]},t.shadeColor=M,t.shuffleArray=r,t.shuffleString=G,t.sleep=t=>new Promise((e=>setTimeout(e,t))),t.stringReverse=et,t.tintColor=O,t.toArray=t=>i(t)?t:u(t)?[t]:[],t.toBool=E,t.type=a,t.uniqueArray=t=>t.filter(((t,e,s)=>s.indexOf(t)===e)),t.uniqueID=N,t.upperCamelCase=st,t.uuidv1=()=>{const t=1e4*(Date.now()+122192928e5),e=(4294967295&t)>>>0,r=(t/4294967296&65535)>>>0,n=(t/281474976710656&4095)>>>0,a=s(0,e),i=(t,e)=>t.toString(16).padStart(e,"0");return[i(e,8),i(r,4),i(4096|n,4),i(a>>8&63|128,2)+i(255&a,2),N(12)].join("-")},t.uuidv1ToTimestamp=t=>{const e=t.replace(/-/g,""),s=parseInt(e.slice(0,8),16),r=parseInt(e.slice(8,12),16),n=(4095&parseInt(e.slice(12,16),16))*Math.pow(2,48)+r*Math.pow(2,32)+s;return Math.floor((n-122192928e9)/1e4)},t.uuidv4=()=>{const t=[];t.push(...Array(16).fill(0).map((()=>s(0,255)))),t[6]=15&t[6]|64;const e=t.map((t=>t.toString(16).padStart(2,"0"))).join("");return[e.slice(0,8),e.slice(8,12),e.slice(12,16),e.slice(16,20),e.slice(20)].join("-")},t.uuidv7=()=>{const t=Date.now(),e=[];e[0]=t/2**40&255,e[1]=t/2**32&255,e[2]=t>>>24&255,e[3]=t>>>16&255,e[4]=t>>>8&255,e[5]=255&t,e.push(...Array(10).fill(0).map((()=>s(0,255)))),e[6]=15&e[6]|112,e[8]=63&e[8]|128;const r=e.map((t=>t.toString(16).padStart(2,"0"))).join("");return[r.slice(0,8),r.slice(8,12),r.slice(12,16),r.slice(16,20),r.slice(20)].join("-")},t.uuidv7ToTimestamp=t=>parseInt(t.replace(/-/g,"").slice(0,12),16),t}({});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@andrewcaires/utils.js",
3
- "version": "0.4.9",
3
+ "version": "0.4.10",
4
4
  "description": "JavaScript utility library for web and nodejs development",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs.js",
@@ -44,15 +44,15 @@
44
44
  },
45
45
  "homepage": "https://github.com/andrewcaires/npm/tree/main/utils.js#readme",
46
46
  "devDependencies": {
47
- "@rollup/plugin-commonjs": "^28.0.3",
47
+ "@rollup/plugin-commonjs": "^28.0.6",
48
48
  "@rollup/plugin-terser": "^0.4.4",
49
- "@rollup/plugin-typescript": "^12.1.2",
50
- "@types/node": "^22.15.21",
51
- "eslint": "^9.27.0",
52
- "rollup": "^4.41.0",
49
+ "@rollup/plugin-typescript": "^12.1.4",
50
+ "@types/node": "^24.1.0",
51
+ "eslint": "^9.32.0",
52
+ "rollup": "^4.46.2",
53
53
  "rollup-plugin-dts": "^6.2.1",
54
54
  "tslib": "^2.8.1",
55
- "tsx": "^4.19.4",
56
- "typescript-eslint": "^8.32.1"
55
+ "tsx": "^4.20.3",
56
+ "typescript-eslint": "^8.38.0"
57
57
  }
58
58
  }