@andrewcaires/utils.js 0.4.6 → 0.4.7

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.6
2
+ * @andrewcaires/utils.js v0.4.7
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 e=(e,t,s)=>Math.max(t,Math.min(s,e)),t=(e,t)=>Math.floor(Math.random()*(t-e+1)+e),s=e=>{for(let s=e.length-1;s>0;s--){const r=t(0,s);[e[s],e[r]]=[e[r],e[s]]}return e},r={},n=e=>null==e?"null":r[r.toString.call(e)]||"object";["Array","AsyncFunction","Boolean","Date","Function","Map","Number","Object","RegExp","Set","String"].forEach((e=>r["[object "+e+"]"]=e.toLowerCase()));const i=e=>"array"==n(e),a=e=>"boolean"==n(e),o=e=>"null"!=n(e),u=e=>"number"==n(e),l=e=>u(e)&&!!(e%1),h=e=>"function"==typeof e,c=e=>u(e)&&!(e%1),p=e=>"object"==n(e),v=e=>p(e)&&e.constructor===Object,x=["boolean","number","string"],d=e=>"string"==typeof e,m=e=>void 0===e,f=[1,"1",!0,"true"],g=e=>-1!=f.indexOf(e),y=(e,t,s)=>{for(let r=0;r<e.length&&!1!==t.call(s,e[r],r,e);r++);return e},b=(e,t,s)=>{let r="";const n=Object.keys(e);for(let i=0;i<n.length&&(r=n[i],!1!==t.call(s,e[r],r,e));i++);return e},E=(e,t,s)=>Object.fromEntries(Object.entries(e).map((([r,n])=>[r,t.call(s,n,r,e)]))),w=e=>parseInt(null!=e?e:"0",16)||0,S=e=>{var t;return(null===(t=e.replace(/^#/,"").match(/.{1,2}/g))||void 0===t?void 0:t.map(w))||[]},R=e=>("0"+e.toString(16)).slice(-2),C=(e,t,s)=>"#"+R(e)+R(t)+R(s),O=(t,s)=>{const r=S(t);s=e(s,0,1);const[n,i,a]=r.map((e=>Math.round(e*s)));return C(n,i,a)},M=(t,s)=>{const r=S(t);s=e(s,0,1);const[n,i,a]=r.map((e=>Math.round(e+(255-e)*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=(e,t,s,r,n)=>0===e?0:t===s?(r-n)/e%6:t===r?(n-s)/e+2:t===n?(s-r)/e+4:0,I=(e,t)=>0===e?0:e/(1-Math.abs(2*t-1));class j{constructor(e){this.key=this.shuffle(j.dictionary,e,!1)}encrypt(e){return this.shuffle(e,this.key,!1)}decrypt(e){return this.shuffle(e,this.key,!0)}index(e,t,s){return[j.dictionary.indexOf(e[s]),j.dictionary.indexOf(t[s%t.length])]}result(e,t,s){return j.dictionary[(s?e-t+j.dictionary.length:e+t)%j.dictionary.length]}shuffle(e,t,s){let r="";for(let n=0;n<e.length;n++){const[i,a]=this.index(e,t,n);r+=-1===i||-1===a?e[n]:this.result(i,a,s)}return r}}j.dictionary="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";const D=e=>Math.random().toString(16).slice(e),T=()=>D(-3),N=()=>D(-4),U=()=>N()+N(),P=()=>U()+U(),L=e=>("0"+e.toString()).slice(-2),$={"%y":e=>L(e.getFullYear()),"%Y":e=>e.getFullYear().toString(),"%m":e=>L(e.getMonth()+1),"%d":e=>L(e.getDate()),"%H":e=>L(e.getHours()),"%M":e=>L(e.getMinutes()),"%S":e=>L(e.getSeconds())},F=(e,t)=>(t=null!=t?t:new Date,e.replace(/%[yYmdHMS]/g,(e=>$[e]?$[e](t):e.slice(1)))),q=36e5,_=24*q,Y={ms:1,s:1e3,m:6e4,h:q,d:_,w:7*_,y:315576e5},H=["y","d","h","m","s","ms"];function Q(e,t,s,r){return new(s||(s=Promise))((function(n,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function o(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){e.done?n(e.value):function(e){return e instanceof s?e:new s((function(t){t(e)}))}(e.value).then(a,o)}u((r=r.apply(e,t||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;const B=e=>{var t;return 0==(null!==(t=null==e?void 0:e.length)&&void 0!==t?t:0)},z=["",0,"0",null,!1,void 0],V=e=>-1==z.indexOf(e),Z=()=>{},J=(e,t,s)=>t(e.toLowerCase().replace(/\W+/g," ")).replace(/\s/g,null!=s?s:""),K=(e,t)=>J(e,(e=>e.replace(/\s(\w)/g,(e=>e.toUpperCase()))),t),W=K,G=/&(amp|apos|lt|gt|nbsp|quot);/g,X={amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",quot:'"'},ee=e=>/^[\d]$/.test(e),te=e=>/^[A-Za-z]$/.test(e),se=e=>/^[^\w]$/.test(e),re=e=>s(e.split("")).join("");class ne{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 ne).chars()}lower(){return this.hasLower=!0,this}static lower(){return(new ne).lower()}make(e){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(e&&s.length){s=re(s);for(let n=0;n<e;n++)r+=s.charAt(t(0,s.length-1))}return r}numbers(){return this.hasNumbers=!0,this}static numbers(){return(new ne).numbers()}space(){return this.hasSpace=!0,this}static space(){return(new ne).space()}symbols(){return this.hasSymbols=!0,this}static symbols(){return(new ne).symbols()}upper(){return this.hasUpper=!0,this}static upper(){return(new ne).upper()}}const ie=e=>e.split("").reverse().join(""),ae=(e,t)=>J(e,(e=>e.replace(/(\w)(\w*)/g,((e,t,s)=>t.toUpperCase()+s))),t),oe=(e,t)=>t(e.value)?e.value:(e=>(e.maskIndex--,""))(e),ue={"#":e=>e.value,0:e=>oe(e,ee),9:e=>oe(e,ee),A:e=>oe(e,te),Z:e=>oe(e,te),L:e=>oe(e,te).toLowerCase(),U:e=>oe(e,te).toUpperCase(),S:e=>oe(e,se)},le=e=>{e.maskIndex++,e.textIndex++;const{mask:t,maskIndex:s,text:r,textIndex:n}=e;e.key=t[s],e.value=r[n];const{key:i,value:a}=e;return m(i)||m(a)?"":(e=>ue[e.key]?ue[e.key](e):(e.key!=e.value&&e.textIndex--,e.key))(e)+le(e)},he=(e,t)=>le({mask:e,maskIndex:-1,text:t,textIndex:-1,key:"",value:""}),ce=(e,t)=>ie(he(ie(e),ie(t))),pe=(e,t)=>e.reduce(((e,s)=>Object.assign(Object.assign({},e),{[s]:t[s]})),{}),ve=(e,...t)=>{if(!t.length)return e;const s=t.shift();if(v(e)&&v(s))for(const t in s)v(s[t])?(e[t]||(e=Object.assign(Object.assign({},e),{[t]:{}})),e[t]=ve(e[t],s[t])):e=Object.assign(Object.assign({},e),{[t]:s[t]});return ve(e,...t)};class xe{}var de,me,fe,ge,ye;xe.DESCRIPTION=Symbol("DESCRIPTION"),xe.ERROR=Symbol("ERROR"),xe.NAME=Symbol("NAME"),xe.REQUIRED=Symbol("REQUIRED"),xe.SOURCE=Symbol("SOURCE"),xe.TYPE=Symbol("TYPE");class be{constructor(e){this[de]="",this[me]="",this[fe]="",this[ge]="any",this[ye]=!1,this.rules=[],this.custom=[],this[xe.TYPE]=e}description(e){return this[xe.DESCRIPTION]=e,this}empty(e){const t=e;return this.unshift((({value:e})=>{const s=o(e);return{break:!s,value:s?e:h(t)?t():t}}))}equal(e,t){const s=this.fn(e);return this.push((({value:e,context:r})=>{const n=s({value:e,context:r});return e==n?{value:e}:this.invalid(`.equal(${n})`,t)}))}error(e){return d(e)&&(this[xe.ERROR]=e),this}filter(...e){const t=e;return this.unshift((({value:e})=>{const s=-1==t.indexOf(e);return{break:!s,value:s?e:void 0}}))}fn(e){return h(e)?e:()=>e}from(e){return this[xe.SOURCE]=e,this}invalid(e,t){return e=`[${this[xe.TYPE]}]${e}`,{error:this[xe.ERROR]?this[xe.ERROR]:this[xe.NAME]?this[xe.NAME]+":"+e:e,message:t}}parse(){return this.unshift((({value:e})=>({value:e})))}push(e){return this.rules.push(e),this}required(e){return this[xe.REQUIRED]=!0,this.unshift((({value:t})=>o(t)?{value:t}:this.invalid(".required",e)))}test(e){return!d(this.validate(e).error)}testAsync(e){return Q(this,void 0,void 0,(function*(){return!d((yield this.validateAsync(e)).error)}))}unshift(e){return this.rules.unshift(e),this}validate(e,t){var s;if(this.custom.length)return this.invalid("[async]");let r={value:e};for(let e=0;e<this.rules.length;e++){if(r=this.rules[e]({value:r.value,context:t}),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(e,t){return Q(this,void 0,void 0,(function*(){let s=this.validate(e,t);if(s.error)return{error:s.error};for(let e=0;e<this.custom.length;e++){if(s=yield this.custom[e]({value:s.value}),s.error)return{error:s.error};if(s.break)return{value:s.value}}return{value:s.value}}))}}de=xe.NAME,me=xe.DESCRIPTION,xe.SOURCE,fe=xe.ERROR,ge=xe.TYPE,ye=xe.REQUIRED;class Ee extends be{constructor(e){super("array"),this.push((({value:t})=>i(t)?{value:t}:this.invalid("",e)))}between(e,t,s){return this.min(e,s),this.max(t,s)}items(e,t){const s=e;return s?this.push((({value:e})=>{s[xe.NAME]="";for(let r=0;r<e.length;r++){const{error:n,value:i}=s.validate(e[r],e);if(n)return this.invalid("< "+n+"["+r+"] >",t);e[r]=i}return{value:e}})):this}length(e,t){const s=e;return this.push((({value:e})=>e.length==s?{value:e}:this.invalid(".length("+s+")",t)))}max(e,t){const s=e;return this.push((({value:e})=>e.length<=s?{value:e}:this.invalid(".max("+s+")",t)))}min(e,t){const s=e;return this.push((({value:e})=>e.length>=s?{value:e}:this.invalid(".min("+s+")",t)))}}class we extends be{constructor(e){super("boolean"),this.push((({value:t})=>a(t)?{value:t}:this.invalid("",e)))}parse(){return this.unshift((({value:e})=>({value:o(e)?g(e):e})))}}class Se extends be{constructor(e){super("date"),this.push((({value:t})=>d(t)&&t.length>=9&&!isNaN(new Date(t).getTime())?{value:t}:this.invalid("",e)))}format(e){const t=e;return this.push((({value:e})=>({value:F(t,new Date(e))})))}parse(){return this.unshift((({value:e})=>({value:new Date(d(e)&&e.length<=10?`${e} 12:00`:e)})))}}class Re extends be{constructor(e){super("number"),this.push((({value:t})=>u(t)?{value:t}:this.invalid("",e)))}between(e,t,s){return this.min(e,s),this.max(t,s)}float(e){return this.push((({value:t})=>l(t)?{value:t}:this.invalid(".float",e)))}integer(e){return this.push((({value:t})=>c(t)?{value:t}:this.invalid(".integer",e)))}max(e,t){const s=this.fn(e);return this.push((({value:e,context:r})=>{const n=s({value:e,context:r});return e<=n?{value:e}:this.invalid(`.max(${n})`,t)}))}min(e,t){const s=this.fn(e);return this.push((({value:e,context:r})=>{const n=s({value:e,context:r});return e>=n?{value:e}:this.invalid(`.min(${n})`,t)}))}parse(){return this.unshift((({value:e})=>({value:o(e)?parseFloat(e.toString()):e})))}}class Ce extends be{constructor(e){super("object"),this.push((({value:t})=>p(t)?{value:t}:this.invalid("",e)))}keys(e,t){const s=e;return s?this.push((({value:e})=>{const r=[],n={};return Object.keys(s).forEach((i=>{var a;const u=s[i];u[xe.NAME]=null!==(a=u[xe.SOURCE])&&void 0!==a?a:i;const{error:l,message:h,value:c}=u.validate(e[u[xe.NAME]],n);!t&&h&&(t=h),l&&r.push(l),o(c)&&(n[i]=c)})),r.length?this.invalid("{ "+r.join(", ")+" }",t):{value:n}})):this}parse(e){return this.unshift((({value:t})=>{if(!p(t))try{t=JSON.parse(t)}catch(t){return this.invalid("",e)}return{value:t}}))}}class Oe extends be{constructor(e){super("string"),this.push((({value:t})=>d(t)?{value:t}:this.invalid("",e)))}between(e,t,s){return this.min(e,s),this.max(t,s)}email(e){const t=/^[\w-\\.]+@([\w-]+\.)+[\w-]{2,4}$/i;return this.push((({value:s})=>t.test(s)?{value:s}:this.invalid(".email",e)))}length(e,t){const s=this.fn(e);return this.push((({value:e,context:r})=>{const n=s({value:e,context:r});return e.length==n?{value:e}:this.invalid(`.length(${n})`,t)}))}lowerCase(){return this.push((({value:e})=>({value:e.toLowerCase()})))}lowerCamelCase(){return this.push((({value:e})=>({value:K(e)})))}max(e,t){const s=this.fn(e);return this.push((({value:e,context:r})=>{const n=s({value:e,context:r});return e.length<=n?{value:e}:this.invalid(`.max(${n})`,t)}))}mask(e){const t=this.fn(e);return this.push((({value:e,context:s})=>({value:he(t({value:e,context:s}),e)})))}min(e,t){const s=this.fn(e);return this.push((({value:e,context:r})=>{const n=s({value:e,context:r});return e.length>=n?{value:e}:this.invalid(`.min(${n})`,t)}))}parse(){return this.unshift((({value:e})=>({value:p(e)?JSON.stringify(e):o(e)?e.toString():e})))}required(e){return this[xe.REQUIRED]=!0,this.push((({value:t})=>t.length?{value:t}:this.invalid(".required",e)))}regex(e,t){return this.push((({value:s})=>e.test(s)?{value:s}:this.invalid(".regex",t)))}replace(e,t){const s=this.fn(e);return this.push((({value:e,context:r})=>({value:e.replace(s({value:e,context:r}),((...e)=>h(t)?t(...e):t))})))}trim(){return this.push((({value:e})=>({value:e.trim()})))}upperCase(){return this.push((({value:e})=>({value:e.toUpperCase()})))}upperCamelCase(){return this.push((({value:e})=>({value:ae(e)})))}}class Me{static array(e,t){return new Ee(t).items(e)}static boolean(e){return new we(e)}static date(e){return new Se(e)}static number(e){return new Re(e)}static object(e,t){return new Ce(t).keys(e)}static ref(e,t){return({context:s})=>s&&o(s[e])?s[e]:t}static string(e){return new Oe(e)}test(e,...t){return!d(Me.validate(e,...t).error)}testAsync(e,...t){return Q(this,void 0,void 0,(function*(){return!d((yield Me.validateAsync(e,...t)).error)}))}static validate(e,...t){let s={value:e};for(let e=0;e<t.length;e++)if(s=t[e].validate(s.value),s.error)return{value:s.value,error:s.error};return{value:s.value}}static validateAsync(e,...t){return Q(this,void 0,void 0,(function*(){let s={value:e};for(let e=0;e<t.length;e++)if(s=yield t[e].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(e,t){const s=this.events.get(e);return s?s.push(t):this.events.set(e,[t]),{dispose:()=>this.off(e,t)}}once(e,t){const s=r=>{t(r),this.off(e,s)};return this.on(e,s),{dispose:()=>this.off(e,s)}}off(e,t){const s=this.events.get(e);if(t){if(s){const e=s.indexOf(t);e>=0&&s.splice(e,1)}}else this.events.set(e,[])}emit(e,t){const s=this.events.get(e);s&&s.forEach((e=>e(t)))}},exports.Hash=j,exports.RandomString=ne,exports.Validation=Me,exports.ValidationBase=be,exports.ValidationKeys=xe,exports.allowed=pe,exports.cache=()=>{const e=[],t=[];return s=>{let r=e.indexOf(s);return-1==r&&(e.push(s),t.push({}),r=t.length-1),t[r]}},exports.camelCase=W,exports.chunkArray=(e,t)=>{const s=[];for(let r=0;r<e.length;r+=t)s.push(e.slice(r,r+t));return s},exports.clamp=e,exports.colorPalette=(e,t)=>E(null!=t?t:k,(t=>0==t?e:t>0?M(e,t):O(e,1- -1*t))),exports.compareArray=(e,t)=>e.length===t.length&&e.every(((e,s)=>e===t[s])),exports.countArray=e=>{const t={};return e.forEach((e=>{const s=e.toString();t[s]=(t[s]||0)+1})),t},exports.cutText=(e,t)=>{if(e.length>t){const s=e.substring(0,t).split(" ");return s.pop(),s.join(" ")+"..."}return e},exports.dateFormat=F,exports.dateRange=(e,t)=>{const s=new Date(e),r=[];for(;e<t;)s.setDate(s.getDate()+1),r.push(new Date(s));return r},exports.debounce=(e,t)=>{let s;const r=()=>{s&&clearTimeout(s)};return{cancel:r,run(...n){r(),s=setTimeout((()=>e(...n)),t)}}},exports.decodeHTML=e=>e.replace(G,((e,t)=>X[t])).replace(/&#(\d+);/gi,((e,t)=>String.fromCharCode(parseInt(t,10)))),exports.denied=(e,t)=>pe(Object.keys(t).filter((t=>-1==e.indexOf(t))),t),exports.each=(e,t,s)=>i(e)?y(e,t,s):p(e)?b(e,t,s):e,exports.encodeHTML=e=>e.replace(/[^0-9A-Za-z ]/g,(e=>"&#"+e.charCodeAt(0)+";")),exports.forEachAsync=(e,t,s)=>Q(void 0,void 0,void 0,(function*(){yield Promise.allSettled(e.map(((r,n)=>t.call(s,r,n,e)))).catch(Z)})),exports.forEachIndex=y,exports.forEachKey=b,exports.forEachSeries=(e,t,s)=>Q(void 0,void 0,void 0,(function*(){for(let r=0;r<e.length;r++)yield t.call(s,e[r],r,e).catch(Z)})),exports.forLoop=(e,t,s)=>{for(let r=1;r<=e&&!1!==t.call(s,r,e);r++);return e},exports.hexToRgb=S,exports.hslToRgb=(e,t,s)=>{e/=60;const r=(1-Math.abs(2*s-1))*t,n=r*(1-Math.abs(e%2-1));let i=[0,0,0];e<=1?i=[r,n,0]:e<=2?i=[n,r,0]:e<=3?i=[0,r,n]:e<=4?i=[0,n,r]:e<=5?i=[n,0,r]:e<=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=e=>/^[\w]$/.test(e),exports.isDate=e=>"date"==n(e),exports.isDef=o,exports.isDigit=ee,exports.isEmpty=B,exports.isFalse=e=>!V(e),exports.isFloat=l,exports.isFunction=h,exports.isInteger=c,exports.isLetter=te,exports.isMap=e=>"map"==n(e),exports.isNotEmpty=e=>!B(e),exports.isNull=e=>null===e,exports.isNumber=u,exports.isObject=p,exports.isPlainObject=v,exports.isRegExp=e=>"regexp"==n(e),exports.isScalar=e=>-1!=x.indexOf(n(e)),exports.isSet=e=>"set"==n(e),exports.isSpecialChar=se,exports.isString=d,exports.isSymbol=e=>"symbol"==typeof e,exports.isTrue=V,exports.isUndefined=m,exports.lerp=(t,s,r)=>t+(s-t)*e(r,0,1),exports.loop=(e,t)=>{let s=!1;const r=()=>Q(void 0,void 0,void 0,(function*(){s&&(yield e(),setTimeout(r,t))}));return{start(){s||(s=!0,r())},stop(){s=!1}}},exports.lowerCamelCase=K,exports.map=E,exports.mask=he,exports.maskMoney=(e,t,s)=>(s++,t=parseInt((t||"0").replace(/\D/g,"")).toString(),ce(e,t.length<s?("0".repeat(s)+t).slice(-1*s):t)),exports.maskReverse=ce,exports.maskTest=(e,t)=>e.length==he(e,t).length,exports.merge=ve,exports.msToString=e=>{const t=[];return H.forEach((s=>{const r=Y[s],n=(e-e%r)/r;n&&(e-=n*r,t.push(n.toString()+s))})),t.join(" ")},exports.noop=Z,exports.parseMs=e=>{const t=/(-?(?:\d+)?\.?\d+) *(ms|s|m|h|d|w|y)/gm;let s,r=0;for(;null!==(s=t.exec(e));)s.index===t.lastIndex&&t.lastIndex++,r+=parseFloat(s[1])*Y[s[2]]||0;return r},exports.parseSize=e=>{if(u(e))return e+"px";const t=(e=>/(-?(?:\d+)?\.?\d+) *(px|%|cm|mm|in|pt|pc|en|ex|ch|rem|vw|vh|vmin|vmax)*/g.exec(e))(e);return t?parseFloat(t[1])+(t[2]||"px"):"0px"},exports.random=t,exports.randomCase=e=>e.split("").map((e=>Math.random()<.5?e.toUpperCase():e.toLowerCase())).join(""),exports.randomElement=e=>e.length?e[t(0,e.length-1)]:null,exports.rangeArray=(e,t,s=1)=>Array.from({length:(t-e)/s+1},((t,r)=>e+r*s)),exports.rgbToHex=C,exports.rgbToHsl=(e,t,s)=>{const[r,n,i]=((...e)=>e.map((e=>e/255)))(e,t,s),a=Math.max(r,n,i),o=Math.min(r,n,i),u=a-o,l=(o+a)/2;return[60*A(u,a,r,n,i),I(u,l),l]},exports.shadeColor=O,exports.shuffleArray=s,exports.shuffleString=re,exports.simpleID=()=>T()+N(),exports.sleep=e=>new Promise((t=>setTimeout(t,e))),exports.stringReverse=ie,exports.tintColor=M,exports.toArray=e=>i(e)?e:o(e)?[e]:[],exports.toBool=g,exports.type=n,exports.uniqueArray=e=>e.filter(((e,t,s)=>s.indexOf(e)===t)),exports.uniqueID=()=>P()+P()+P()+P(),exports.upperCamelCase=ae,exports.uuidv4=()=>U()+"-"+N()+"-4"+T()+"-"+N()+"-"+(U()+N());
7
+ "use strict";const e=(e,t,s)=>Math.max(t,Math.min(s,e)),t=(e,t)=>Math.floor(Math.random()*(t-e+1)+e),s=e=>{for(let s=e.length-1;s>0;s--){const r=t(0,s);[e[s],e[r]]=[e[r],e[s]]}return e},r={},n=e=>null==e?"null":r[r.toString.call(e)]||"object";["Array","AsyncFunction","Boolean","Date","Function","Map","Number","Object","RegExp","Set","String"].forEach((e=>r["[object "+e+"]"]=e.toLowerCase()));const i=e=>"array"==n(e),a=e=>"boolean"==n(e),o=e=>"null"!=n(e),u=e=>"number"==n(e),l=e=>u(e)&&!!(e%1),h=e=>"function"==typeof e,c=e=>u(e)&&!(e%1),p=e=>"object"==n(e),v=e=>p(e)&&e.constructor===Object,x=["boolean","number","string"],d=e=>"string"==typeof e,m=e=>void 0===e,f=[1,"1",!0,"true"],g=e=>-1!=f.indexOf(e),y=(e,t,s)=>{for(let r=0;r<e.length&&!1!==t.call(s,e[r],r,e);r++);return e},b=(e,t,s)=>{let r="";const n=Object.keys(e);for(let i=0;i<n.length&&(r=n[i],!1!==t.call(s,e[r],r,e));i++);return e},E=(e,t,s)=>Object.fromEntries(Object.entries(e).map((([r,n])=>[r,t.call(s,n,r,e)]))),w=e=>parseInt(null!=e?e:"0",16)||0,S=e=>{var t;return(null===(t=e.replace(/^#/,"").match(/.{1,2}/g))||void 0===t?void 0:t.map(w))||[]},R=e=>("0"+e.toString(16)).slice(-2),C=(e,t,s)=>"#"+R(e)+R(t)+R(s),O=(t,s)=>{const r=S(t);s=e(s,0,1);const[n,i,a]=r.map((e=>Math.round(e*s)));return C(n,i,a)},M=(t,s)=>{const r=S(t);s=e(s,0,1);const[n,i,a]=r.map((e=>Math.round(e+(255-e)*s)));return C(n,i,a)},A={50:.95,100:.9,200:.75,300:.6,400:.3,500:0,600:-.1,700:-.25,800:-.4,900:-.55,950:-.71},I=(e,t,s,r,n)=>0===e?0:t===s?(r-n)/e%6:t===r?(n-s)/e+2:t===n?(s-r)/e+4:0,k=(e,t)=>0===e?0:e/(1-Math.abs(2*t-1));class j{constructor(e){this.key=this.shuffle(j.dictionary,e,!1)}encrypt(e){return this.shuffle(e,this.key,!1)}decrypt(e){return this.shuffle(e,this.key,!0)}index(e,t,s){return[j.dictionary.indexOf(e[s]),j.dictionary.indexOf(t[s%t.length])]}result(e,t,s){return j.dictionary[(s?e-t+j.dictionary.length:e+t)%j.dictionary.length]}shuffle(e,t,s){let r="";for(let n=0;n<e.length;n++){const[i,a]=this.index(e,t,n);r+=-1===i||-1===a?e[n]:this.result(i,a,s)}return r}}j.dictionary="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";const D=e=>Math.random().toString(16).slice(e),T=()=>D(-3),N=()=>D(-4),U=()=>N()+N(),P=()=>U()+U(),L=e=>("0"+e.toString()).slice(-2),$={"%y":e=>L(e.getFullYear()),"%Y":e=>e.getFullYear().toString(),"%m":e=>L(e.getMonth()+1),"%d":e=>L(e.getDate()),"%H":e=>L(e.getHours()),"%M":e=>L(e.getMinutes()),"%S":e=>L(e.getSeconds())},F=(e,t)=>(t=null!=t?t:new Date,e.replace(/%[yYmdHMS]/g,(e=>$[e]?$[e](t):e.slice(1)))),q=36e5,_=24*q,Y={ms:1,s:1e3,m:6e4,h:q,d:_,w:7*_,y:315576e5},H=["y","d","h","m","s","ms"];function Q(e,t,s,r){return new(s||(s=Promise))((function(n,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function o(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){e.done?n(e.value):function(e){return e instanceof s?e:new s((function(t){t(e)}))}(e.value).then(a,o)}u((r=r.apply(e,t||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;const B=e=>{var t;return 0==(null!==(t=null==e?void 0:e.length)&&void 0!==t?t:0)},z=["",0,"0",null,!1,void 0],V=e=>-1==z.indexOf(e),Z=()=>{},J=(e,t,s)=>t(e.toLowerCase().replace(/\W+/g," ")).replace(/\s/g,null!=s?s:""),K=(e,t)=>J(e,(e=>e.replace(/\s(\w)/g,(e=>e.toUpperCase()))),t),W=K,G=/&(amp|apos|lt|gt|nbsp|quot);/g,X={amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",quot:'"'},ee=e=>/^[\d]$/.test(e),te=e=>/^[A-Za-z]$/.test(e),se=e=>/^[^\w]$/.test(e),re=e=>s(e.split("")).join("");class ne{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 ne).chars()}lower(){return this.hasLower=!0,this}static lower(){return(new ne).lower()}make(e){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(e&&s.length){s=re(s);for(let n=0;n<e;n++)r+=s.charAt(t(0,s.length-1))}return r}numbers(){return this.hasNumbers=!0,this}static numbers(){return(new ne).numbers()}space(){return this.hasSpace=!0,this}static space(){return(new ne).space()}symbols(){return this.hasSymbols=!0,this}static symbols(){return(new ne).symbols()}upper(){return this.hasUpper=!0,this}static upper(){return(new ne).upper()}}const ie=e=>e.split("").reverse().join(""),ae=(e,t)=>J(e,(e=>e.replace(/(\w)(\w*)/g,((e,t,s)=>t.toUpperCase()+s))),t),oe=(e,t)=>t(e.value)?e.value:(e=>(e.maskIndex--,""))(e),ue={"#":e=>e.value,0:e=>oe(e,ee),9:e=>oe(e,ee),A:e=>oe(e,te),Z:e=>oe(e,te),L:e=>oe(e,te).toLowerCase(),U:e=>oe(e,te).toUpperCase(),S:e=>oe(e,se)},le=e=>{e.maskIndex++,e.textIndex++;const{mask:t,maskIndex:s,text:r,textIndex:n}=e;e.key=t[s],e.value=r[n];const{key:i,value:a}=e;return m(i)||m(a)?"":(e=>ue[e.key]?ue[e.key](e):(e.key!=e.value&&e.textIndex--,e.key))(e)+le(e)},he=(e,t)=>le({mask:e,maskIndex:-1,text:t,textIndex:-1,key:"",value:""}),ce=(e,t)=>ie(he(ie(e),ie(t))),pe=(e,t)=>e.reduce(((e,s)=>Object.assign(Object.assign({},e),{[s]:t[s]})),{}),ve=(e,...t)=>{if(!t.length)return e;const s=t.shift();if(v(e)&&v(s))for(const t in s)v(s[t])?(e[t]||(e=Object.assign(Object.assign({},e),{[t]:{}})),e[t]=ve(e[t],s[t])):e=Object.assign(Object.assign({},e),{[t]:s[t]});return ve(e,...t)};class xe{}var de,me,fe,ge,ye;xe.DESCRIPTION=Symbol("DESCRIPTION"),xe.ERROR=Symbol("ERROR"),xe.NAME=Symbol("NAME"),xe.REQUIRED=Symbol("REQUIRED"),xe.SOURCE=Symbol("SOURCE"),xe.TYPE=Symbol("TYPE");class be{constructor(e){this[de]="",this[me]="",this[fe]="",this[ge]="any",this[ye]=!1,this.rules=[],this.custom=[],this[xe.TYPE]=e}description(e){return this[xe.DESCRIPTION]=e,this}empty(e,t=!0){const s=e;return this.unshift((({value:e})=>{const r=o(e);return{stop:t&&!r,value:r?e:h(s)?s():s}}))}equal(e,t){const s=this.fn(e);return this.push((({value:e,context:r})=>{const n=s({value:e,context:r});return e==n?{value:e}:this.invalid(`.equal(${n})`,t)}))}error(e){return d(e)&&(this[xe.ERROR]=e),this}filter(...e){const t=e;return this.unshift((({value:e})=>{const s=-1==t.indexOf(e);return{stop:!s,value:s?e:void 0}}))}fn(e){return h(e)?e:()=>e}from(e){return this[xe.SOURCE]=e,this}invalid(e,t){return e=`[${this[xe.TYPE]}]${e}`,{error:this[xe.ERROR]?this[xe.ERROR]:this[xe.NAME]?this[xe.NAME]+":"+e:e,message:t}}parse(){return this.unshift((({value:e})=>({value:e})))}push(e){return this.rules.push(e),this}required(e){return this[xe.REQUIRED]=!0,this.unshift((({value:t})=>o(t)?{value:t}:this.invalid(".required",e)))}test(e){return!d(this.validate(e).error)}testAsync(e){return Q(this,void 0,void 0,(function*(){return!d((yield this.validateAsync(e)).error)}))}unshift(e){return this.rules.unshift(e),this}validate(e,t){var s;if(this.custom.length)return this.invalid("[async]");let r={value:e};for(let e=0;e<this.rules.length;e++){if(r=this.rules[e]({value:r.value,context:t}),null===(s=r.error)||void 0===s?void 0:s.length)return Object.assign({error:r.error},r.message?{message:r.message}:{});if(r.stop)return{value:r.value}}return{value:r.value}}validateAsync(e,t){return Q(this,void 0,void 0,(function*(){let s=this.validate(e,t);if(s.error)return{error:s.error};for(let e=0;e<this.custom.length;e++){if(s=yield this.custom[e]({value:s.value}),s.error)return{error:s.error};if(s.stop)return{value:s.value}}return{value:s.value}}))}}de=xe.NAME,me=xe.DESCRIPTION,xe.SOURCE,fe=xe.ERROR,ge=xe.TYPE,ye=xe.REQUIRED;class Ee extends be{constructor(e){super("array"),this.push((({value:t})=>i(t)?{value:t}:this.invalid("",e)))}between(e,t,s){return this.min(e,s),this.max(t,s)}items(e,t){const s=e;return s?this.push((({value:e})=>{s[xe.NAME]="";for(let r=0;r<e.length;r++){const{error:n,value:i}=s.validate(e[r],e);if(n)return this.invalid("< "+n+"["+r+"] >",t);e[r]=i}return{value:e}})):this}length(e,t){const s=e;return this.push((({value:e})=>e.length==s?{value:e}:this.invalid(".length("+s+")",t)))}max(e,t){const s=e;return this.push((({value:e})=>e.length<=s?{value:e}:this.invalid(".max("+s+")",t)))}min(e,t){const s=e;return this.push((({value:e})=>e.length>=s?{value:e}:this.invalid(".min("+s+")",t)))}}class we extends be{constructor(e){super("boolean"),this.push((({value:t})=>a(t)?{value:t}:this.invalid("",e)))}parse(){return this.unshift((({value:e})=>({value:o(e)?g(e):e})))}}class Se extends be{constructor(e){super("date"),this.push((({value:t})=>d(t)&&t.length>=9&&!isNaN(new Date(t).getTime())?{value:t}:this.invalid("",e)))}format(e){const t=e;return this.push((({value:e})=>({value:F(t,new Date(e))})))}parse(){return this.unshift((({value:e})=>({value:new Date(d(e)&&e.length<=10?`${e} 12:00`:e)})))}}class Re extends be{constructor(e){super("number"),this.push((({value:t})=>u(t)?{value:t}:this.invalid("",e)))}between(e,t,s){return this.min(e,s),this.max(t,s)}float(e){return this.push((({value:t})=>l(t)?{value:t}:this.invalid(".float",e)))}integer(e){return this.push((({value:t})=>c(t)?{value:t}:this.invalid(".integer",e)))}max(e,t){const s=this.fn(e);return this.push((({value:e,context:r})=>{const n=s({value:e,context:r});return e<=n?{value:e}:this.invalid(`.max(${n})`,t)}))}min(e,t){const s=this.fn(e);return this.push((({value:e,context:r})=>{const n=s({value:e,context:r});return e>=n?{value:e}:this.invalid(`.min(${n})`,t)}))}parse(){return this.unshift((({value:e})=>({value:o(e)?parseFloat(e.toString()):e})))}}class Ce extends be{constructor(e){super("object"),this.push((({value:t})=>p(t)?{value:t}:this.invalid("",e)))}keys(e,t){const s=e;return s?this.push((({value:e})=>{const r=[],n={};return Object.keys(s).forEach((i=>{var a;const u=s[i];u[xe.NAME]=null!==(a=u[xe.SOURCE])&&void 0!==a?a:i;const{error:l,message:h,value:c}=u.validate(e[u[xe.NAME]],n);!t&&h&&(t=h),l&&r.push(l),o(c)&&(n[i]=c)})),r.length?this.invalid("{ "+r.join(", ")+" }",t):{value:n}})):this}parse(e){return this.unshift((({value:t})=>{if(!p(t))try{t=JSON.parse(t)}catch(t){return this.invalid("",e)}return{value:t}}))}}class Oe extends be{constructor(e){super("string"),this.push((({value:t})=>d(t)?{value:t}:this.invalid("",e)))}between(e,t,s){return this.min(e,s),this.max(t,s)}email(e){const t=/^[\w-\\.]+@([\w-]+\.)+[\w-]{2,4}$/i;return this.push((({value:s})=>t.test(s)?{value:s}:this.invalid(".email",e)))}length(e,t){const s=this.fn(e);return this.push((({value:e,context:r})=>{const n=s({value:e,context:r});return e.length==n?{value:e}:this.invalid(`.length(${n})`,t)}))}lowerCase(){return this.push((({value:e})=>({value:e.toLowerCase()})))}lowerCamelCase(){return this.push((({value:e})=>({value:K(e)})))}max(e,t){const s=this.fn(e);return this.push((({value:e,context:r})=>{const n=s({value:e,context:r});return e.length<=n?{value:e}:this.invalid(`.max(${n})`,t)}))}mask(e){const t=this.fn(e);return this.push((({value:e,context:s})=>({value:he(t({value:e,context:s}),e)})))}min(e,t){const s=this.fn(e);return this.push((({value:e,context:r})=>{const n=s({value:e,context:r});return e.length>=n?{value:e}:this.invalid(`.min(${n})`,t)}))}parse(){return this.unshift((({value:e})=>({value:p(e)?JSON.stringify(e):o(e)?e.toString():e})))}required(e){return this[xe.REQUIRED]=!0,this.push((({value:t})=>t.length?{value:t}:this.invalid(".required",e)))}regex(e,t){return this.push((({value:s})=>e.test(s)?{value:s}:this.invalid(".regex",t)))}replace(e,t){const s=this.fn(e);return this.push((({value:e,context:r})=>({value:e.replace(s({value:e,context:r}),((...e)=>h(t)?t(...e):t))})))}trim(){return this.push((({value:e})=>({value:e.trim()})))}upperCase(){return this.push((({value:e})=>({value:e.toUpperCase()})))}upperCamelCase(){return this.push((({value:e})=>({value:ae(e)})))}}class Me{static array(e,t){return new Ee(t).items(e)}static boolean(e){return new we(e)}static date(e){return new Se(e)}static number(e){return new Re(e)}static object(e,t){return new Ce(t).keys(e)}static ref(e,t){return({context:s})=>s&&o(s[e])?s[e]:t}static string(e){return new Oe(e)}test(e,...t){return!d(Me.validate(e,...t).error)}testAsync(e,...t){return Q(this,void 0,void 0,(function*(){return!d((yield Me.validateAsync(e,...t)).error)}))}static validate(e,...t){let s={value:e};for(let e=0;e<t.length;e++)if(s=t[e].validate(s.value),s.error)return{value:s.value,error:s.error};return{value:s.value}}static validateAsync(e,...t){return Q(this,void 0,void 0,(function*(){let s={value:e};for(let e=0;e<t.length;e++)if(s=yield t[e].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(e,t){const s=this.events.get(e);return s?s.push(t):this.events.set(e,[t]),{dispose:()=>this.off(e,t)}}once(e,t){const s=r=>{t(r),this.off(e,s)};return this.on(e,s),{dispose:()=>this.off(e,s)}}off(e,t){const s=this.events.get(e);if(t){if(s){const e=s.indexOf(t);e>=0&&s.splice(e,1)}}else this.events.set(e,[])}emit(e,t){const s=this.events.get(e);s&&s.forEach((e=>e(t)))}},exports.Hash=j,exports.RandomString=ne,exports.Validation=Me,exports.ValidationBase=be,exports.ValidationKeys=xe,exports.allowed=pe,exports.cache=()=>{const e=[],t=[];return s=>{let r=e.indexOf(s);return-1==r&&(e.push(s),t.push({}),r=t.length-1),t[r]}},exports.camelCase=W,exports.chunkArray=(e,t)=>{const s=[];for(let r=0;r<e.length;r+=t)s.push(e.slice(r,r+t));return s},exports.clamp=e,exports.colorPalette=(e,t)=>E(null!=t?t:A,(t=>0==t?e:t>0?M(e,t):O(e,1- -1*t))),exports.compareArray=(e,t)=>e.length===t.length&&e.every(((e,s)=>e===t[s])),exports.countArray=e=>{const t={};return e.forEach((e=>{const s=e.toString();t[s]=(t[s]||0)+1})),t},exports.cutText=(e,t)=>{if(e.length>t){const s=e.substring(0,t).split(" ");return s.pop(),s.join(" ")+"..."}return e},exports.dateFormat=F,exports.dateRange=(e,t)=>{const s=new Date(e),r=[];for(;e<t;)s.setDate(s.getDate()+1),r.push(new Date(s));return r},exports.debounce=(e,t)=>{let s;const r=()=>{s&&clearTimeout(s)};return{cancel:r,run(...n){r(),s=setTimeout((()=>e(...n)),t)}}},exports.decodeHTML=e=>e.replace(G,((e,t)=>X[t])).replace(/&#(\d+);/gi,((e,t)=>String.fromCharCode(parseInt(t,10)))),exports.denied=(e,t)=>pe(Object.keys(t).filter((t=>-1==e.indexOf(t))),t),exports.each=(e,t,s)=>i(e)?y(e,t,s):p(e)?b(e,t,s):e,exports.encodeHTML=e=>e.replace(/[^0-9A-Za-z ]/g,(e=>"&#"+e.charCodeAt(0)+";")),exports.forEachAsync=(e,t,s)=>Q(void 0,void 0,void 0,(function*(){yield Promise.allSettled(e.map(((r,n)=>t.call(s,r,n,e)))).catch(Z)})),exports.forEachIndex=y,exports.forEachKey=b,exports.forEachSeries=(e,t,s)=>Q(void 0,void 0,void 0,(function*(){for(let r=0;r<e.length;r++)yield t.call(s,e[r],r,e).catch(Z)})),exports.forLoop=(e,t,s)=>{for(let r=1;r<=e&&!1!==t.call(s,r,e);r++);return e},exports.hexToRgb=S,exports.hslToRgb=(e,t,s)=>{e/=60;const r=(1-Math.abs(2*s-1))*t,n=r*(1-Math.abs(e%2-1));let i=[0,0,0];e<=1?i=[r,n,0]:e<=2?i=[n,r,0]:e<=3?i=[0,r,n]:e<=4?i=[0,n,r]:e<=5?i=[n,0,r]:e<=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=e=>/^[\w]$/.test(e),exports.isDate=e=>"date"==n(e),exports.isDef=o,exports.isDigit=ee,exports.isEmpty=B,exports.isFalse=e=>!V(e),exports.isFloat=l,exports.isFunction=h,exports.isInteger=c,exports.isLetter=te,exports.isMap=e=>"map"==n(e),exports.isNotEmpty=e=>!B(e),exports.isNull=e=>null===e,exports.isNumber=u,exports.isObject=p,exports.isPlainObject=v,exports.isRegExp=e=>"regexp"==n(e),exports.isScalar=e=>-1!=x.indexOf(n(e)),exports.isSet=e=>"set"==n(e),exports.isSpecialChar=se,exports.isString=d,exports.isSymbol=e=>"symbol"==typeof e,exports.isTrue=V,exports.isUndefined=m,exports.lerp=(t,s,r)=>t+(s-t)*e(r,0,1),exports.loop=(e,t)=>{let s=!1;const r=()=>Q(void 0,void 0,void 0,(function*(){s&&(yield e(),setTimeout(r,t))}));return{start(){s||(s=!0,r())},stop(){s=!1}}},exports.lowerCamelCase=K,exports.map=E,exports.mask=he,exports.maskMoney=(e,t,s)=>(s++,t=parseInt((t||"0").replace(/\D/g,"")).toString(),ce(e,t.length<s?("0".repeat(s)+t).slice(-1*s):t)),exports.maskReverse=ce,exports.maskTest=(e,t)=>e.length==he(e,t).length,exports.merge=ve,exports.msToString=e=>{const t=[];return H.forEach((s=>{const r=Y[s],n=(e-e%r)/r;n&&(e-=n*r,t.push(n.toString()+s))})),t.join(" ")},exports.noop=Z,exports.parseMs=e=>{const t=/(-?(?:\d+)?\.?\d+) *(ms|s|m|h|d|w|y)/gm;let s,r=0;for(;null!==(s=t.exec(e));)s.index===t.lastIndex&&t.lastIndex++,r+=parseFloat(s[1])*Y[s[2]]||0;return r},exports.parseSize=e=>{if(u(e))return e+"px";const t=(e=>/(-?(?:\d+)?\.?\d+) *(px|%|cm|mm|in|pt|pc|en|ex|ch|rem|vw|vh|vmin|vmax)*/g.exec(e))(e);return t?parseFloat(t[1])+(t[2]||"px"):"0px"},exports.random=t,exports.randomCase=e=>e.split("").map((e=>Math.random()<.5?e.toUpperCase():e.toLowerCase())).join(""),exports.randomElement=e=>e.length?e[t(0,e.length-1)]:null,exports.rangeArray=(e,t,s=1)=>Array.from({length:(t-e)/s+1},((t,r)=>e+r*s)),exports.rgbToHex=C,exports.rgbToHsl=(e,t,s)=>{const[r,n,i]=((...e)=>e.map((e=>e/255)))(e,t,s),a=Math.max(r,n,i),o=Math.min(r,n,i),u=a-o,l=(o+a)/2;return[60*I(u,a,r,n,i),k(u,l),l]},exports.shadeColor=O,exports.shuffleArray=s,exports.shuffleString=re,exports.simpleID=()=>T()+N(),exports.sleep=e=>new Promise((t=>setTimeout(t,e))),exports.stringReverse=ie,exports.tintColor=M,exports.toArray=e=>i(e)?e:o(e)?[e]:[],exports.toBool=g,exports.type=n,exports.uniqueArray=e=>e.filter(((e,t,s)=>s.indexOf(e)===t)),exports.uniqueID=()=>P()+P()+P()+P(),exports.upperCamelCase=ae,exports.uuidv4=()=>U()+"-"+N()+"-4"+T()+"-"+N()+"-"+(U()+N());
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @andrewcaires/utils.js v0.4.6
2
+ * @andrewcaires/utils.js v0.4.7
3
3
  * JavaScript utility library for web and nodejs development
4
4
  * (c) 2025 Andrew Caires
5
5
  * @license: MIT
@@ -291,10 +291,10 @@ declare class ValidationBase<T = any> {
291
291
  private custom;
292
292
  constructor(type: string);
293
293
  description(value: string): this;
294
- empty(value?: T | TypeCallbackFunction<T>): this;
294
+ empty(value?: T | TypeCallbackFunction<T>, stop?: boolean): this;
295
295
  equal(value: T | IValidationFunction<T>, message?: string): this;
296
296
  error(value?: string): this;
297
- filter(...values: Array<any>): this;
297
+ filter(...values: Array<T>): this;
298
298
  protected fn<T = any>(value: T | TypeCallbackFunction<T>): TypeCallbackFunction<T>;
299
299
  from(value: string): this;
300
300
  protected invalid(error: string, message?: string): IValidationOutput<T>;
@@ -309,11 +309,11 @@ declare class ValidationBase<T = any> {
309
309
  }
310
310
 
311
311
  interface IValidationOutput<T = any> {
312
- break?: boolean;
313
312
  context?: any;
314
313
  error?: string;
315
314
  message?: string;
316
315
  self?: ValidationBase<T>;
316
+ stop?: boolean;
317
317
  value?: T;
318
318
  }
319
319
 
package/dist/index.esm.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /*!
2
- * @andrewcaires/utils.js v0.4.6
2
+ * @andrewcaires/utils.js v0.4.7
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 r=[];for(let s=0;s<t.length;s+=e)r.push(t.slice(s,s+e));return r},e=(t,e)=>t.length===e.length&&t.every(((t,r)=>t===e[r])),r=t=>{const e={};return t.forEach((t=>{const r=t.toString();e[r]=(e[r]||0)+1})),e},s=(t,e,r)=>Math.max(e,Math.min(r,t)),n=(t,e,r)=>t+(e-t)*s(r,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,r=1)=>Array.from({length:(e-t)/r+1},((e,s)=>t+s*r)),l=t=>{for(let e=t.length-1;e>0;e--){const r=i(0,e);[t[e],t[r]]=[t[r],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),p=t=>"date"==o(t),d=t=>"null"!=o(t),f=t=>"number"==o(t),m=t=>f(t)&&!!(t%1),g=t=>"function"==typeof t,x=t=>f(t)&&!(t%1),y=t=>"map"==o(t),b=t=>null===t,w=t=>"object"==o(t),E=t=>w(t)&&t.constructor===Object,S=t=>"regexp"==o(t),O=["boolean","number","string"],R=t=>-1!=O.indexOf(o(t)),C=t=>"set"==o(t),M=t=>"string"==typeof t,k=t=>"symbol"==typeof t,I=t=>void 0===t,j=t=>c(t)?t:d(t)?[t]:[],A=t=>t.filter(((t,e,r)=>r.indexOf(t)===e)),D=[1,"1",!0,"true"],N=t=>-1!=D.indexOf(t),U=()=>{const t=[],e=[];return r=>{let s=t.indexOf(r);return-1==s&&(t.push(r),e.push({}),s=e.length-1),e[s]}},T=(t,e,r)=>{for(let s=0;s<t.length&&!1!==e.call(r,t[s],s,t);s++);return t},P=(t,e,r)=>{let s="";const n=Object.keys(t);for(let i=0;i<n.length&&(s=n[i],!1!==e.call(r,t[s],s,t));i++);return t},$=(t,e,r)=>c(t)?T(t,e,r):w(t)?P(t,e,r):t,_=(t,e,r)=>{for(let s=1;s<=t&&!1!==e.call(r,s,t);s++);return t},L=(t,e,r)=>Object.fromEntries(Object.entries(t).map((([s,n])=>[s,e.call(r,n,s,t)]))),Y=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(Y))||[]},F=t=>("0"+t.toString(16)).slice(-2),Q=(t,e,r)=>"#"+F(t)+F(e)+F(r),H=(t,e)=>{const r=q(t);e=s(e,0,1);const[n,i,a]=r.map((t=>Math.round(t*e)));return Q(n,i,a)},Z=(t,e)=>{const r=q(t);e=s(e,0,1);const[n,i,a]=r.map((t=>Math.round(t+(255-t)*e)));return Q(n,i,a)},z={50:.95,100:.9,200:.75,300:.6,400:.3,500:0,600:-.1,700:-.25,800:-.4,900:-.55,950:-.71},J=(t,e)=>L(null!=e?e:z,(e=>0==e?t:e>0?Z(t,e):H(t,1- -1*e))),B=(t,e,r)=>{t/=60;const s=(1-Math.abs(2*r-1))*e,n=s*(1-Math.abs(t%2-1));let i=[0,0,0];t<=1?i=[s,n,0]:t<=2?i=[n,s,0]:t<=3?i=[0,s,n]:t<=4?i=[0,n,s]:t<=5?i=[n,0,s]:t<=6&&(i=[s,0,n]);const a=r-.5*s;return[Math.round(255*(i[0]+a)),Math.round(255*(i[1]+a)),Math.round(255*(i[2]+a))]},W=(t,e,r,s,n)=>0===t?0:e===r?(s-n)/t%6:e===s?(n-r)/t+2:e===n?(r-s)/t+4:0,G=(t,e)=>0===t?0:t/(1-Math.abs(2*e-1)),K=(t,e,r)=>{const[s,n,i]=((...t)=>t.map((t=>t/255)))(t,e,r),a=Math.max(s,n,i),u=Math.min(s,n,i),l=a-u,h=(u+a)/2;return[60*W(l,a,s,n,i),G(l,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,r){return[V.dictionary.indexOf(t[r]),V.dictionary.indexOf(e[r%e.length])]}result(t,e,r){return V.dictionary[(r?t-e+V.dictionary.length:t+e)%V.dictionary.length]}shuffle(t,e,r){let s="";for(let n=0;n<t.length;n++){const[i,a]=this.index(t,e,n);s+=-1===i||-1===a?t[n]:this.result(i,a,r)}return s}}V.dictionary="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";const X=t=>Math.random().toString(16).slice(t),tt=()=>X(-3),et=()=>X(-4),rt=()=>et()+et(),st=()=>rt()+rt(),nt=()=>tt()+et(),it=()=>st()+st()+st()+st(),at=()=>rt()+"-"+et()+"-4"+tt()+"-"+et()+"-"+(rt()+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 r=new Date(t),s=[];for(;t<e;)r.setDate(r.getDate()+1),s.push(new Date(r));return s},ct=36e5,vt=24*ct,pt={ms:1,s:1e3,m:6e4,h:ct,d:vt,w:7*vt,y:315576e5},dt=["y","d","h","m","s","ms"],ft=t=>{const e=[];return dt.forEach((r=>{const s=pt[r],n=(t-t%s)/s;n&&(t-=n*s,e.push(n.toString()+r))})),e.join(" ")},mt=t=>{const e=/(-?(?:\d+)?\.?\d+) *(ms|s|m|h|d|w|y)/gm;let r,s=0;for(;null!==(r=e.exec(t));)r.index===e.lastIndex&&e.lastIndex++,s+=parseFloat(r[1])*pt[r[2]]||0;return s},gt=(t,e)=>{let r;const s=()=>{r&&clearTimeout(r)};return{cancel:s,run(...n){s(),r=setTimeout((()=>t(...n)),e)}}};class xt{constructor(){this.events=new Map}on(t,e){const r=this.events.get(t);return r?r.push(e):this.events.set(t,[e]),{dispose:()=>this.off(t,e)}}once(t,e){const r=s=>{e(s),this.off(t,r)};return this.on(t,r),{dispose:()=>this.off(t,r)}}off(t,e){const r=this.events.get(t);if(e){if(r){const t=r.indexOf(e);t>=0&&r.splice(t,1)}}else this.events.set(t,[])}emit(t,e){const r=this.events.get(t);r&&r.forEach((t=>t(e)))}}function yt(t,e,r,s){return new(r||(r=Promise))((function(n,i){function a(t){try{l(s.next(t))}catch(t){i(t)}}function u(t){try{l(s.throw(t))}catch(t){i(t)}}function l(t){t.done?n(t.value):function(t){return t instanceof r?t:new r((function(e){e(t)}))}(t.value).then(a,u)}l((s=s.apply(t,e||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;const bt=(t,e)=>{let r=!1;const s=()=>yt(void 0,void 0,void 0,(function*(){r&&(yield t(),setTimeout(s,e))}));return{start(){r||(r=!0,s())},stop(){r=!1}}},wt=t=>{var e;return 0==(null!==(e=null==t?void 0:t.length)&&void 0!==e?e:0)},Et=["",0,"0",null,!1,void 0],St=t=>-1==Et.indexOf(t),Ot=t=>!St(t),Rt=t=>!wt(t),Ct=()=>{},Mt=(t,e,r)=>e(t.toLowerCase().replace(/\W+/g," ")).replace(/\s/g,null!=r?r:""),kt=(t,e)=>Mt(t,(t=>t.replace(/\s(\w)/g,(t=>t.toUpperCase()))),e),It=kt,jt=(t,e)=>{if(t.length>e){const r=t.substring(0,e).split(" ");return r.pop(),r.join(" ")+"..."}return t},At=/&(amp|apos|lt|gt|nbsp|quot);/g,Dt={amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",quot:'"'},Nt=t=>t.replace(At,((t,e)=>Dt[e])).replace(/&#(\d+);/gi,((t,e)=>String.fromCharCode(parseInt(e,10)))),Ut=t=>t.replace(/[^0-9A-Za-z ]/g,(t=>"&#"+t.charCodeAt(0)+";")),Tt=t=>/^[\w]$/.test(t),Pt=t=>/^[\d]$/.test(t),$t=t=>/^[A-Za-z]$/.test(t),_t=t=>/^[^\w]$/.test(t),Lt=t=>{if(f(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"},Yt=t=>t.split("").map((t=>Math.random()<.5?t.toUpperCase():t.toLowerCase())).join(""),qt=t=>l(t.split("")).join("");class Ft{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 Ft).chars()}lower(){return this.hasLower=!0,this}static lower(){return(new Ft).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=qt(e);for(let s=0;s<t;s++)r+=e.charAt(i(0,e.length-1))}return r}numbers(){return this.hasNumbers=!0,this}static numbers(){return(new Ft).numbers()}space(){return this.hasSpace=!0,this}static space(){return(new Ft).space()}symbols(){return this.hasSymbols=!0,this}static symbols(){return(new Ft).symbols()}upper(){return this.hasUpper=!0,this}static upper(){return(new Ft).upper()}}const Qt=t=>t.split("").reverse().join(""),Ht=(t,e)=>Mt(t,(t=>t.replace(/(\w)(\w*)/g,((t,e,r)=>e.toUpperCase()+r))),e),Zt=(t,e)=>e(t.value)?t.value:(t=>(t.maskIndex--,""))(t),zt={"#":t=>t.value,0:t=>Zt(t,Pt),9:t=>Zt(t,Pt),A:t=>Zt(t,$t),Z:t=>Zt(t,$t),L:t=>Zt(t,$t).toLowerCase(),U:t=>Zt(t,$t).toUpperCase(),S:t=>Zt(t,_t)},Jt=t=>{t.maskIndex++,t.textIndex++;const{mask:e,maskIndex:r,text:s,textIndex:n}=t;t.key=e[r],t.value=s[n];const{key:i,value:a}=t;return I(i)||I(a)?"":(t=>zt[t.key]?zt[t.key](t):(t.key!=t.value&&t.textIndex--,t.key))(t)+Jt(t)},Bt=(t,e)=>Jt({mask:t,maskIndex:-1,text:e,textIndex:-1,key:"",value:""}),Wt=(t,e)=>Qt(Bt(Qt(t),Qt(e))),Gt=(t,e,r)=>(r++,e=parseInt((e||"0").replace(/\D/g,"")).toString(),Wt(t,e.length<r?("0".repeat(r)+e).slice(-1*r):e)),Kt=(t,e)=>t.length==Bt(t,e).length,Vt=(t,e)=>t.reduce(((t,r)=>Object.assign(Object.assign({},t),{[r]:e[r]})),{}),Xt=(t,e)=>Vt(Object.keys(e).filter((e=>-1==t.indexOf(e))),e),te=(t,...e)=>{if(!e.length)return t;const r=e.shift();if(E(t)&&E(r))for(const e in r)E(r[e])?(t[e]||(t=Object.assign(Object.assign({},t),{[e]:{}})),t[e]=te(t[e],r[e])):t=Object.assign(Object.assign({},t),{[e]:r[e]});return te(t,...e)},ee=(t,e,r)=>yt(void 0,void 0,void 0,(function*(){yield Promise.allSettled(t.map(((s,n)=>e.call(r,s,n,t)))).catch(Ct)})),re=(t,e,r)=>yt(void 0,void 0,void 0,(function*(){for(let s=0;s<t.length;s++)yield e.call(r,t[s],s,t).catch(Ct)})),se=t=>new Promise((e=>setTimeout(e,t)));class ne{}var ie,ae,ue,le,he;ne.DESCRIPTION=Symbol("DESCRIPTION"),ne.ERROR=Symbol("ERROR"),ne.NAME=Symbol("NAME"),ne.REQUIRED=Symbol("REQUIRED"),ne.SOURCE=Symbol("SOURCE"),ne.TYPE=Symbol("TYPE");class oe{constructor(t){this[ie]="",this[ae]="",this[ue]="",this[le]="any",this[he]=!1,this.rules=[],this.custom=[],this[ne.TYPE]=t}description(t){return this[ne.DESCRIPTION]=t,this}empty(t){const e=t;return this.unshift((({value:t})=>{const r=d(t);return{break:!r,value:r?t:g(e)?e():e}}))}equal(t,e){const r=this.fn(t);return this.push((({value:t,context:s})=>{const n=r({value:t,context:s});return t==n?{value:t}:this.invalid(`.equal(${n})`,e)}))}error(t){return M(t)&&(this[ne.ERROR]=t),this}filter(...t){const e=t;return this.unshift((({value:t})=>{const r=-1==e.indexOf(t);return{break:!r,value:r?t:void 0}}))}fn(t){return g(t)?t:()=>t}from(t){return this[ne.SOURCE]=t,this}invalid(t,e){return t=`[${this[ne.TYPE]}]${t}`,{error:this[ne.ERROR]?this[ne.ERROR]:this[ne.NAME]?this[ne.NAME]+":"+t:t,message:e}}parse(){return this.unshift((({value:t})=>({value:t})))}push(t){return this.rules.push(t),this}required(t){return this[ne.REQUIRED]=!0,this.unshift((({value:e})=>d(e)?{value:e}:this.invalid(".required",t)))}test(t){return!M(this.validate(t).error)}testAsync(t){return yt(this,void 0,void 0,(function*(){return!M((yield this.validateAsync(t)).error)}))}unshift(t){return this.rules.unshift(t),this}validate(t,e){var r;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}),null===(r=s.error)||void 0===r?void 0:r.length)return Object.assign({error:s.error},s.message?{message:s.message}:{});if(s.break)return{value:s.value}}return{value:s.value}}validateAsync(t,e){return yt(this,void 0,void 0,(function*(){let r=this.validate(t,e);if(r.error)return{error:r.error};for(let t=0;t<this.custom.length;t++){if(r=yield this.custom[t]({value:r.value}),r.error)return{error:r.error};if(r.break)return{value:r.value}}return{value:r.value}}))}}ie=ne.NAME,ae=ne.DESCRIPTION,ne.SOURCE,ue=ne.ERROR,le=ne.TYPE,he=ne.REQUIRED;class ce extends oe{constructor(t){super("array"),this.push((({value:e})=>c(e)?{value:e}:this.invalid("",t)))}between(t,e,r){return this.min(t,r),this.max(e,r)}items(t,e){const r=t;return r?this.push((({value:t})=>{r[ne.NAME]="";for(let s=0;s<t.length;s++){const{error:n,value:i}=r.validate(t[s],t);if(n)return this.invalid("< "+n+"["+s+"] >",e);t[s]=i}return{value:t}})):this}length(t,e){const r=t;return this.push((({value:t})=>t.length==r?{value:t}:this.invalid(".length("+r+")",e)))}max(t,e){const r=t;return this.push((({value:t})=>t.length<=r?{value:t}:this.invalid(".max("+r+")",e)))}min(t,e){const r=t;return this.push((({value:t})=>t.length>=r?{value:t}:this.invalid(".min("+r+")",e)))}}class ve extends oe{constructor(t){super("boolean"),this.push((({value:e})=>v(e)?{value:e}:this.invalid("",t)))}parse(){return this.unshift((({value:t})=>({value:d(t)?N(t):t})))}}class pe extends oe{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:ht(e,new Date(t))})))}parse(){return this.unshift((({value:t})=>({value:new Date(M(t)&&t.length<=10?`${t} 12:00`:t)})))}}class de extends oe{constructor(t){super("number"),this.push((({value:e})=>f(e)?{value:e}:this.invalid("",t)))}between(t,e,r){return this.min(t,r),this.max(e,r)}float(t){return this.push((({value:e})=>m(e)?{value:e}:this.invalid(".float",t)))}integer(t){return this.push((({value:e})=>x(e)?{value:e}:this.invalid(".integer",t)))}max(t,e){const r=this.fn(t);return this.push((({value:t,context:s})=>{const n=r({value:t,context:s});return t<=n?{value:t}:this.invalid(`.max(${n})`,e)}))}min(t,e){const r=this.fn(t);return this.push((({value:t,context:s})=>{const n=r({value:t,context:s});return t>=n?{value:t}:this.invalid(`.min(${n})`,e)}))}parse(){return this.unshift((({value:t})=>({value:d(t)?parseFloat(t.toString()):t})))}}class fe extends oe{constructor(t){super("object"),this.push((({value:e})=>w(e)?{value:e}:this.invalid("",t)))}keys(t,e){const r=t;return r?this.push((({value:t})=>{const s=[],n={};return Object.keys(r).forEach((i=>{var a;const u=r[i];u[ne.NAME]=null!==(a=u[ne.SOURCE])&&void 0!==a?a:i;const{error:l,message:h,value:o}=u.validate(t[u[ne.NAME]],n);!e&&h&&(e=h),l&&s.push(l),d(o)&&(n[i]=o)})),s.length?this.invalid("{ "+s.join(", ")+" }",e):{value:n}})):this}parse(t){return this.unshift((({value:e})=>{if(!w(e))try{e=JSON.parse(e)}catch(e){return this.invalid("",t)}return{value:e}}))}}class me extends oe{constructor(t){super("string"),this.push((({value:e})=>M(e)?{value:e}:this.invalid("",t)))}between(t,e,r){return this.min(t,r),this.max(e,r)}email(t){const e=/^[\w-\\.]+@([\w-]+\.)+[\w-]{2,4}$/i;return this.push((({value:r})=>e.test(r)?{value:r}:this.invalid(".email",t)))}length(t,e){const r=this.fn(t);return this.push((({value:t,context:s})=>{const n=r({value:t,context:s});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:kt(t)})))}max(t,e){const r=this.fn(t);return this.push((({value:t,context:s})=>{const n=r({value:t,context:s});return t.length<=n?{value:t}:this.invalid(`.max(${n})`,e)}))}mask(t){const e=this.fn(t);return this.push((({value:t,context:r})=>({value:Bt(e({value:t,context:r}),t)})))}min(t,e){const r=this.fn(t);return this.push((({value:t,context:s})=>{const n=r({value:t,context:s});return t.length>=n?{value:t}:this.invalid(`.min(${n})`,e)}))}parse(){return this.unshift((({value:t})=>({value:w(t)?JSON.stringify(t):d(t)?t.toString():t})))}required(t){return this[ne.REQUIRED]=!0,this.push((({value:e})=>e.length?{value:e}:this.invalid(".required",t)))}regex(t,e){return this.push((({value:r})=>t.test(r)?{value:r}:this.invalid(".regex",e)))}replace(t,e){const r=this.fn(t);return this.push((({value:t,context:s})=>({value:t.replace(r({value:t,context:s}),((...t)=>g(e)?e(...t):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:Ht(t)})))}}class ge{static array(t,e){return new ce(e).items(t)}static boolean(t){return new ve(t)}static date(t){return new pe(t)}static number(t){return new de(t)}static object(t,e){return new fe(e).keys(t)}static ref(t,e){return({context:r})=>r&&d(r[t])?r[t]:e}static string(t){return new me(t)}test(t,...e){return!M(ge.validate(t,...e).error)}testAsync(t,...e){return yt(this,void 0,void 0,(function*(){return!M((yield ge.validateAsync(t,...e)).error)}))}static validate(t,...e){let r={value:t};for(let t=0;t<e.length;t++)if(r=e[t].validate(r.value),r.error)return{value:r.value,error:r.error};return{value:r.value}}static validateAsync(t,...e){return yt(this,void 0,void 0,(function*(){let r={value:t};for(let t=0;t<e.length;t++)if(r=yield e[t].validateAsync(r.value),r.error)return{value:r.value,error:r.error};return{value:r.value}}))}}export{xt as EventEmitter,V as Hash,Ft as RandomString,ge as Validation,oe as ValidationBase,ne as ValidationKeys,Vt as allowed,U as cache,It as camelCase,t as chunkArray,s as clamp,J as colorPalette,e as compareArray,r as countArray,jt as cutText,ht as dateFormat,ot as dateRange,gt as debounce,Nt as decodeHTML,Xt as denied,$ as each,Ut as encodeHTML,ee as forEachAsync,T as forEachIndex,P as forEachKey,re as forEachSeries,_ as forLoop,q as hexToRgb,B as hslToRgb,c as isArray,v as isBoolean,Tt as isCharacter,p as isDate,d as isDef,Pt as isDigit,wt as isEmpty,Ot as isFalse,m as isFloat,g as isFunction,x as isInteger,$t as isLetter,y as isMap,Rt as isNotEmpty,b as isNull,f as isNumber,w as isObject,E as isPlainObject,S as isRegExp,R as isScalar,C as isSet,_t as isSpecialChar,M as isString,k as isSymbol,St as isTrue,I as isUndefined,n as lerp,bt as loop,kt as lowerCamelCase,L as map,Bt as mask,Gt as maskMoney,Wt as maskReverse,Kt as maskTest,te as merge,ft as msToString,Ct as noop,mt as parseMs,Lt as parseSize,i as random,Yt as randomCase,a as randomElement,u as rangeArray,Q as rgbToHex,K as rgbToHsl,H as shadeColor,l as shuffleArray,qt as shuffleString,nt as simpleID,se as sleep,Qt as stringReverse,Z as tintColor,j as toArray,N as toBool,o as type,A as uniqueArray,it as uniqueID,Ht 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,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),p=t=>"date"==o(t),d=t=>"null"!=o(t),f=t=>"number"==o(t),m=t=>f(t)&&!!(t%1),g=t=>"function"==typeof t,x=t=>f(t)&&!(t%1),y=t=>"map"==o(t),b=t=>null===t,w=t=>"object"==o(t),E=t=>w(t)&&t.constructor===Object,S=t=>"regexp"==o(t),O=["boolean","number","string"],R=t=>-1!=O.indexOf(o(t)),C=t=>"set"==o(t),M=t=>"string"==typeof t,I=t=>"symbol"==typeof t,j=t=>void 0===t,k=t=>c(t)?t:d(t)?[t]:[],A=t=>t.filter(((t,e,s)=>s.indexOf(t)===e)),D=[1,"1",!0,"true"],N=t=>-1!=D.indexOf(t),U=()=>{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},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},$=(t,e,s)=>c(t)?T(t,e,s):w(t)?P(t,e,s):t,_=(t,e,s)=>{for(let r=1;r<=t&&!1!==e.call(s,r,t);r++);return t},L=(t,e,s)=>Object.fromEntries(Object.entries(t).map((([r,n])=>[r,e.call(s,n,r,t)]))),Y=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(Y))||[]},F=t=>("0"+t.toString(16)).slice(-2),Q=(t,e,s)=>"#"+F(t)+F(e)+F(s),H=(t,e)=>{const s=q(t);e=r(e,0,1);const[n,i,a]=s.map((t=>Math.round(t*e)));return Q(n,i,a)},Z=(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 Q(n,i,a)},z={50:.95,100:.9,200:.75,300:.6,400:.3,500:0,600:-.1,700:-.25,800:-.4,900:-.55,950:-.71},J=(t,e)=>L(null!=e?e:z,(e=>0==e?t:e>0?Z(t,e):H(t,1- -1*e))),B=(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))]},W=(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,G=(t,e)=>0===t?0:t/(1-Math.abs(2*e-1)),K=(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*W(l,a,r,n,i),G(l,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 X=t=>Math.random().toString(16).slice(t),tt=()=>X(-3),et=()=>X(-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,pt={ms:1,s:1e3,m:6e4,h:ct,d:vt,w:7*vt,y:315576e5},dt=["y","d","h","m","s","ms"],ft=t=>{const e=[];return dt.forEach((s=>{const r=pt[s],n=(t-t%r)/r;n&&(t-=n*r,e.push(n.toString()+s))})),e.join(" ")},mt=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])*pt[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 xt{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 yt(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 bt=(t,e)=>{let s=!1;const r=()=>yt(void 0,void 0,void 0,(function*(){s&&(yield t(),setTimeout(r,e))}));return{start(){s||(s=!0,r())},stop(){s=!1}}},wt=t=>{var e;return 0==(null!==(e=null==t?void 0:t.length)&&void 0!==e?e:0)},Et=["",0,"0",null,!1,void 0],St=t=>-1==Et.indexOf(t),Ot=t=>!St(t),Rt=t=>!wt(t),Ct=()=>{},Mt=(t,e,s)=>e(t.toLowerCase().replace(/\W+/g," ")).replace(/\s/g,null!=s?s:""),It=(t,e)=>Mt(t,(t=>t.replace(/\s(\w)/g,(t=>t.toUpperCase()))),e),jt=It,kt=(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,Dt={amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",quot:'"'},Nt=t=>t.replace(At,((t,e)=>Dt[e])).replace(/&#(\d+);/gi,((t,e)=>String.fromCharCode(parseInt(e,10)))),Ut=t=>t.replace(/[^0-9A-Za-z ]/g,(t=>"&#"+t.charCodeAt(0)+";")),Tt=t=>/^[\w]$/.test(t),Pt=t=>/^[\d]$/.test(t),$t=t=>/^[A-Za-z]$/.test(t),_t=t=>/^[^\w]$/.test(t),Lt=t=>{if(f(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"},Yt=t=>t.split("").map((t=>Math.random()<.5?t.toUpperCase():t.toLowerCase())).join(""),qt=t=>l(t.split("")).join("");class Ft{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 Ft).chars()}lower(){return this.hasLower=!0,this}static lower(){return(new Ft).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 Ft).numbers()}space(){return this.hasSpace=!0,this}static space(){return(new Ft).space()}symbols(){return this.hasSymbols=!0,this}static symbols(){return(new Ft).symbols()}upper(){return this.hasUpper=!0,this}static upper(){return(new Ft).upper()}}const Qt=t=>t.split("").reverse().join(""),Ht=(t,e)=>Mt(t,(t=>t.replace(/(\w)(\w*)/g,((t,e,s)=>e.toUpperCase()+s))),e),Zt=(t,e)=>e(t.value)?t.value:(t=>(t.maskIndex--,""))(t),zt={"#":t=>t.value,0:t=>Zt(t,Pt),9:t=>Zt(t,Pt),A:t=>Zt(t,$t),Z:t=>Zt(t,$t),L:t=>Zt(t,$t).toLowerCase(),U:t=>Zt(t,$t).toUpperCase(),S:t=>Zt(t,_t)},Jt=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=>zt[t.key]?zt[t.key](t):(t.key!=t.value&&t.textIndex--,t.key))(t)+Jt(t)},Bt=(t,e)=>Jt({mask:t,maskIndex:-1,text:e,textIndex:-1,key:"",value:""}),Wt=(t,e)=>Qt(Bt(Qt(t),Qt(e))),Gt=(t,e,s)=>(s++,e=parseInt((e||"0").replace(/\D/g,"")).toString(),Wt(t,e.length<s?("0".repeat(s)+e).slice(-1*s):e)),Kt=(t,e)=>t.length==Bt(t,e).length,Vt=(t,e)=>t.reduce(((t,s)=>Object.assign(Object.assign({},t),{[s]:e[s]})),{}),Xt=(t,e)=>Vt(Object.keys(e).filter((e=>-1==t.indexOf(e))),e),te=(t,...e)=>{if(!e.length)return t;const s=e.shift();if(E(t)&&E(s))for(const e in s)E(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)=>yt(void 0,void 0,void 0,(function*(){yield Promise.allSettled(t.map(((r,n)=>e.call(s,r,n,t)))).catch(Ct)})),se=(t,e,s)=>yt(void 0,void 0,void 0,(function*(){for(let r=0;r<t.length;r++)yield e.call(s,t[r],r,t).catch(Ct)})),re=t=>new Promise((e=>setTimeout(e,t)));class ne{}var ie,ae,ue,le,he;ne.DESCRIPTION=Symbol("DESCRIPTION"),ne.ERROR=Symbol("ERROR"),ne.NAME=Symbol("NAME"),ne.REQUIRED=Symbol("REQUIRED"),ne.SOURCE=Symbol("SOURCE"),ne.TYPE=Symbol("TYPE");class oe{constructor(t){this[ie]="",this[ae]="",this[ue]="",this[le]="any",this[he]=!1,this.rules=[],this.custom=[],this[ne.TYPE]=t}description(t){return this[ne.DESCRIPTION]=t,this}empty(t,e=!0){const s=t;return this.unshift((({value:t})=>{const r=d(t);return{stop:e&&!r,value:r?t:g(s)?s():s}}))}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[ne.ERROR]=t),this}filter(...t){const e=t;return this.unshift((({value:t})=>{const s=-1==e.indexOf(t);return{stop:!s,value:s?t:void 0}}))}fn(t){return g(t)?t:()=>t}from(t){return this[ne.SOURCE]=t,this}invalid(t,e){return t=`[${this[ne.TYPE]}]${t}`,{error:this[ne.ERROR]?this[ne.ERROR]:this[ne.NAME]?this[ne.NAME]+":"+t:t,message:e}}parse(){return this.unshift((({value:t})=>({value:t})))}push(t){return this.rules.push(t),this}required(t){return this[ne.REQUIRED]=!0,this.unshift((({value:e})=>d(e)?{value:e}:this.invalid(".required",t)))}test(t){return!M(this.validate(t).error)}testAsync(t){return yt(this,void 0,void 0,(function*(){return!M((yield this.validateAsync(t)).error)}))}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.stop)return{value:r.value}}return{value:r.value}}validateAsync(t,e){return yt(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.stop)return{value:s.value}}return{value:s.value}}))}}ie=ne.NAME,ae=ne.DESCRIPTION,ne.SOURCE,ue=ne.ERROR,le=ne.TYPE,he=ne.REQUIRED;class ce extends oe{constructor(t){super("array"),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.push((({value:t})=>{s[ne.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)))}}class ve extends oe{constructor(t){super("boolean"),this.push((({value:e})=>v(e)?{value:e}:this.invalid("",t)))}parse(){return this.unshift((({value:t})=>({value:d(t)?N(t):t})))}}class pe extends oe{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:ht(e,new Date(t))})))}parse(){return this.unshift((({value:t})=>({value:new Date(M(t)&&t.length<=10?`${t} 12:00`:t)})))}}class de extends oe{constructor(t){super("number"),this.push((({value:e})=>f(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})=>m(e)?{value:e}:this.invalid(".float",t)))}integer(t){return this.push((({value:e})=>x(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 fe extends oe{constructor(t){super("object"),this.push((({value:e})=>w(e)?{value:e}:this.invalid("",t)))}keys(t,e){const s=t;return s?this.push((({value:t})=>{const r=[],n={};return Object.keys(s).forEach((i=>{var a;const u=s[i];u[ne.NAME]=null!==(a=u[ne.SOURCE])&&void 0!==a?a:i;const{error:l,message:h,value:o}=u.validate(t[u[ne.NAME]],n);!e&&h&&(e=h),l&&r.push(l),d(o)&&(n[i]=o)})),r.length?this.invalid("{ "+r.join(", ")+" }",e):{value:n}})):this}parse(t){return this.unshift((({value:e})=>{if(!w(e))try{e=JSON.parse(e)}catch(e){return this.invalid("",t)}return{value:e}}))}}class me extends oe{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:It(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:Bt(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:w(t)?JSON.stringify(t):d(t)?t.toString():t})))}required(t){return this[ne.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}),((...t)=>g(e)?e(...t):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:Ht(t)})))}}class ge{static array(t,e){return new ce(e).items(t)}static boolean(t){return new ve(t)}static date(t){return new pe(t)}static number(t){return new de(t)}static object(t,e){return new fe(e).keys(t)}static ref(t,e){return({context:s})=>s&&d(s[t])?s[t]:e}static string(t){return new me(t)}test(t,...e){return!M(ge.validate(t,...e).error)}testAsync(t,...e){return yt(this,void 0,void 0,(function*(){return!M((yield ge.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 yt(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{xt as EventEmitter,V as Hash,Ft as RandomString,ge as Validation,oe as ValidationBase,ne as ValidationKeys,Vt as allowed,U as cache,jt as camelCase,t as chunkArray,r as clamp,J as colorPalette,e as compareArray,s as countArray,kt as cutText,ht as dateFormat,ot as dateRange,gt as debounce,Nt as decodeHTML,Xt as denied,$ as each,Ut as encodeHTML,ee as forEachAsync,T as forEachIndex,P as forEachKey,se as forEachSeries,_ as forLoop,q as hexToRgb,B as hslToRgb,c as isArray,v as isBoolean,Tt as isCharacter,p as isDate,d as isDef,Pt as isDigit,wt as isEmpty,Ot as isFalse,m as isFloat,g as isFunction,x as isInteger,$t as isLetter,y as isMap,Rt as isNotEmpty,b as isNull,f as isNumber,w as isObject,E as isPlainObject,S as isRegExp,R as isScalar,C as isSet,_t as isSpecialChar,M as isString,I as isSymbol,St as isTrue,j as isUndefined,n as lerp,bt as loop,It as lowerCamelCase,L as map,Bt as mask,Gt as maskMoney,Wt as maskReverse,Kt as maskTest,te as merge,ft as msToString,Ct as noop,mt as parseMs,Lt as parseSize,i as random,Yt as randomCase,a as randomElement,u as rangeArray,Q as rgbToHex,K as rgbToHsl,H as shadeColor,l as shuffleArray,qt as shuffleString,nt as simpleID,re as sleep,Qt as stringReverse,Z as tintColor,k as toArray,N as toBool,o as type,A as uniqueArray,it as uniqueID,Ht as upperCamelCase,at as uuidv4};
package/dist/index.min.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /*!
2
- * @andrewcaires/utils.js v0.4.6
2
+ * @andrewcaires/utils.js v0.4.7
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(e){"use strict";const t=(e,t,r)=>Math.max(t,Math.min(r,e)),r=(e,t)=>Math.floor(Math.random()*(t-e+1)+e),s=e=>{for(let t=e.length-1;t>0;t--){const s=r(0,t);[e[t],e[s]]=[e[s],e[t]]}return e},n={},i=e=>null==e?"null":n[n.toString.call(e)]||"object";["Array","AsyncFunction","Boolean","Date","Function","Map","Number","Object","RegExp","Set","String"].forEach((e=>n["[object "+e+"]"]=e.toLowerCase()));const a=e=>"array"==i(e),u=e=>"boolean"==i(e),l=e=>"null"!=i(e),o=e=>"number"==i(e),h=e=>o(e)&&!!(e%1),c=e=>"function"==typeof e,v=e=>o(e)&&!(e%1),p=e=>"object"==i(e),d=e=>p(e)&&e.constructor===Object,m=["boolean","number","string"],f=e=>"string"==typeof e,g=e=>void 0===e,y=[1,"1",!0,"true"],x=e=>-1!=y.indexOf(e),b=(e,t,r)=>{for(let s=0;s<e.length&&!1!==t.call(r,e[s],s,e);s++);return e},E=(e,t,r)=>{let s="";const n=Object.keys(e);for(let i=0;i<n.length&&(s=n[i],!1!==t.call(r,e[s],s,e));i++);return e},w=(e,t,r)=>Object.fromEntries(Object.entries(e).map((([s,n])=>[s,t.call(r,n,s,e)]))),S=e=>parseInt(null!=e?e:"0",16)||0,R=e=>{var t;return(null===(t=e.replace(/^#/,"").match(/.{1,2}/g))||void 0===t?void 0:t.map(S))||[]},C=e=>("0"+e.toString(16)).slice(-2),O=(e,t,r)=>"#"+C(e)+C(t)+C(r),M=(e,r)=>{const s=R(e);r=t(r,0,1);const[n,i,a]=s.map((e=>Math.round(e*r)));return O(n,i,a)},k=(e,r)=>{const s=R(e);r=t(r,0,1);const[n,i,a]=s.map((e=>Math.round(e+(255-e)*r)));return O(n,i,a)},A={50:.95,100:.9,200:.75,300:.6,400:.3,500:0,600:-.1,700:-.25,800:-.4,900:-.55,950:-.71},I=(e,t,r,s,n)=>0===e?0:t===r?(s-n)/e%6:t===s?(n-r)/e+2:t===n?(r-s)/e+4:0,j=(e,t)=>0===e?0:e/(1-Math.abs(2*t-1));class D{constructor(e){this.key=this.shuffle(D.dictionary,e,!1)}encrypt(e){return this.shuffle(e,this.key,!1)}decrypt(e){return this.shuffle(e,this.key,!0)}index(e,t,r){return[D.dictionary.indexOf(e[r]),D.dictionary.indexOf(t[r%t.length])]}result(e,t,r){return D.dictionary[(r?e-t+D.dictionary.length:e+t)%D.dictionary.length]}shuffle(e,t,r){let s="";for(let n=0;n<e.length;n++){const[i,a]=this.index(e,t,n);s+=-1===i||-1===a?e[n]:this.result(i,a,r)}return s}}D.dictionary="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";const T=e=>Math.random().toString(16).slice(e),N=()=>T(-3),U=()=>T(-4),P=()=>U()+U(),L=()=>P()+P(),$=e=>("0"+e.toString()).slice(-2),F={"%y":e=>$(e.getFullYear()),"%Y":e=>e.getFullYear().toString(),"%m":e=>$(e.getMonth()+1),"%d":e=>$(e.getDate()),"%H":e=>$(e.getHours()),"%M":e=>$(e.getMinutes()),"%S":e=>$(e.getSeconds())},q=(e,t)=>(t=null!=t?t:new Date,e.replace(/%[yYmdHMS]/g,(e=>F[e]?F[e](t):e.slice(1)))),_=36e5,Y=24*_,H={ms:1,s:1e3,m:6e4,h:_,d:Y,w:7*Y,y:315576e5},Q=["y","d","h","m","s","ms"];function B(e,t,r,s){return new(r||(r=Promise))((function(n,i){function a(e){try{l(s.next(e))}catch(e){i(e)}}function u(e){try{l(s.throw(e))}catch(e){i(e)}}function l(e){e.done?n(e.value):function(e){return e instanceof r?e:new r((function(t){t(e)}))}(e.value).then(a,u)}l((s=s.apply(e,t||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;const z=e=>{var t;return 0==(null!==(t=null==e?void 0:e.length)&&void 0!==t?t:0)},J=["",0,"0",null,!1,void 0],V=e=>-1==J.indexOf(e),Z=()=>{},K=(e,t,r)=>t(e.toLowerCase().replace(/\W+/g," ")).replace(/\s/g,null!=r?r:""),W=(e,t)=>K(e,(e=>e.replace(/\s(\w)/g,(e=>e.toUpperCase()))),t),G=W,X=/&(amp|apos|lt|gt|nbsp|quot);/g,ee={amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",quot:'"'},te=e=>/^[\d]$/.test(e),re=e=>/^[A-Za-z]$/.test(e),se=e=>/^[^\w]$/.test(e),ne=e=>s(e.split("")).join("");class ie{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 ie).chars()}lower(){return this.hasLower=!0,this}static lower(){return(new ie).lower()}make(e){let t="";this.hasSpace&&(t+=this._space),this.hasNumbers&&(t+=this._numbers),this.hasSymbols&&(t+=this._symbols),this.hasUpper&&!this.hasChars&&(t+=this._upper),this.hasLower&&!this.hasChars&&(t+=this._lower),this.hasChars&&(t+=this._chars);let s="";if(e&&t.length){t=ne(t);for(let n=0;n<e;n++)s+=t.charAt(r(0,t.length-1))}return s}numbers(){return this.hasNumbers=!0,this}static numbers(){return(new ie).numbers()}space(){return this.hasSpace=!0,this}static space(){return(new ie).space()}symbols(){return this.hasSymbols=!0,this}static symbols(){return(new ie).symbols()}upper(){return this.hasUpper=!0,this}static upper(){return(new ie).upper()}}const ae=e=>e.split("").reverse().join(""),ue=(e,t)=>K(e,(e=>e.replace(/(\w)(\w*)/g,((e,t,r)=>t.toUpperCase()+r))),t),le=(e,t)=>t(e.value)?e.value:(e=>(e.maskIndex--,""))(e),oe={"#":e=>e.value,0:e=>le(e,te),9:e=>le(e,te),A:e=>le(e,re),Z:e=>le(e,re),L:e=>le(e,re).toLowerCase(),U:e=>le(e,re).toUpperCase(),S:e=>le(e,se)},he=e=>{e.maskIndex++,e.textIndex++;const{mask:t,maskIndex:r,text:s,textIndex:n}=e;e.key=t[r],e.value=s[n];const{key:i,value:a}=e;return g(i)||g(a)?"":(e=>oe[e.key]?oe[e.key](e):(e.key!=e.value&&e.textIndex--,e.key))(e)+he(e)},ce=(e,t)=>he({mask:e,maskIndex:-1,text:t,textIndex:-1,key:"",value:""}),ve=(e,t)=>ae(ce(ae(e),ae(t))),pe=(e,t)=>e.reduce(((e,r)=>Object.assign(Object.assign({},e),{[r]:t[r]})),{}),de=(e,...t)=>{if(!t.length)return e;const r=t.shift();if(d(e)&&d(r))for(const t in r)d(r[t])?(e[t]||(e=Object.assign(Object.assign({},e),{[t]:{}})),e[t]=de(e[t],r[t])):e=Object.assign(Object.assign({},e),{[t]:r[t]});return de(e,...t)};class me{}var fe,ge,ye,xe,be;me.DESCRIPTION=Symbol("DESCRIPTION"),me.ERROR=Symbol("ERROR"),me.NAME=Symbol("NAME"),me.REQUIRED=Symbol("REQUIRED"),me.SOURCE=Symbol("SOURCE"),me.TYPE=Symbol("TYPE");class Ee{constructor(e){this[fe]="",this[ge]="",this[ye]="",this[xe]="any",this[be]=!1,this.rules=[],this.custom=[],this[me.TYPE]=e}description(e){return this[me.DESCRIPTION]=e,this}empty(e){const t=e;return this.unshift((({value:e})=>{const r=l(e);return{break:!r,value:r?e:c(t)?t():t}}))}equal(e,t){const r=this.fn(e);return this.push((({value:e,context:s})=>{const n=r({value:e,context:s});return e==n?{value:e}:this.invalid(`.equal(${n})`,t)}))}error(e){return f(e)&&(this[me.ERROR]=e),this}filter(...e){const t=e;return this.unshift((({value:e})=>{const r=-1==t.indexOf(e);return{break:!r,value:r?e:void 0}}))}fn(e){return c(e)?e:()=>e}from(e){return this[me.SOURCE]=e,this}invalid(e,t){return e=`[${this[me.TYPE]}]${e}`,{error:this[me.ERROR]?this[me.ERROR]:this[me.NAME]?this[me.NAME]+":"+e:e,message:t}}parse(){return this.unshift((({value:e})=>({value:e})))}push(e){return this.rules.push(e),this}required(e){return this[me.REQUIRED]=!0,this.unshift((({value:t})=>l(t)?{value:t}:this.invalid(".required",e)))}test(e){return!f(this.validate(e).error)}testAsync(e){return B(this,void 0,void 0,(function*(){return!f((yield this.validateAsync(e)).error)}))}unshift(e){return this.rules.unshift(e),this}validate(e,t){var r;if(this.custom.length)return this.invalid("[async]");let s={value:e};for(let e=0;e<this.rules.length;e++){if(s=this.rules[e]({value:s.value,context:t}),null===(r=s.error)||void 0===r?void 0:r.length)return Object.assign({error:s.error},s.message?{message:s.message}:{});if(s.break)return{value:s.value}}return{value:s.value}}validateAsync(e,t){return B(this,void 0,void 0,(function*(){let r=this.validate(e,t);if(r.error)return{error:r.error};for(let e=0;e<this.custom.length;e++){if(r=yield this.custom[e]({value:r.value}),r.error)return{error:r.error};if(r.break)return{value:r.value}}return{value:r.value}}))}}fe=me.NAME,ge=me.DESCRIPTION,me.SOURCE,ye=me.ERROR,xe=me.TYPE,be=me.REQUIRED;class we extends Ee{constructor(e){super("array"),this.push((({value:t})=>a(t)?{value:t}:this.invalid("",e)))}between(e,t,r){return this.min(e,r),this.max(t,r)}items(e,t){const r=e;return r?this.push((({value:e})=>{r[me.NAME]="";for(let s=0;s<e.length;s++){const{error:n,value:i}=r.validate(e[s],e);if(n)return this.invalid("< "+n+"["+s+"] >",t);e[s]=i}return{value:e}})):this}length(e,t){const r=e;return this.push((({value:e})=>e.length==r?{value:e}:this.invalid(".length("+r+")",t)))}max(e,t){const r=e;return this.push((({value:e})=>e.length<=r?{value:e}:this.invalid(".max("+r+")",t)))}min(e,t){const r=e;return this.push((({value:e})=>e.length>=r?{value:e}:this.invalid(".min("+r+")",t)))}}class Se extends Ee{constructor(e){super("boolean"),this.push((({value:t})=>u(t)?{value:t}:this.invalid("",e)))}parse(){return this.unshift((({value:e})=>({value:l(e)?x(e):e})))}}class Re extends Ee{constructor(e){super("date"),this.push((({value:t})=>f(t)&&t.length>=9&&!isNaN(new Date(t).getTime())?{value:t}:this.invalid("",e)))}format(e){const t=e;return this.push((({value:e})=>({value:q(t,new Date(e))})))}parse(){return this.unshift((({value:e})=>({value:new Date(f(e)&&e.length<=10?`${e} 12:00`:e)})))}}class Ce extends Ee{constructor(e){super("number"),this.push((({value:t})=>o(t)?{value:t}:this.invalid("",e)))}between(e,t,r){return this.min(e,r),this.max(t,r)}float(e){return this.push((({value:t})=>h(t)?{value:t}:this.invalid(".float",e)))}integer(e){return this.push((({value:t})=>v(t)?{value:t}:this.invalid(".integer",e)))}max(e,t){const r=this.fn(e);return this.push((({value:e,context:s})=>{const n=r({value:e,context:s});return e<=n?{value:e}:this.invalid(`.max(${n})`,t)}))}min(e,t){const r=this.fn(e);return this.push((({value:e,context:s})=>{const n=r({value:e,context:s});return e>=n?{value:e}:this.invalid(`.min(${n})`,t)}))}parse(){return this.unshift((({value:e})=>({value:l(e)?parseFloat(e.toString()):e})))}}class Oe extends Ee{constructor(e){super("object"),this.push((({value:t})=>p(t)?{value:t}:this.invalid("",e)))}keys(e,t){const r=e;return r?this.push((({value:e})=>{const s=[],n={};return Object.keys(r).forEach((i=>{var a;const u=r[i];u[me.NAME]=null!==(a=u[me.SOURCE])&&void 0!==a?a:i;const{error:o,message:h,value:c}=u.validate(e[u[me.NAME]],n);!t&&h&&(t=h),o&&s.push(o),l(c)&&(n[i]=c)})),s.length?this.invalid("{ "+s.join(", ")+" }",t):{value:n}})):this}parse(e){return this.unshift((({value:t})=>{if(!p(t))try{t=JSON.parse(t)}catch(t){return this.invalid("",e)}return{value:t}}))}}class Me extends Ee{constructor(e){super("string"),this.push((({value:t})=>f(t)?{value:t}:this.invalid("",e)))}between(e,t,r){return this.min(e,r),this.max(t,r)}email(e){const t=/^[\w-\\.]+@([\w-]+\.)+[\w-]{2,4}$/i;return this.push((({value:r})=>t.test(r)?{value:r}:this.invalid(".email",e)))}length(e,t){const r=this.fn(e);return this.push((({value:e,context:s})=>{const n=r({value:e,context:s});return e.length==n?{value:e}:this.invalid(`.length(${n})`,t)}))}lowerCase(){return this.push((({value:e})=>({value:e.toLowerCase()})))}lowerCamelCase(){return this.push((({value:e})=>({value:W(e)})))}max(e,t){const r=this.fn(e);return this.push((({value:e,context:s})=>{const n=r({value:e,context:s});return e.length<=n?{value:e}:this.invalid(`.max(${n})`,t)}))}mask(e){const t=this.fn(e);return this.push((({value:e,context:r})=>({value:ce(t({value:e,context:r}),e)})))}min(e,t){const r=this.fn(e);return this.push((({value:e,context:s})=>{const n=r({value:e,context:s});return e.length>=n?{value:e}:this.invalid(`.min(${n})`,t)}))}parse(){return this.unshift((({value:e})=>({value:p(e)?JSON.stringify(e):l(e)?e.toString():e})))}required(e){return this[me.REQUIRED]=!0,this.push((({value:t})=>t.length?{value:t}:this.invalid(".required",e)))}regex(e,t){return this.push((({value:r})=>e.test(r)?{value:r}:this.invalid(".regex",t)))}replace(e,t){const r=this.fn(e);return this.push((({value:e,context:s})=>({value:e.replace(r({value:e,context:s}),((...e)=>c(t)?t(...e):t))})))}trim(){return this.push((({value:e})=>({value:e.trim()})))}upperCase(){return this.push((({value:e})=>({value:e.toUpperCase()})))}upperCamelCase(){return this.push((({value:e})=>({value:ue(e)})))}}class ke{static array(e,t){return new we(t).items(e)}static boolean(e){return new Se(e)}static date(e){return new Re(e)}static number(e){return new Ce(e)}static object(e,t){return new Oe(t).keys(e)}static ref(e,t){return({context:r})=>r&&l(r[e])?r[e]:t}static string(e){return new Me(e)}test(e,...t){return!f(ke.validate(e,...t).error)}testAsync(e,...t){return B(this,void 0,void 0,(function*(){return!f((yield ke.validateAsync(e,...t)).error)}))}static validate(e,...t){let r={value:e};for(let e=0;e<t.length;e++)if(r=t[e].validate(r.value),r.error)return{value:r.value,error:r.error};return{value:r.value}}static validateAsync(e,...t){return B(this,void 0,void 0,(function*(){let r={value:e};for(let e=0;e<t.length;e++)if(r=yield t[e].validateAsync(r.value),r.error)return{value:r.value,error:r.error};return{value:r.value}}))}}return e.EventEmitter=class{constructor(){this.events=new Map}on(e,t){const r=this.events.get(e);return r?r.push(t):this.events.set(e,[t]),{dispose:()=>this.off(e,t)}}once(e,t){const r=s=>{t(s),this.off(e,r)};return this.on(e,r),{dispose:()=>this.off(e,r)}}off(e,t){const r=this.events.get(e);if(t){if(r){const e=r.indexOf(t);e>=0&&r.splice(e,1)}}else this.events.set(e,[])}emit(e,t){const r=this.events.get(e);r&&r.forEach((e=>e(t)))}},e.Hash=D,e.RandomString=ie,e.Validation=ke,e.ValidationBase=Ee,e.ValidationKeys=me,e.allowed=pe,e.cache=()=>{const e=[],t=[];return r=>{let s=e.indexOf(r);return-1==s&&(e.push(r),t.push({}),s=t.length-1),t[s]}},e.camelCase=G,e.chunkArray=(e,t)=>{const r=[];for(let s=0;s<e.length;s+=t)r.push(e.slice(s,s+t));return r},e.clamp=t,e.colorPalette=(e,t)=>w(null!=t?t:A,(t=>0==t?e:t>0?k(e,t):M(e,1- -1*t))),e.compareArray=(e,t)=>e.length===t.length&&e.every(((e,r)=>e===t[r])),e.countArray=e=>{const t={};return e.forEach((e=>{const r=e.toString();t[r]=(t[r]||0)+1})),t},e.cutText=(e,t)=>{if(e.length>t){const r=e.substring(0,t).split(" ");return r.pop(),r.join(" ")+"..."}return e},e.dateFormat=q,e.dateRange=(e,t)=>{const r=new Date(e),s=[];for(;e<t;)r.setDate(r.getDate()+1),s.push(new Date(r));return s},e.debounce=(e,t)=>{let r;const s=()=>{r&&clearTimeout(r)};return{cancel:s,run(...n){s(),r=setTimeout((()=>e(...n)),t)}}},e.decodeHTML=e=>e.replace(X,((e,t)=>ee[t])).replace(/&#(\d+);/gi,((e,t)=>String.fromCharCode(parseInt(t,10)))),e.denied=(e,t)=>pe(Object.keys(t).filter((t=>-1==e.indexOf(t))),t),e.each=(e,t,r)=>a(e)?b(e,t,r):p(e)?E(e,t,r):e,e.encodeHTML=e=>e.replace(/[^0-9A-Za-z ]/g,(e=>"&#"+e.charCodeAt(0)+";")),e.forEachAsync=(e,t,r)=>B(void 0,void 0,void 0,(function*(){yield Promise.allSettled(e.map(((s,n)=>t.call(r,s,n,e)))).catch(Z)})),e.forEachIndex=b,e.forEachKey=E,e.forEachSeries=(e,t,r)=>B(void 0,void 0,void 0,(function*(){for(let s=0;s<e.length;s++)yield t.call(r,e[s],s,e).catch(Z)})),e.forLoop=(e,t,r)=>{for(let s=1;s<=e&&!1!==t.call(r,s,e);s++);return e},e.hexToRgb=R,e.hslToRgb=(e,t,r)=>{e/=60;const s=(1-Math.abs(2*r-1))*t,n=s*(1-Math.abs(e%2-1));let i=[0,0,0];e<=1?i=[s,n,0]:e<=2?i=[n,s,0]:e<=3?i=[0,s,n]:e<=4?i=[0,n,s]:e<=5?i=[n,0,s]:e<=6&&(i=[s,0,n]);const a=r-.5*s;return[Math.round(255*(i[0]+a)),Math.round(255*(i[1]+a)),Math.round(255*(i[2]+a))]},e.isArray=a,e.isBoolean=u,e.isCharacter=e=>/^[\w]$/.test(e),e.isDate=e=>"date"==i(e),e.isDef=l,e.isDigit=te,e.isEmpty=z,e.isFalse=e=>!V(e),e.isFloat=h,e.isFunction=c,e.isInteger=v,e.isLetter=re,e.isMap=e=>"map"==i(e),e.isNotEmpty=e=>!z(e),e.isNull=e=>null===e,e.isNumber=o,e.isObject=p,e.isPlainObject=d,e.isRegExp=e=>"regexp"==i(e),e.isScalar=e=>-1!=m.indexOf(i(e)),e.isSet=e=>"set"==i(e),e.isSpecialChar=se,e.isString=f,e.isSymbol=e=>"symbol"==typeof e,e.isTrue=V,e.isUndefined=g,e.lerp=(e,r,s)=>e+(r-e)*t(s,0,1),e.loop=(e,t)=>{let r=!1;const s=()=>B(void 0,void 0,void 0,(function*(){r&&(yield e(),setTimeout(s,t))}));return{start(){r||(r=!0,s())},stop(){r=!1}}},e.lowerCamelCase=W,e.map=w,e.mask=ce,e.maskMoney=(e,t,r)=>(r++,t=parseInt((t||"0").replace(/\D/g,"")).toString(),ve(e,t.length<r?("0".repeat(r)+t).slice(-1*r):t)),e.maskReverse=ve,e.maskTest=(e,t)=>e.length==ce(e,t).length,e.merge=de,e.msToString=e=>{const t=[];return Q.forEach((r=>{const s=H[r],n=(e-e%s)/s;n&&(e-=n*s,t.push(n.toString()+r))})),t.join(" ")},e.noop=Z,e.parseMs=e=>{const t=/(-?(?:\d+)?\.?\d+) *(ms|s|m|h|d|w|y)/gm;let r,s=0;for(;null!==(r=t.exec(e));)r.index===t.lastIndex&&t.lastIndex++,s+=parseFloat(r[1])*H[r[2]]||0;return s},e.parseSize=e=>{if(o(e))return e+"px";const t=(e=>/(-?(?:\d+)?\.?\d+) *(px|%|cm|mm|in|pt|pc|en|ex|ch|rem|vw|vh|vmin|vmax)*/g.exec(e))(e);return t?parseFloat(t[1])+(t[2]||"px"):"0px"},e.random=r,e.randomCase=e=>e.split("").map((e=>Math.random()<.5?e.toUpperCase():e.toLowerCase())).join(""),e.randomElement=e=>e.length?e[r(0,e.length-1)]:null,e.rangeArray=(e,t,r=1)=>Array.from({length:(t-e)/r+1},((t,s)=>e+s*r)),e.rgbToHex=O,e.rgbToHsl=(e,t,r)=>{const[s,n,i]=((...e)=>e.map((e=>e/255)))(e,t,r),a=Math.max(s,n,i),u=Math.min(s,n,i),l=a-u,o=(u+a)/2;return[60*I(l,a,s,n,i),j(l,o),o]},e.shadeColor=M,e.shuffleArray=s,e.shuffleString=ne,e.simpleID=()=>N()+U(),e.sleep=e=>new Promise((t=>setTimeout(t,e))),e.stringReverse=ae,e.tintColor=k,e.toArray=e=>a(e)?e:l(e)?[e]:[],e.toBool=x,e.type=i,e.uniqueArray=e=>e.filter(((e,t,r)=>r.indexOf(e)===t)),e.uniqueID=()=>L()+L()+L()+L(),e.upperCamelCase=ue,e.uuidv4=()=>P()+"-"+U()+"-4"+N()+"-"+U()+"-"+(P()+U()),e}({});
7
+ var UtilsJS=function(e){"use strict";const t=(e,t,s)=>Math.max(t,Math.min(s,e)),s=(e,t)=>Math.floor(Math.random()*(t-e+1)+e),r=e=>{for(let t=e.length-1;t>0;t--){const r=s(0,t);[e[t],e[r]]=[e[r],e[t]]}return e},n={},i=e=>null==e?"null":n[n.toString.call(e)]||"object";["Array","AsyncFunction","Boolean","Date","Function","Map","Number","Object","RegExp","Set","String"].forEach((e=>n["[object "+e+"]"]=e.toLowerCase()));const a=e=>"array"==i(e),u=e=>"boolean"==i(e),l=e=>"null"!=i(e),o=e=>"number"==i(e),h=e=>o(e)&&!!(e%1),c=e=>"function"==typeof e,v=e=>o(e)&&!(e%1),p=e=>"object"==i(e),d=e=>p(e)&&e.constructor===Object,m=["boolean","number","string"],f=e=>"string"==typeof e,g=e=>void 0===e,y=[1,"1",!0,"true"],x=e=>-1!=y.indexOf(e),b=(e,t,s)=>{for(let r=0;r<e.length&&!1!==t.call(s,e[r],r,e);r++);return e},E=(e,t,s)=>{let r="";const n=Object.keys(e);for(let i=0;i<n.length&&(r=n[i],!1!==t.call(s,e[r],r,e));i++);return e},w=(e,t,s)=>Object.fromEntries(Object.entries(e).map((([r,n])=>[r,t.call(s,n,r,e)]))),S=e=>parseInt(null!=e?e:"0",16)||0,R=e=>{var t;return(null===(t=e.replace(/^#/,"").match(/.{1,2}/g))||void 0===t?void 0:t.map(S))||[]},C=e=>("0"+e.toString(16)).slice(-2),O=(e,t,s)=>"#"+C(e)+C(t)+C(s),M=(e,s)=>{const r=R(e);s=t(s,0,1);const[n,i,a]=r.map((e=>Math.round(e*s)));return O(n,i,a)},A=(e,s)=>{const r=R(e);s=t(s,0,1);const[n,i,a]=r.map((e=>Math.round(e+(255-e)*s)));return O(n,i,a)},I={50:.95,100:.9,200:.75,300:.6,400:.3,500:0,600:-.1,700:-.25,800:-.4,900:-.55,950:-.71},k=(e,t,s,r,n)=>0===e?0:t===s?(r-n)/e%6:t===r?(n-s)/e+2:t===n?(s-r)/e+4:0,j=(e,t)=>0===e?0:e/(1-Math.abs(2*t-1));class D{constructor(e){this.key=this.shuffle(D.dictionary,e,!1)}encrypt(e){return this.shuffle(e,this.key,!1)}decrypt(e){return this.shuffle(e,this.key,!0)}index(e,t,s){return[D.dictionary.indexOf(e[s]),D.dictionary.indexOf(t[s%t.length])]}result(e,t,s){return D.dictionary[(s?e-t+D.dictionary.length:e+t)%D.dictionary.length]}shuffle(e,t,s){let r="";for(let n=0;n<e.length;n++){const[i,a]=this.index(e,t,n);r+=-1===i||-1===a?e[n]:this.result(i,a,s)}return r}}D.dictionary="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";const T=e=>Math.random().toString(16).slice(e),N=()=>T(-3),U=()=>T(-4),P=()=>U()+U(),L=()=>P()+P(),$=e=>("0"+e.toString()).slice(-2),F={"%y":e=>$(e.getFullYear()),"%Y":e=>e.getFullYear().toString(),"%m":e=>$(e.getMonth()+1),"%d":e=>$(e.getDate()),"%H":e=>$(e.getHours()),"%M":e=>$(e.getMinutes()),"%S":e=>$(e.getSeconds())},q=(e,t)=>(t=null!=t?t:new Date,e.replace(/%[yYmdHMS]/g,(e=>F[e]?F[e](t):e.slice(1)))),_=36e5,Y=24*_,H={ms:1,s:1e3,m:6e4,h:_,d:Y,w:7*Y,y:315576e5},Q=["y","d","h","m","s","ms"];function B(e,t,s,r){return new(s||(s=Promise))((function(n,i){function a(e){try{l(r.next(e))}catch(e){i(e)}}function u(e){try{l(r.throw(e))}catch(e){i(e)}}function l(e){e.done?n(e.value):function(e){return e instanceof s?e:new s((function(t){t(e)}))}(e.value).then(a,u)}l((r=r.apply(e,t||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;const z=e=>{var t;return 0==(null!==(t=null==e?void 0:e.length)&&void 0!==t?t:0)},J=["",0,"0",null,!1,void 0],V=e=>-1==J.indexOf(e),Z=()=>{},K=(e,t,s)=>t(e.toLowerCase().replace(/\W+/g," ")).replace(/\s/g,null!=s?s:""),W=(e,t)=>K(e,(e=>e.replace(/\s(\w)/g,(e=>e.toUpperCase()))),t),G=W,X=/&(amp|apos|lt|gt|nbsp|quot);/g,ee={amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",quot:'"'},te=e=>/^[\d]$/.test(e),se=e=>/^[A-Za-z]$/.test(e),re=e=>/^[^\w]$/.test(e),ne=e=>r(e.split("")).join("");class ie{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 ie).chars()}lower(){return this.hasLower=!0,this}static lower(){return(new ie).lower()}make(e){let t="";this.hasSpace&&(t+=this._space),this.hasNumbers&&(t+=this._numbers),this.hasSymbols&&(t+=this._symbols),this.hasUpper&&!this.hasChars&&(t+=this._upper),this.hasLower&&!this.hasChars&&(t+=this._lower),this.hasChars&&(t+=this._chars);let r="";if(e&&t.length){t=ne(t);for(let n=0;n<e;n++)r+=t.charAt(s(0,t.length-1))}return r}numbers(){return this.hasNumbers=!0,this}static numbers(){return(new ie).numbers()}space(){return this.hasSpace=!0,this}static space(){return(new ie).space()}symbols(){return this.hasSymbols=!0,this}static symbols(){return(new ie).symbols()}upper(){return this.hasUpper=!0,this}static upper(){return(new ie).upper()}}const ae=e=>e.split("").reverse().join(""),ue=(e,t)=>K(e,(e=>e.replace(/(\w)(\w*)/g,((e,t,s)=>t.toUpperCase()+s))),t),le=(e,t)=>t(e.value)?e.value:(e=>(e.maskIndex--,""))(e),oe={"#":e=>e.value,0:e=>le(e,te),9:e=>le(e,te),A:e=>le(e,se),Z:e=>le(e,se),L:e=>le(e,se).toLowerCase(),U:e=>le(e,se).toUpperCase(),S:e=>le(e,re)},he=e=>{e.maskIndex++,e.textIndex++;const{mask:t,maskIndex:s,text:r,textIndex:n}=e;e.key=t[s],e.value=r[n];const{key:i,value:a}=e;return g(i)||g(a)?"":(e=>oe[e.key]?oe[e.key](e):(e.key!=e.value&&e.textIndex--,e.key))(e)+he(e)},ce=(e,t)=>he({mask:e,maskIndex:-1,text:t,textIndex:-1,key:"",value:""}),ve=(e,t)=>ae(ce(ae(e),ae(t))),pe=(e,t)=>e.reduce(((e,s)=>Object.assign(Object.assign({},e),{[s]:t[s]})),{}),de=(e,...t)=>{if(!t.length)return e;const s=t.shift();if(d(e)&&d(s))for(const t in s)d(s[t])?(e[t]||(e=Object.assign(Object.assign({},e),{[t]:{}})),e[t]=de(e[t],s[t])):e=Object.assign(Object.assign({},e),{[t]:s[t]});return de(e,...t)};class me{}var fe,ge,ye,xe,be;me.DESCRIPTION=Symbol("DESCRIPTION"),me.ERROR=Symbol("ERROR"),me.NAME=Symbol("NAME"),me.REQUIRED=Symbol("REQUIRED"),me.SOURCE=Symbol("SOURCE"),me.TYPE=Symbol("TYPE");class Ee{constructor(e){this[fe]="",this[ge]="",this[ye]="",this[xe]="any",this[be]=!1,this.rules=[],this.custom=[],this[me.TYPE]=e}description(e){return this[me.DESCRIPTION]=e,this}empty(e,t=!0){const s=e;return this.unshift((({value:e})=>{const r=l(e);return{stop:t&&!r,value:r?e:c(s)?s():s}}))}equal(e,t){const s=this.fn(e);return this.push((({value:e,context:r})=>{const n=s({value:e,context:r});return e==n?{value:e}:this.invalid(`.equal(${n})`,t)}))}error(e){return f(e)&&(this[me.ERROR]=e),this}filter(...e){const t=e;return this.unshift((({value:e})=>{const s=-1==t.indexOf(e);return{stop:!s,value:s?e:void 0}}))}fn(e){return c(e)?e:()=>e}from(e){return this[me.SOURCE]=e,this}invalid(e,t){return e=`[${this[me.TYPE]}]${e}`,{error:this[me.ERROR]?this[me.ERROR]:this[me.NAME]?this[me.NAME]+":"+e:e,message:t}}parse(){return this.unshift((({value:e})=>({value:e})))}push(e){return this.rules.push(e),this}required(e){return this[me.REQUIRED]=!0,this.unshift((({value:t})=>l(t)?{value:t}:this.invalid(".required",e)))}test(e){return!f(this.validate(e).error)}testAsync(e){return B(this,void 0,void 0,(function*(){return!f((yield this.validateAsync(e)).error)}))}unshift(e){return this.rules.unshift(e),this}validate(e,t){var s;if(this.custom.length)return this.invalid("[async]");let r={value:e};for(let e=0;e<this.rules.length;e++){if(r=this.rules[e]({value:r.value,context:t}),null===(s=r.error)||void 0===s?void 0:s.length)return Object.assign({error:r.error},r.message?{message:r.message}:{});if(r.stop)return{value:r.value}}return{value:r.value}}validateAsync(e,t){return B(this,void 0,void 0,(function*(){let s=this.validate(e,t);if(s.error)return{error:s.error};for(let e=0;e<this.custom.length;e++){if(s=yield this.custom[e]({value:s.value}),s.error)return{error:s.error};if(s.stop)return{value:s.value}}return{value:s.value}}))}}fe=me.NAME,ge=me.DESCRIPTION,me.SOURCE,ye=me.ERROR,xe=me.TYPE,be=me.REQUIRED;class we extends Ee{constructor(e){super("array"),this.push((({value:t})=>a(t)?{value:t}:this.invalid("",e)))}between(e,t,s){return this.min(e,s),this.max(t,s)}items(e,t){const s=e;return s?this.push((({value:e})=>{s[me.NAME]="";for(let r=0;r<e.length;r++){const{error:n,value:i}=s.validate(e[r],e);if(n)return this.invalid("< "+n+"["+r+"] >",t);e[r]=i}return{value:e}})):this}length(e,t){const s=e;return this.push((({value:e})=>e.length==s?{value:e}:this.invalid(".length("+s+")",t)))}max(e,t){const s=e;return this.push((({value:e})=>e.length<=s?{value:e}:this.invalid(".max("+s+")",t)))}min(e,t){const s=e;return this.push((({value:e})=>e.length>=s?{value:e}:this.invalid(".min("+s+")",t)))}}class Se extends Ee{constructor(e){super("boolean"),this.push((({value:t})=>u(t)?{value:t}:this.invalid("",e)))}parse(){return this.unshift((({value:e})=>({value:l(e)?x(e):e})))}}class Re extends Ee{constructor(e){super("date"),this.push((({value:t})=>f(t)&&t.length>=9&&!isNaN(new Date(t).getTime())?{value:t}:this.invalid("",e)))}format(e){const t=e;return this.push((({value:e})=>({value:q(t,new Date(e))})))}parse(){return this.unshift((({value:e})=>({value:new Date(f(e)&&e.length<=10?`${e} 12:00`:e)})))}}class Ce extends Ee{constructor(e){super("number"),this.push((({value:t})=>o(t)?{value:t}:this.invalid("",e)))}between(e,t,s){return this.min(e,s),this.max(t,s)}float(e){return this.push((({value:t})=>h(t)?{value:t}:this.invalid(".float",e)))}integer(e){return this.push((({value:t})=>v(t)?{value:t}:this.invalid(".integer",e)))}max(e,t){const s=this.fn(e);return this.push((({value:e,context:r})=>{const n=s({value:e,context:r});return e<=n?{value:e}:this.invalid(`.max(${n})`,t)}))}min(e,t){const s=this.fn(e);return this.push((({value:e,context:r})=>{const n=s({value:e,context:r});return e>=n?{value:e}:this.invalid(`.min(${n})`,t)}))}parse(){return this.unshift((({value:e})=>({value:l(e)?parseFloat(e.toString()):e})))}}class Oe extends Ee{constructor(e){super("object"),this.push((({value:t})=>p(t)?{value:t}:this.invalid("",e)))}keys(e,t){const s=e;return s?this.push((({value:e})=>{const r=[],n={};return Object.keys(s).forEach((i=>{var a;const u=s[i];u[me.NAME]=null!==(a=u[me.SOURCE])&&void 0!==a?a:i;const{error:o,message:h,value:c}=u.validate(e[u[me.NAME]],n);!t&&h&&(t=h),o&&r.push(o),l(c)&&(n[i]=c)})),r.length?this.invalid("{ "+r.join(", ")+" }",t):{value:n}})):this}parse(e){return this.unshift((({value:t})=>{if(!p(t))try{t=JSON.parse(t)}catch(t){return this.invalid("",e)}return{value:t}}))}}class Me extends Ee{constructor(e){super("string"),this.push((({value:t})=>f(t)?{value:t}:this.invalid("",e)))}between(e,t,s){return this.min(e,s),this.max(t,s)}email(e){const t=/^[\w-\\.]+@([\w-]+\.)+[\w-]{2,4}$/i;return this.push((({value:s})=>t.test(s)?{value:s}:this.invalid(".email",e)))}length(e,t){const s=this.fn(e);return this.push((({value:e,context:r})=>{const n=s({value:e,context:r});return e.length==n?{value:e}:this.invalid(`.length(${n})`,t)}))}lowerCase(){return this.push((({value:e})=>({value:e.toLowerCase()})))}lowerCamelCase(){return this.push((({value:e})=>({value:W(e)})))}max(e,t){const s=this.fn(e);return this.push((({value:e,context:r})=>{const n=s({value:e,context:r});return e.length<=n?{value:e}:this.invalid(`.max(${n})`,t)}))}mask(e){const t=this.fn(e);return this.push((({value:e,context:s})=>({value:ce(t({value:e,context:s}),e)})))}min(e,t){const s=this.fn(e);return this.push((({value:e,context:r})=>{const n=s({value:e,context:r});return e.length>=n?{value:e}:this.invalid(`.min(${n})`,t)}))}parse(){return this.unshift((({value:e})=>({value:p(e)?JSON.stringify(e):l(e)?e.toString():e})))}required(e){return this[me.REQUIRED]=!0,this.push((({value:t})=>t.length?{value:t}:this.invalid(".required",e)))}regex(e,t){return this.push((({value:s})=>e.test(s)?{value:s}:this.invalid(".regex",t)))}replace(e,t){const s=this.fn(e);return this.push((({value:e,context:r})=>({value:e.replace(s({value:e,context:r}),((...e)=>c(t)?t(...e):t))})))}trim(){return this.push((({value:e})=>({value:e.trim()})))}upperCase(){return this.push((({value:e})=>({value:e.toUpperCase()})))}upperCamelCase(){return this.push((({value:e})=>({value:ue(e)})))}}class Ae{static array(e,t){return new we(t).items(e)}static boolean(e){return new Se(e)}static date(e){return new Re(e)}static number(e){return new Ce(e)}static object(e,t){return new Oe(t).keys(e)}static ref(e,t){return({context:s})=>s&&l(s[e])?s[e]:t}static string(e){return new Me(e)}test(e,...t){return!f(Ae.validate(e,...t).error)}testAsync(e,...t){return B(this,void 0,void 0,(function*(){return!f((yield Ae.validateAsync(e,...t)).error)}))}static validate(e,...t){let s={value:e};for(let e=0;e<t.length;e++)if(s=t[e].validate(s.value),s.error)return{value:s.value,error:s.error};return{value:s.value}}static validateAsync(e,...t){return B(this,void 0,void 0,(function*(){let s={value:e};for(let e=0;e<t.length;e++)if(s=yield t[e].validateAsync(s.value),s.error)return{value:s.value,error:s.error};return{value:s.value}}))}}return e.EventEmitter=class{constructor(){this.events=new Map}on(e,t){const s=this.events.get(e);return s?s.push(t):this.events.set(e,[t]),{dispose:()=>this.off(e,t)}}once(e,t){const s=r=>{t(r),this.off(e,s)};return this.on(e,s),{dispose:()=>this.off(e,s)}}off(e,t){const s=this.events.get(e);if(t){if(s){const e=s.indexOf(t);e>=0&&s.splice(e,1)}}else this.events.set(e,[])}emit(e,t){const s=this.events.get(e);s&&s.forEach((e=>e(t)))}},e.Hash=D,e.RandomString=ie,e.Validation=Ae,e.ValidationBase=Ee,e.ValidationKeys=me,e.allowed=pe,e.cache=()=>{const e=[],t=[];return s=>{let r=e.indexOf(s);return-1==r&&(e.push(s),t.push({}),r=t.length-1),t[r]}},e.camelCase=G,e.chunkArray=(e,t)=>{const s=[];for(let r=0;r<e.length;r+=t)s.push(e.slice(r,r+t));return s},e.clamp=t,e.colorPalette=(e,t)=>w(null!=t?t:I,(t=>0==t?e:t>0?A(e,t):M(e,1- -1*t))),e.compareArray=(e,t)=>e.length===t.length&&e.every(((e,s)=>e===t[s])),e.countArray=e=>{const t={};return e.forEach((e=>{const s=e.toString();t[s]=(t[s]||0)+1})),t},e.cutText=(e,t)=>{if(e.length>t){const s=e.substring(0,t).split(" ");return s.pop(),s.join(" ")+"..."}return e},e.dateFormat=q,e.dateRange=(e,t)=>{const s=new Date(e),r=[];for(;e<t;)s.setDate(s.getDate()+1),r.push(new Date(s));return r},e.debounce=(e,t)=>{let s;const r=()=>{s&&clearTimeout(s)};return{cancel:r,run(...n){r(),s=setTimeout((()=>e(...n)),t)}}},e.decodeHTML=e=>e.replace(X,((e,t)=>ee[t])).replace(/&#(\d+);/gi,((e,t)=>String.fromCharCode(parseInt(t,10)))),e.denied=(e,t)=>pe(Object.keys(t).filter((t=>-1==e.indexOf(t))),t),e.each=(e,t,s)=>a(e)?b(e,t,s):p(e)?E(e,t,s):e,e.encodeHTML=e=>e.replace(/[^0-9A-Za-z ]/g,(e=>"&#"+e.charCodeAt(0)+";")),e.forEachAsync=(e,t,s)=>B(void 0,void 0,void 0,(function*(){yield Promise.allSettled(e.map(((r,n)=>t.call(s,r,n,e)))).catch(Z)})),e.forEachIndex=b,e.forEachKey=E,e.forEachSeries=(e,t,s)=>B(void 0,void 0,void 0,(function*(){for(let r=0;r<e.length;r++)yield t.call(s,e[r],r,e).catch(Z)})),e.forLoop=(e,t,s)=>{for(let r=1;r<=e&&!1!==t.call(s,r,e);r++);return e},e.hexToRgb=R,e.hslToRgb=(e,t,s)=>{e/=60;const r=(1-Math.abs(2*s-1))*t,n=r*(1-Math.abs(e%2-1));let i=[0,0,0];e<=1?i=[r,n,0]:e<=2?i=[n,r,0]:e<=3?i=[0,r,n]:e<=4?i=[0,n,r]:e<=5?i=[n,0,r]:e<=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))]},e.isArray=a,e.isBoolean=u,e.isCharacter=e=>/^[\w]$/.test(e),e.isDate=e=>"date"==i(e),e.isDef=l,e.isDigit=te,e.isEmpty=z,e.isFalse=e=>!V(e),e.isFloat=h,e.isFunction=c,e.isInteger=v,e.isLetter=se,e.isMap=e=>"map"==i(e),e.isNotEmpty=e=>!z(e),e.isNull=e=>null===e,e.isNumber=o,e.isObject=p,e.isPlainObject=d,e.isRegExp=e=>"regexp"==i(e),e.isScalar=e=>-1!=m.indexOf(i(e)),e.isSet=e=>"set"==i(e),e.isSpecialChar=re,e.isString=f,e.isSymbol=e=>"symbol"==typeof e,e.isTrue=V,e.isUndefined=g,e.lerp=(e,s,r)=>e+(s-e)*t(r,0,1),e.loop=(e,t)=>{let s=!1;const r=()=>B(void 0,void 0,void 0,(function*(){s&&(yield e(),setTimeout(r,t))}));return{start(){s||(s=!0,r())},stop(){s=!1}}},e.lowerCamelCase=W,e.map=w,e.mask=ce,e.maskMoney=(e,t,s)=>(s++,t=parseInt((t||"0").replace(/\D/g,"")).toString(),ve(e,t.length<s?("0".repeat(s)+t).slice(-1*s):t)),e.maskReverse=ve,e.maskTest=(e,t)=>e.length==ce(e,t).length,e.merge=de,e.msToString=e=>{const t=[];return Q.forEach((s=>{const r=H[s],n=(e-e%r)/r;n&&(e-=n*r,t.push(n.toString()+s))})),t.join(" ")},e.noop=Z,e.parseMs=e=>{const t=/(-?(?:\d+)?\.?\d+) *(ms|s|m|h|d|w|y)/gm;let s,r=0;for(;null!==(s=t.exec(e));)s.index===t.lastIndex&&t.lastIndex++,r+=parseFloat(s[1])*H[s[2]]||0;return r},e.parseSize=e=>{if(o(e))return e+"px";const t=(e=>/(-?(?:\d+)?\.?\d+) *(px|%|cm|mm|in|pt|pc|en|ex|ch|rem|vw|vh|vmin|vmax)*/g.exec(e))(e);return t?parseFloat(t[1])+(t[2]||"px"):"0px"},e.random=s,e.randomCase=e=>e.split("").map((e=>Math.random()<.5?e.toUpperCase():e.toLowerCase())).join(""),e.randomElement=e=>e.length?e[s(0,e.length-1)]:null,e.rangeArray=(e,t,s=1)=>Array.from({length:(t-e)/s+1},((t,r)=>e+r*s)),e.rgbToHex=O,e.rgbToHsl=(e,t,s)=>{const[r,n,i]=((...e)=>e.map((e=>e/255)))(e,t,s),a=Math.max(r,n,i),u=Math.min(r,n,i),l=a-u,o=(u+a)/2;return[60*k(l,a,r,n,i),j(l,o),o]},e.shadeColor=M,e.shuffleArray=r,e.shuffleString=ne,e.simpleID=()=>N()+U(),e.sleep=e=>new Promise((t=>setTimeout(t,e))),e.stringReverse=ae,e.tintColor=A,e.toArray=e=>a(e)?e:l(e)?[e]:[],e.toBool=x,e.type=i,e.uniqueArray=e=>e.filter(((e,t,s)=>s.indexOf(e)===t)),e.uniqueID=()=>L()+L()+L()+L(),e.upperCamelCase=ue,e.uuidv4=()=>P()+"-"+U()+"-4"+N()+"-"+U()+"-"+(P()+U()),e}({});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@andrewcaires/utils.js",
3
- "version": "0.4.6",
3
+ "version": "0.4.7",
4
4
  "description": "JavaScript utility library for web and nodejs development",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs.js",
@@ -47,12 +47,12 @@
47
47
  "@rollup/plugin-commonjs": "^28.0.3",
48
48
  "@rollup/plugin-terser": "^0.4.4",
49
49
  "@rollup/plugin-typescript": "^12.1.2",
50
- "@types/node": "^22.13.13",
51
- "eslint": "^9.23.0",
52
- "rollup": "^4.37.0",
50
+ "@types/node": "^22.15.18",
51
+ "eslint": "^9.27.0",
52
+ "rollup": "^4.41.0",
53
53
  "rollup-plugin-dts": "^6.2.1",
54
54
  "tslib": "^2.8.1",
55
- "tsx": "^4.19.3",
56
- "typescript-eslint": "^8.28.0"
55
+ "tsx": "^4.19.4",
56
+ "typescript-eslint": "^8.32.1"
57
57
  }
58
58
  }