@andrewcaires/utils.js 0.4.3 → 0.4.5

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.3
2
+ * @andrewcaires/utils.js v0.4.5
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,r)=>Math.max(t,Math.min(r,e)),t=(e,t)=>Math.floor(Math.random()*(t-e+1)+e),r=e=>{for(let r=e.length-1;r>0;r--){const s=t(0,r);[e[r],e[s]]=[e[s],e[r]]}return e},s={},n=e=>null==e?"null":s[s.toString.call(e)]||"object";["Array","AsyncFunction","Boolean","Date","Function","Map","Number","Object","RegExp","Set","String"].forEach((e=>s["[object "+e+"]"]=e.toLowerCase()));const a=e=>"array"==n(e),i=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,r)=>{for(let s=0;s<e.length&&!1!==t.call(r,e[s],s,e);s++);return e},b=(e,t,r)=>{let s="";const n=Object.keys(e);for(let a=0;a<n.length&&(s=n[a],!1!==t.call(r,e[s],s,e));a++);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,C=e=>{var t;return(null===(t=e.replace(/^#/,"").match(/.{1,2}/g))||void 0===t?void 0:t.map(S))||[]},k=e=>("0"+e.toString(16)).slice(-2),O=(e,t,r)=>"#"+k(e)+k(t)+k(r),j=(t,r)=>{const s=C(t);r=e(r,0,1);const[n,a,i]=s.map((e=>Math.round(e*r)));return O(n,a,i)},M=(t,r)=>{const s=C(t);r=e(r,0,1);const[n,a,i]=s.map((e=>Math.round(e+(255-e)*r)));return O(n,a,i)},A={50:.95,100:.9,200:.75,300:.6,400:.3,500:0,600:-.1,700:-.25,800:-.4,900:-.55,950:-.71},E=(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,I=(e,t)=>0===e?0:e/(1-Math.abs(2*t-1));class _{constructor(e){this.key=this.shuffle(_.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[_.dictionary.indexOf(e[r]),_.dictionary.indexOf(t[r%t.length])]}result(e,t,r){return _.dictionary[(r?e-t+_.dictionary.length:e+t)%_.dictionary.length]}shuffle(e,t,r){let s="";for(let n=0;n<e.length;n++){const[a,i]=this.index(e,t,n);s+=-1===a||-1===i?e[n]:this.result(a,i,r)}return s}}_.dictionary="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";const D=e=>Math.random().toString(16).slice(e),T=()=>D(-3),L=()=>D(-4),$=()=>L()+L(),F=()=>$()+$(),N=e=>("0"+e.toString()).slice(-2),q={"%y":e=>N(e.getFullYear()),"%Y":e=>e.getFullYear().toString(),"%m":e=>N(e.getMonth()+1),"%d":e=>N(e.getDate()),"%H":e=>N(e.getHours()),"%M":e=>N(e.getMinutes()),"%S":e=>N(e.getSeconds())},U=(e,t)=>(t=null!=t?t:new Date,e.replace(/%[yYmdHMS]/g,(e=>q[e]?q[e](t):e.slice(1)))),H=36e5,R=24*H,P={ms:1,s:1e3,m:6e4,h:H,d:R,w:7*R,y:315576e5},B=["y","d","h","m","s","ms"];function Y(e,t,r,s){return new(r||(r=Promise))((function(n,a){function i(e){try{u(s.next(e))}catch(e){a(e)}}function o(e){try{u(s.throw(e))}catch(e){a(e)}}function u(e){e.done?n(e.value):function(e){return e instanceof r?e:new r((function(t){t(e)}))}(e.value).then(i,o)}u((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)},Z=["",0,"0",null,!1,void 0],J=e=>-1==Z.indexOf(e),V=()=>{},K=(e,t)=>t(e.toLowerCase().replace(/\W+/g," ")).replace(/\s/g,""),W=e=>K(e,(e=>e.replace(/\s(\w)/g,(e=>e.toUpperCase())))),G=W,Q=/&(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),re=e=>/^[^\w]$/.test(e),se=e=>r(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 r="";this.hasSpace&&(r+=this._space),this.hasNumbers&&(r+=this._numbers),this.hasSymbols&&(r+=this._symbols),this.hasUpper&&!this.hasChars&&(r+=this._upper),this.hasLower&&!this.hasChars&&(r+=this._lower),this.hasChars&&(r+=this._chars);let s="";if(e&&r.length){r=se(r);for(let n=0;n<e;n++)s+=r.charAt(t(0,r.length-1))}return s}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 ae=e=>e.split("").reverse().join(""),ie=e=>K(e,(e=>e.replace(/(\w)(\w*)/g,((e,t,r)=>t.toUpperCase()+r)))),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,re)},le=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:a,value:i}=e;return m(a)||m(i)?"":(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)=>ae(he(ae(e),ae(t))),pe=(e,t)=>e.reduce(((e,r)=>Object.assign(Object.assign({},e),{[r]:t[r]})),{}),ve=(e,...t)=>{if(!t.length)return e;const r=t.shift();if(v(e)&&v(r))for(const t in r)v(r[t])?(e[t]||(e=Object.assign(Object.assign({},e),{[t]:{}})),e[t]=ve(e[t],r[t])):e=Object.assign(Object.assign({},e),{[t]:r[t]});return ve(e,...t)};class xe{constructor(e){this.name="",this._error="",this._type="any",this.rules=[],this.custom=[],this._type=e}empty(e){const t=e;return this.unshift((({value:e})=>{const r=o(e);return{break:!r,value:r?e:h(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 d(e)&&(this._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 h(e)?e:()=>e}from(e){return this.source=e,this}invalid(e,t){return e=`[${this._type}]${e}`,{error:this._error?this._error:this.name?this.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.unshift((({value:t})=>o(t)?{value:t}:this.invalid(".required",e)))}test(e){return!d(this.validate(e).error)}testAsync(e){return Y(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 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 Y(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}}))}}class de extends xe{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.name="";for(let s=0;s<e.length;s++){const{error:n,value:a}=r.validate(e[s],e);if(n)return this.invalid("< "+n+"["+s+"] >",t);e[s]=a}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 me extends xe{constructor(e){super("boolean"),this.push((({value:t})=>i(t)?{value:t}:this.invalid("",e)))}parse(){return this.unshift((({value:e})=>({value:o(e)?g(e):e})))}}class fe extends xe{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:U(t,new Date(e))})))}parse(){return this.unshift((({value:e})=>({value:new Date(d(e)&&e.length<=10?`${e} 12:00`:e)})))}}class ge extends xe{constructor(e){super("number"),this.push((({value:t})=>u(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})=>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 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:o(e)?parseFloat(e.toString()):e})))}}class ye extends xe{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((a=>{var i;const u=r[a];u.name=null!==(i=u.source)&&void 0!==i?i:a;const{error:l,message:h,value:c}=u.validate(e[u.name],n);!t&&h&&(t=h),l&&s.push(l),o(c)&&(n[a]=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 be extends xe{constructor(e){super("string"),this.push((({value:t})=>d(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:he(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):o(e)?e.toString():e})))}required(e){return 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)=>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:ie(e)})))}}class we{static array(e,t){return new de(t).items(e)}static boolean(e){return new me(e)}static date(e){return new fe(e)}static number(e){return new ge(e)}static object(e,t){return new ye(t).keys(e)}static ref(e,t){return({context:r})=>r&&o(r[e])?r[e]:t}static string(e){return new be(e)}test(e,...t){return!d(we.validate(e,...t).error)}testAsync(e,...t){return Y(this,void 0,void 0,(function*(){return!d((yield we.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 Y(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}}))}}exports.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)))}},exports.Hash=_,exports.RandomString=ne,exports.Validation=we,exports.ValidationBase=xe,exports.allowed=pe,exports.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]}},exports.camelCase=G,exports.chunkArray=(e,t)=>{const r=[];for(let s=0;s<e.length;s+=t)r.push(e.slice(s,s+t));return r},exports.clamp=e,exports.colorPalette=(e,t)=>w(null!=t?t:A,(t=>0==t?e:t>0?M(e,t):j(e,1- -1*t))),exports.countArray=e=>{const t={};return e.forEach((e=>{const r=e.toString();t[r]=(t[r]||0)+1})),t},exports.cutText=(e,t)=>{if(e.length>t){const r=e.substring(0,t).split(" ");return r.pop(),r.join(" ")+"..."}return e},exports.dateFormat=U,exports.dateRange=(e,t)=>{const r=new Date(e),s=[];for(;e<t;)r.setDate(r.getDate()+1),s.push(new Date(r));return s},exports.debounce=(e,t)=>{let r;const s=()=>{r&&clearTimeout(r)};return{cancel:s,run(...n){s(),r=setTimeout((()=>e(...n)),t)}}},exports.decodeHTML=e=>e.replace(Q,((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,r)=>a(e)?y(e,t,r):p(e)?b(e,t,r):e,exports.encodeHTML=e=>e.replace(/[^0-9A-Za-z ]/g,(e=>"&#"+e.charCodeAt(0)+";")),exports.forEachAsync=(e,t,r)=>Y(void 0,void 0,void 0,(function*(){yield Promise.allSettled(e.map(((s,n)=>t.call(r,s,n,e)))).catch(V)})),exports.forEachIndex=y,exports.forEachKey=b,exports.forEachSeries=(e,t,r)=>Y(void 0,void 0,void 0,(function*(){for(let s=0;s<e.length;s++)yield t.call(r,e[s],s,e).catch(V)})),exports.forLoop=(e,t,r)=>{for(let s=1;s<=e&&!1!==t.call(r,s,e);s++);return e},exports.hexToRgb=C,exports.hslToRgb=(e,t,r)=>{e/=60;const s=(1-Math.abs(2*r-1))*t,n=s*(1-Math.abs(e%2-1));let a=[0,0,0];e<=1?a=[s,n,0]:e<=2?a=[n,s,0]:e<=3?a=[0,s,n]:e<=4?a=[0,n,s]:e<=5?a=[n,0,s]:e<=6&&(a=[s,0,n]);const i=r-.5*s;return[Math.round(255*(a[0]+i)),Math.round(255*(a[1]+i)),Math.round(255*(a[2]+i))]},exports.isArray=a,exports.isBoolean=i,exports.isCharacter=e=>/^[\w]$/.test(e),exports.isDate=e=>"date"==n(e),exports.isDef=o,exports.isDigit=ee,exports.isEmpty=z,exports.isFalse=e=>!J(e),exports.isFloat=l,exports.isFunction=h,exports.isInteger=c,exports.isLetter=te,exports.isMap=e=>"map"==n(e),exports.isNotEmpty=e=>!z(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=re,exports.isString=d,exports.isSymbol=e=>"symbol"==typeof e,exports.isTrue=J,exports.isUndefined=m,exports.lerp=(t,r,s)=>t+(r-t)*e(s,0,1),exports.loop=(e,t)=>{let r=!1;const s=()=>Y(void 0,void 0,void 0,(function*(){r&&(yield e(),setTimeout(s,t))}));return{start(){r||(r=!0,s())},stop(){r=!1}}},exports.lowerCamelCase=W,exports.map=w,exports.mask=he,exports.maskMoney=(e,t,r)=>(r++,t=parseInt((t||"0").replace(/\D/g,"")).toString(),ce(e,t.length<r?("0".repeat(r)+t).slice(-1*r):t)),exports.maskReverse=ce,exports.maskTest=(e,t)=>e.length==he(e,t).length,exports.merge=ve,exports.msToString=e=>{const t=[];return B.forEach((r=>{const s=P[r],n=(e-e%s)/s;n&&(e-=n*s,t.push(n.toString()+r))})),t.join(" ")},exports.noop=V,exports.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])*P[r[2]]||0;return s},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,r=1)=>Array.from({length:(t-e)/r+1},((t,s)=>e+s*r)),exports.rgbToHex=O,exports.rgbToHsl=(e,t,r)=>{const[s,n,a]=((...e)=>e.map((e=>e/255)))(e,t,r),i=Math.max(s,n,a),o=Math.min(s,n,a),u=i-o,l=(o+i)/2;return[60*E(u,i,s,n,a),I(u,l),l]},exports.shadeColor=j,exports.shuffleArray=r,exports.shuffleString=se,exports.simpleID=()=>T()+L(),exports.sleep=e=>new Promise((t=>setTimeout(t,e))),exports.stringReverse=ae,exports.tintColor=M,exports.toArray=e=>a(e)?e:o(e)?[e]:[],exports.toBool=g,exports.type=n,exports.uniqueArray=e=>e.filter(((e,t,r)=>r.indexOf(e)===t)),exports.uniqueID=()=>F()+F()+F()+F(),exports.upperCamelCase=ie,exports.uuidv4=()=>$()+"-"+L()+"-4"+T()+"-"+L()+"-"+($()+L());
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))||[]},C=e=>("0"+e.toString(16)).slice(-2),O=(e,t,s)=>"#"+C(e)+C(t)+C(s),R=(t,s)=>{const r=S(t);s=e(s,0,1);const[n,i,a]=r.map((e=>Math.round(e*s)));return O(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 O(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 B(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 Q=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 B(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 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.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 Ce 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 Oe 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 Re 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.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 Ce(e)}static object(e,t){return new Oe(t).keys(e)}static ref(e,t){return({context:s})=>s&&o(s[e])?s[e]:t}static string(e){return new Re(e)}test(e,...t){return!d(Me.validate(e,...t).error)}testAsync(e,...t){return B(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 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}}))}}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):R(e,1- -1*t))),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)=>B(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)=>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)})),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=Q,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=>!Q(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=()=>B(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=O,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=R,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.3
2
+ * @andrewcaires/utils.js v0.4.5
3
3
  * JavaScript utility library for web and nodejs development
4
4
  * (c) 2025 Andrew Caires
5
5
  * @license: MIT
@@ -211,7 +211,7 @@ declare const forEachSeries: <T>(array: Array<T>, callback: ForEachCallback<T>,
211
211
 
212
212
  declare const sleep: (ms: number) => Promise<void>;
213
213
 
214
- declare const camelCase: (str: string) => string;
214
+ declare const camelCase: (str: string, space?: string) => string;
215
215
 
216
216
  declare const cutText: (str: string, length: number) => string;
217
217
 
@@ -227,7 +227,7 @@ declare const isLetter: (str: string) => boolean;
227
227
 
228
228
  declare const isSpecialChar: (str: string) => boolean;
229
229
 
230
- declare const lowerCamelCase: (str: string) => string;
230
+ declare const lowerCamelCase: (str: string, space?: string) => string;
231
231
 
232
232
  declare const parseSize: (size: number | string) => string;
233
233
 
@@ -265,18 +265,30 @@ declare const shuffleString: (str: string) => string;
265
265
 
266
266
  declare const stringReverse: (str: string) => string;
267
267
 
268
- declare const upperCamelCase: (str: string) => string;
268
+ declare const upperCamelCase: (str: string, space?: string) => string;
269
269
 
270
270
  type ValidationCallback<T = any> = (value: IValidationInput<T>) => IValidationOutput<T>;
271
271
 
272
+ declare class ValidationKeys {
273
+ static readonly DESCRIPTION: unique symbol;
274
+ static readonly ERROR: unique symbol;
275
+ static readonly NAME: unique symbol;
276
+ static readonly REQUIRED: unique symbol;
277
+ static readonly SOURCE: unique symbol;
278
+ static readonly TYPE: unique symbol;
279
+ }
280
+
272
281
  declare class ValidationBase<T = any> {
273
- name: string;
274
- source?: string;
275
- private _error;
276
- private _type;
282
+ [ValidationKeys.NAME]: string;
283
+ [ValidationKeys.DESCRIPTION]: string;
284
+ [ValidationKeys.SOURCE]?: string;
285
+ [ValidationKeys.ERROR]: string;
286
+ [ValidationKeys.TYPE]: string;
287
+ [ValidationKeys.REQUIRED]: boolean;
277
288
  private rules;
278
289
  private custom;
279
290
  constructor(type: string);
291
+ description(value: string): this;
280
292
  empty(value?: T | TypeCallbackFunction<T>): this;
281
293
  equal(value: T | IValidationFunction<T>, message?: string): this;
282
294
  error(value?: string): this;
@@ -380,4 +392,4 @@ declare class Validation {
380
392
 
381
393
  type ValidationCallbackAsync<T = any> = (value: IValidationInput<T>) => Promise<IValidationOutput<T>>;
382
394
 
383
- export { type CacheCallback, type EachCallback, type EachValue, type EventCallback, EventEmitter, type EventList, type ForEachCallback, Hash, type IDebounceCallbacks, type IEventDisposable, type ILoopCallbacks, type IValidationFunction, type IValidationInput, type IValidationOutput, RandomString, type TypeArray, type TypeArrayAny, type TypeArrayFunction, type TypeArrayNumber, type TypeArrayString, type TypeCallback, type TypeCallbackArray, type TypeCallbackFunction, type TypeCallbackMap, type TypeCallbackObject, type TypeKey, type TypeNullable, type TypeObject, type TypeObjectAny, type TypeObjectBoolean, type TypeObjectFunction, type TypeObjectNullable, type TypeObjectNumber, type TypeObjectString, type TypeScalar, Validation, ValidationBase, type ValidationCallback, type ValidationCallbackAsync, allowed, cache, camelCase, chunkArray, clamp, colorPalette, countArray, cutText, dateFormat, dateRange, debounce, decodeHTML, denied, each, encodeHTML, forEachAsync, forEachIndex, forEachKey, forEachSeries, forLoop, hexToRgb, hslToRgb, isArray, isBoolean, isCharacter, isDate, isDef, isDigit, isEmpty, isFalse, isFloat, isFunction, isInteger, isLetter, isMap, isNotEmpty, isNull, isNumber, isObject, isPlainObject, isRegExp, isScalar, isSet, isSpecialChar, isString, isSymbol, isTrue, isUndefined, lerp, loop, lowerCamelCase, map, mask, maskMoney, maskReverse, maskTest, merge, msToString, noop, parseMs, parseSize, random, randomCase, randomElement, rangeArray, rgbToHex, rgbToHsl, shadeColor, shuffleArray, shuffleString, simpleID, sleep, stringReverse, tintColor, toArray, toBool, type, uniqueArray, uniqueID, upperCamelCase, uuidv4 };
395
+ export { type CacheCallback, type EachCallback, type EachValue, type EventCallback, EventEmitter, type EventList, type ForEachCallback, Hash, type IDebounceCallbacks, type IEventDisposable, type ILoopCallbacks, type IValidationFunction, type IValidationInput, type IValidationOutput, RandomString, type TypeArray, type TypeArrayAny, type TypeArrayFunction, type TypeArrayNumber, type TypeArrayString, type TypeCallback, type TypeCallbackArray, type TypeCallbackFunction, type TypeCallbackMap, type TypeCallbackObject, type TypeKey, type TypeNullable, type TypeObject, type TypeObjectAny, type TypeObjectBoolean, type TypeObjectFunction, type TypeObjectNullable, type TypeObjectNumber, type TypeObjectString, type TypeScalar, Validation, ValidationBase, type ValidationCallback, type ValidationCallbackAsync, ValidationKeys, allowed, cache, camelCase, chunkArray, clamp, colorPalette, countArray, cutText, dateFormat, dateRange, debounce, decodeHTML, denied, each, encodeHTML, forEachAsync, forEachIndex, forEachKey, forEachSeries, forLoop, hexToRgb, hslToRgb, isArray, isBoolean, isCharacter, isDate, isDef, isDigit, isEmpty, isFalse, isFloat, isFunction, isInteger, isLetter, isMap, isNotEmpty, isNull, isNumber, isObject, isPlainObject, isRegExp, isScalar, isSet, isSpecialChar, isString, isSymbol, isTrue, isUndefined, lerp, loop, lowerCamelCase, map, mask, maskMoney, maskReverse, maskTest, merge, msToString, noop, parseMs, parseSize, random, randomCase, randomElement, rangeArray, rgbToHex, rgbToHsl, shadeColor, shuffleArray, shuffleString, simpleID, sleep, stringReverse, tintColor, toArray, toBool, type, uniqueArray, uniqueID, upperCamelCase, uuidv4 };
package/dist/index.esm.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /*!
2
- * @andrewcaires/utils.js v0.4.3
2
+ * @andrewcaires/utils.js v0.4.5
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=>{const e={};return t.forEach((t=>{const r=t.toString();e[r]=(e[r]||0)+1})),e},r=(t,e,r)=>Math.max(e,Math.min(r,t)),s=(t,e,s)=>t+(e-t)*r(s,0,1),n=(t,e)=>Math.floor(Math.random()*(e-t+1)+t),i=t=>t.length?t[n(0,t.length-1)]:null,a=(t,e,r=1)=>Array.from({length:(e-t)/r+1},((e,s)=>t+s*r)),u=t=>{for(let e=t.length-1;e>0;e--){const r=n(0,e);[t[e],t[r]]=[t[r],t[e]]}return t},l={},o=t=>null==t?"null":l[l.toString.call(t)]||"object";["Array","AsyncFunction","Boolean","Date","Function","Map","Number","Object","RegExp","Set","String"].forEach((t=>l["[object "+t+"]"]=t.toLowerCase()));const h=t=>"array"==o(t),c=t=>"boolean"==o(t),v=t=>"date"==o(t),p=t=>"null"!=o(t),d=t=>"number"==o(t),f=t=>d(t)&&!!(t%1),m=t=>"function"==typeof t,g=t=>d(t)&&!(t%1),x=t=>"map"==o(t),y=t=>null===t,b=t=>"object"==o(t),w=t=>b(t)&&t.constructor===Object,S=t=>"regexp"==o(t),k=["boolean","number","string"],O=t=>-1!=k.indexOf(o(t)),j=t=>"set"==o(t),C=t=>"string"==typeof t,M=t=>"symbol"==typeof t,_=t=>void 0===t,A=t=>h(t)?t:p(t)?[t]:[],I=t=>t.filter(((t,e,r)=>r.indexOf(t)===e)),$=[1,"1",!0,"true"],D=t=>-1!=$.indexOf(t),E=()=>{const t=[],e=[];return r=>{let s=t.indexOf(r);return-1==s&&(t.push(r),e.push({}),s=e.length-1),e[s]}},L=(t,e,r)=>{for(let s=0;s<t.length&&!1!==e.call(r,t[s],s,t);s++);return t},U=(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},q=(t,e,r)=>h(t)?L(t,e,r):b(t)?U(t,e,r):t,N=(t,e,r)=>{for(let s=1;s<=t&&!1!==e.call(r,s,t);s++);return t},F=(t,e,r)=>Object.fromEntries(Object.entries(t).map((([s,n])=>[s,e.call(r,n,s,t)]))),T=t=>parseInt(null!=t?t:"0",16)||0,Y=t=>{var e;return(null===(e=t.replace(/^#/,"").match(/.{1,2}/g))||void 0===e?void 0:e.map(T))||[]},H=t=>("0"+t.toString(16)).slice(-2),P=(t,e,r)=>"#"+H(t)+H(e)+H(r),Z=(t,e)=>{const s=Y(t);e=r(e,0,1);const[n,i,a]=s.map((t=>Math.round(t*e)));return P(n,i,a)},z=(t,e)=>{const s=Y(t);e=r(e,0,1);const[n,i,a]=s.map((t=>Math.round(t+(255-t)*e)));return P(n,i,a)},J={50:.95,100:.9,200:.75,300:.6,400:.3,500:0,600:-.1,700:-.25,800:-.4,900:-.55,950:-.71},B=(t,e)=>F(null!=e?e:J,(e=>0==e?t:e>0?z(t,e):Z(t,1- -1*e))),R=(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,o=(u+a)/2;return[60*W(l,a,s,n,i),G(l,o),o]};class Q{constructor(t){this.key=this.shuffle(Q.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[Q.dictionary.indexOf(t[r]),Q.dictionary.indexOf(e[r%e.length])]}result(t,e,r){return Q.dictionary[(r?t-e+Q.dictionary.length:t+e)%Q.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}}Q.dictionary="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";const V=t=>Math.random().toString(16).slice(t),X=()=>V(-3),tt=()=>V(-4),et=()=>tt()+tt(),rt=()=>et()+et(),st=()=>X()+tt(),nt=()=>rt()+rt()+rt()+rt(),it=()=>et()+"-"+tt()+"-4"+X()+"-"+tt()+"-"+(et()+tt()),at=t=>("0"+t.toString()).slice(-2),ut={"%y":t=>at(t.getFullYear()),"%Y":t=>t.getFullYear().toString(),"%m":t=>at(t.getMonth()+1),"%d":t=>at(t.getDate()),"%H":t=>at(t.getHours()),"%M":t=>at(t.getMinutes()),"%S":t=>at(t.getSeconds())},lt=(t,e)=>(e=null!=e?e:new Date,t.replace(/%[yYmdHMS]/g,(t=>ut[t]?ut[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},ht=36e5,ct=24*ht,vt={ms:1,s:1e3,m:6e4,h:ht,d:ct,w:7*ct,y:315576e5},pt=["y","d","h","m","s","ms"],dt=t=>{const e=[];return pt.forEach((r=>{const s=vt[r],n=(t-t%s)/s;n&&(t-=n*s,e.push(n.toString()+r))})),e.join(" ")},ft=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])*vt[r[2]]||0;return s},mt=(t,e)=>{let r;const s=()=>{r&&clearTimeout(r)};return{cancel:s,run(...n){s(),r=setTimeout((()=>t(...n)),e)}}};class gt{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 xt(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 yt=(t,e)=>{let r=!1;const s=()=>xt(void 0,void 0,void 0,(function*(){r&&(yield t(),setTimeout(s,e))}));return{start(){r||(r=!0,s())},stop(){r=!1}}},bt=t=>{var e;return 0==(null!==(e=null==t?void 0:t.length)&&void 0!==e?e:0)},wt=["",0,"0",null,!1,void 0],St=t=>-1==wt.indexOf(t),kt=t=>!St(t),Ot=t=>!bt(t),jt=()=>{},Ct=(t,e)=>e(t.toLowerCase().replace(/\W+/g," ")).replace(/\s/g,""),Mt=t=>Ct(t,(t=>t.replace(/\s(\w)/g,(t=>t.toUpperCase())))),_t=Mt,At=(t,e)=>{if(t.length>e){const r=t.substring(0,e).split(" ");return r.pop(),r.join(" ")+"..."}return t},It=/&(amp|apos|lt|gt|nbsp|quot);/g,$t={amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",quot:'"'},Dt=t=>t.replace(It,((t,e)=>$t[e])).replace(/&#(\d+);/gi,((t,e)=>String.fromCharCode(parseInt(e,10)))),Et=t=>t.replace(/[^0-9A-Za-z ]/g,(t=>"&#"+t.charCodeAt(0)+";")),Lt=t=>/^[\w]$/.test(t),Ut=t=>/^[\d]$/.test(t),qt=t=>/^[A-Za-z]$/.test(t),Nt=t=>/^[^\w]$/.test(t),Ft=t=>{if(d(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"},Tt=t=>t.split("").map((t=>Math.random()<.5?t.toUpperCase():t.toLowerCase())).join(""),Yt=t=>u(t.split("")).join("");class Ht{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 Ht).chars()}lower(){return this.hasLower=!0,this}static lower(){return(new Ht).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=Yt(e);for(let s=0;s<t;s++)r+=e.charAt(n(0,e.length-1))}return r}numbers(){return this.hasNumbers=!0,this}static numbers(){return(new Ht).numbers()}space(){return this.hasSpace=!0,this}static space(){return(new Ht).space()}symbols(){return this.hasSymbols=!0,this}static symbols(){return(new Ht).symbols()}upper(){return this.hasUpper=!0,this}static upper(){return(new Ht).upper()}}const Pt=t=>t.split("").reverse().join(""),Zt=t=>Ct(t,(t=>t.replace(/(\w)(\w*)/g,((t,e,r)=>e.toUpperCase()+r)))),zt=(t,e)=>e(t.value)?t.value:(t=>(t.maskIndex--,""))(t),Jt={"#":t=>t.value,0:t=>zt(t,Ut),9:t=>zt(t,Ut),A:t=>zt(t,qt),Z:t=>zt(t,qt),L:t=>zt(t,qt).toLowerCase(),U:t=>zt(t,qt).toUpperCase(),S:t=>zt(t,Nt)},Bt=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)||_(a)?"":(t=>Jt[t.key]?Jt[t.key](t):(t.key!=t.value&&t.textIndex--,t.key))(t)+Bt(t)},Rt=(t,e)=>Bt({mask:t,maskIndex:-1,text:e,textIndex:-1,key:"",value:""}),Wt=(t,e)=>Pt(Rt(Pt(t),Pt(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==Rt(t,e).length,Qt=(t,e)=>t.reduce(((t,r)=>Object.assign(Object.assign({},t),{[r]:e[r]})),{}),Vt=(t,e)=>Qt(Object.keys(e).filter((e=>-1==t.indexOf(e))),e),Xt=(t,...e)=>{if(!e.length)return t;const r=e.shift();if(w(t)&&w(r))for(const e in r)w(r[e])?(t[e]||(t=Object.assign(Object.assign({},t),{[e]:{}})),t[e]=Xt(t[e],r[e])):t=Object.assign(Object.assign({},t),{[e]:r[e]});return Xt(t,...e)},te=(t,e,r)=>xt(void 0,void 0,void 0,(function*(){yield Promise.allSettled(t.map(((s,n)=>e.call(r,s,n,t)))).catch(jt)})),ee=(t,e,r)=>xt(void 0,void 0,void 0,(function*(){for(let s=0;s<t.length;s++)yield e.call(r,t[s],s,t).catch(jt)})),re=t=>new Promise((e=>setTimeout(e,t)));class se{constructor(t){this.name="",this._error="",this._type="any",this.rules=[],this.custom=[],this._type=t}empty(t){const e=t;return this.unshift((({value:t})=>{const r=p(t);return{break:!r,value:r?t:m(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 C(t)&&(this._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 m(t)?t:()=>t}from(t){return this.source=t,this}invalid(t,e){return t=`[${this._type}]${t}`,{error:this._error?this._error:this.name?this.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.unshift((({value:e})=>p(e)?{value:e}:this.invalid(".required",t)))}test(t){return!C(this.validate(t).error)}testAsync(t){return xt(this,void 0,void 0,(function*(){return!C((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 xt(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}}))}}class ne extends se{constructor(t){super("array"),this.push((({value:e})=>h(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.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 ie extends se{constructor(t){super("boolean"),this.push((({value:e})=>c(e)?{value:e}:this.invalid("",t)))}parse(){return this.unshift((({value:t})=>({value:p(t)?D(t):t})))}}class ae extends se{constructor(t){super("date"),this.push((({value:e})=>C(e)&&e.length>=9&&!isNaN(new Date(e).getTime())?{value:e}:this.invalid("",t)))}format(t){const e=t;return this.push((({value:t})=>({value:lt(e,new Date(t))})))}parse(){return this.unshift((({value:t})=>({value:new Date(C(t)&&t.length<=10?`${t} 12:00`:t)})))}}class ue extends se{constructor(t){super("number"),this.push((({value:e})=>d(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})=>f(e)?{value:e}:this.invalid(".float",t)))}integer(t){return this.push((({value:e})=>g(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:p(t)?parseFloat(t.toString()):t})))}}class le extends se{constructor(t){super("object"),this.push((({value:e})=>b(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.name=null!==(a=u.source)&&void 0!==a?a:i;const{error:l,message:o,value:h}=u.validate(t[u.name],n);!e&&o&&(e=o),l&&s.push(l),p(h)&&(n[i]=h)})),s.length?this.invalid("{ "+s.join(", ")+" }",e):{value:n}})):this}parse(t){return this.unshift((({value:e})=>{if(!b(e))try{e=JSON.parse(e)}catch(e){return this.invalid("",t)}return{value:e}}))}}class oe extends se{constructor(t){super("string"),this.push((({value:e})=>C(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:Mt(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:Rt(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:b(t)?JSON.stringify(t):p(t)?t.toString():t})))}required(t){return 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)=>m(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:Zt(t)})))}}class he{static array(t,e){return new ne(e).items(t)}static boolean(t){return new ie(t)}static date(t){return new ae(t)}static number(t){return new ue(t)}static object(t,e){return new le(e).keys(t)}static ref(t,e){return({context:r})=>r&&p(r[t])?r[t]:e}static string(t){return new oe(t)}test(t,...e){return!C(he.validate(t,...e).error)}testAsync(t,...e){return xt(this,void 0,void 0,(function*(){return!C((yield he.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 xt(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{gt as EventEmitter,Q as Hash,Ht as RandomString,he as Validation,se as ValidationBase,Qt as allowed,E as cache,_t as camelCase,t as chunkArray,r as clamp,B as colorPalette,e as countArray,At as cutText,lt as dateFormat,ot as dateRange,mt as debounce,Dt as decodeHTML,Vt as denied,q as each,Et as encodeHTML,te as forEachAsync,L as forEachIndex,U as forEachKey,ee as forEachSeries,N as forLoop,Y as hexToRgb,R as hslToRgb,h as isArray,c as isBoolean,Lt as isCharacter,v as isDate,p as isDef,Ut as isDigit,bt as isEmpty,kt as isFalse,f as isFloat,m as isFunction,g as isInteger,qt as isLetter,x as isMap,Ot as isNotEmpty,y as isNull,d as isNumber,b as isObject,w as isPlainObject,S as isRegExp,O as isScalar,j as isSet,Nt as isSpecialChar,C as isString,M as isSymbol,St as isTrue,_ as isUndefined,s as lerp,yt as loop,Mt as lowerCamelCase,F as map,Rt as mask,Gt as maskMoney,Wt as maskReverse,Kt as maskTest,Xt as merge,dt as msToString,jt as noop,ft as parseMs,Ft as parseSize,n as random,Tt as randomCase,i as randomElement,a as rangeArray,P as rgbToHex,K as rgbToHsl,Z as shadeColor,u as shuffleArray,Yt as shuffleString,st as simpleID,re as sleep,Pt as stringReverse,z as tintColor,A as toArray,D as toBool,o as type,I as uniqueArray,nt as uniqueID,Zt as upperCamelCase,it as uuidv4};
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=>{const e={};return t.forEach((t=>{const r=t.toString();e[r]=(e[r]||0)+1})),e},r=(t,e,r)=>Math.max(e,Math.min(r,t)),s=(t,e,s)=>t+(e-t)*r(s,0,1),n=(t,e)=>Math.floor(Math.random()*(e-t+1)+t),i=t=>t.length?t[n(0,t.length-1)]:null,a=(t,e,r=1)=>Array.from({length:(e-t)/r+1},((e,s)=>t+s*r)),u=t=>{for(let e=t.length-1;e>0;e--){const r=n(0,e);[t[e],t[r]]=[t[r],t[e]]}return t},l={},h=t=>null==t?"null":l[l.toString.call(t)]||"object";["Array","AsyncFunction","Boolean","Date","Function","Map","Number","Object","RegExp","Set","String"].forEach((t=>l["[object "+t+"]"]=t.toLowerCase()));const o=t=>"array"==h(t),c=t=>"boolean"==h(t),v=t=>"date"==h(t),p=t=>"null"!=h(t),d=t=>"number"==h(t),f=t=>d(t)&&!!(t%1),m=t=>"function"==typeof t,g=t=>d(t)&&!(t%1),x=t=>"map"==h(t),y=t=>null===t,b=t=>"object"==h(t),w=t=>b(t)&&t.constructor===Object,E=t=>"regexp"==h(t),S=["boolean","number","string"],O=t=>-1!=S.indexOf(h(t)),R=t=>"set"==h(t),C=t=>"string"==typeof t,M=t=>"symbol"==typeof t,k=t=>void 0===t,j=t=>o(t)?t:p(t)?[t]:[],I=t=>t.filter(((t,e,r)=>r.indexOf(t)===e)),A=[1,"1",!0,"true"],N=t=>-1!=A.indexOf(t),D=()=>{const t=[],e=[];return r=>{let s=t.indexOf(r);return-1==s&&(t.push(r),e.push({}),s=e.length-1),e[s]}},U=(t,e,r)=>{for(let s=0;s<t.length&&!1!==e.call(r,t[s],s,t);s++);return t},T=(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},P=(t,e,r)=>o(t)?U(t,e,r):b(t)?T(t,e,r):t,$=(t,e,r)=>{for(let s=1;s<=t&&!1!==e.call(r,s,t);s++);return t},_=(t,e,r)=>Object.fromEntries(Object.entries(t).map((([s,n])=>[s,e.call(r,n,s,t)]))),L=t=>parseInt(null!=t?t:"0",16)||0,Y=t=>{var e;return(null===(e=t.replace(/^#/,"").match(/.{1,2}/g))||void 0===e?void 0:e.map(L))||[]},q=t=>("0"+t.toString(16)).slice(-2),F=(t,e,r)=>"#"+q(t)+q(e)+q(r),Q=(t,e)=>{const s=Y(t);e=r(e,0,1);const[n,i,a]=s.map((t=>Math.round(t*e)));return F(n,i,a)},H=(t,e)=>{const s=Y(t);e=r(e,0,1);const[n,i,a]=s.map((t=>Math.round(t+(255-t)*e)));return F(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},z=(t,e)=>_(null!=e?e:Z,(e=>0==e?t:e>0?H(t,e):Q(t,1- -1*e))),J=(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))]},B=(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,W=(t,e)=>0===t?0:t/(1-Math.abs(2*e-1)),G=(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*B(l,a,s,n,i),W(l,h),h]};class K{constructor(t){this.key=this.shuffle(K.dictionary,t,!1)}encrypt(t){return this.shuffle(t,this.key,!1)}decrypt(t){return this.shuffle(t,this.key,!0)}index(t,e,r){return[K.dictionary.indexOf(t[r]),K.dictionary.indexOf(e[r%e.length])]}result(t,e,r){return K.dictionary[(r?t-e+K.dictionary.length:t+e)%K.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}}K.dictionary="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";const V=t=>Math.random().toString(16).slice(t),X=()=>V(-3),tt=()=>V(-4),et=()=>tt()+tt(),rt=()=>et()+et(),st=()=>X()+tt(),nt=()=>rt()+rt()+rt()+rt(),it=()=>et()+"-"+tt()+"-4"+X()+"-"+tt()+"-"+(et()+tt()),at=t=>("0"+t.toString()).slice(-2),ut={"%y":t=>at(t.getFullYear()),"%Y":t=>t.getFullYear().toString(),"%m":t=>at(t.getMonth()+1),"%d":t=>at(t.getDate()),"%H":t=>at(t.getHours()),"%M":t=>at(t.getMinutes()),"%S":t=>at(t.getSeconds())},lt=(t,e)=>(e=null!=e?e:new Date,t.replace(/%[yYmdHMS]/g,(t=>ut[t]?ut[t](e):t.slice(1)))),ht=(t,e)=>{const r=new Date(t),s=[];for(;t<e;)r.setDate(r.getDate()+1),s.push(new Date(r));return s},ot=36e5,ct=24*ot,vt={ms:1,s:1e3,m:6e4,h:ot,d:ct,w:7*ct,y:315576e5},pt=["y","d","h","m","s","ms"],dt=t=>{const e=[];return pt.forEach((r=>{const s=vt[r],n=(t-t%s)/s;n&&(t-=n*s,e.push(n.toString()+r))})),e.join(" ")},ft=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])*vt[r[2]]||0;return s},mt=(t,e)=>{let r;const s=()=>{r&&clearTimeout(r)};return{cancel:s,run(...n){s(),r=setTimeout((()=>t(...n)),e)}}};class gt{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 xt(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 yt=(t,e)=>{let r=!1;const s=()=>xt(void 0,void 0,void 0,(function*(){r&&(yield t(),setTimeout(s,e))}));return{start(){r||(r=!0,s())},stop(){r=!1}}},bt=t=>{var e;return 0==(null!==(e=null==t?void 0:t.length)&&void 0!==e?e:0)},wt=["",0,"0",null,!1,void 0],Et=t=>-1==wt.indexOf(t),St=t=>!Et(t),Ot=t=>!bt(t),Rt=()=>{},Ct=(t,e,r)=>e(t.toLowerCase().replace(/\W+/g," ")).replace(/\s/g,null!=r?r:""),Mt=(t,e)=>Ct(t,(t=>t.replace(/\s(\w)/g,(t=>t.toUpperCase()))),e),kt=Mt,jt=(t,e)=>{if(t.length>e){const r=t.substring(0,e).split(" ");return r.pop(),r.join(" ")+"..."}return t},It=/&(amp|apos|lt|gt|nbsp|quot);/g,At={amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",quot:'"'},Nt=t=>t.replace(It,((t,e)=>At[e])).replace(/&#(\d+);/gi,((t,e)=>String.fromCharCode(parseInt(e,10)))),Dt=t=>t.replace(/[^0-9A-Za-z ]/g,(t=>"&#"+t.charCodeAt(0)+";")),Ut=t=>/^[\w]$/.test(t),Tt=t=>/^[\d]$/.test(t),Pt=t=>/^[A-Za-z]$/.test(t),$t=t=>/^[^\w]$/.test(t),_t=t=>{if(d(t))return t+"px";const e=(t=>/(-?(?:\d+)?\.?\d+) *(px|%|cm|mm|in|pt|pc|en|ex|ch|rem|vw|vh|vmin|vmax)*/g.exec(t))(t);return e?parseFloat(e[1])+(e[2]||"px"):"0px"},Lt=t=>t.split("").map((t=>Math.random()<.5?t.toUpperCase():t.toLowerCase())).join(""),Yt=t=>u(t.split("")).join("");class qt{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 qt).chars()}lower(){return this.hasLower=!0,this}static lower(){return(new qt).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=Yt(e);for(let s=0;s<t;s++)r+=e.charAt(n(0,e.length-1))}return r}numbers(){return this.hasNumbers=!0,this}static numbers(){return(new qt).numbers()}space(){return this.hasSpace=!0,this}static space(){return(new qt).space()}symbols(){return this.hasSymbols=!0,this}static symbols(){return(new qt).symbols()}upper(){return this.hasUpper=!0,this}static upper(){return(new qt).upper()}}const Ft=t=>t.split("").reverse().join(""),Qt=(t,e)=>Ct(t,(t=>t.replace(/(\w)(\w*)/g,((t,e,r)=>e.toUpperCase()+r))),e),Ht=(t,e)=>e(t.value)?t.value:(t=>(t.maskIndex--,""))(t),Zt={"#":t=>t.value,0:t=>Ht(t,Tt),9:t=>Ht(t,Tt),A:t=>Ht(t,Pt),Z:t=>Ht(t,Pt),L:t=>Ht(t,Pt).toLowerCase(),U:t=>Ht(t,Pt).toUpperCase(),S:t=>Ht(t,$t)},zt=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 k(i)||k(a)?"":(t=>Zt[t.key]?Zt[t.key](t):(t.key!=t.value&&t.textIndex--,t.key))(t)+zt(t)},Jt=(t,e)=>zt({mask:t,maskIndex:-1,text:e,textIndex:-1,key:"",value:""}),Bt=(t,e)=>Ft(Jt(Ft(t),Ft(e))),Wt=(t,e,r)=>(r++,e=parseInt((e||"0").replace(/\D/g,"")).toString(),Bt(t,e.length<r?("0".repeat(r)+e).slice(-1*r):e)),Gt=(t,e)=>t.length==Jt(t,e).length,Kt=(t,e)=>t.reduce(((t,r)=>Object.assign(Object.assign({},t),{[r]:e[r]})),{}),Vt=(t,e)=>Kt(Object.keys(e).filter((e=>-1==t.indexOf(e))),e),Xt=(t,...e)=>{if(!e.length)return t;const r=e.shift();if(w(t)&&w(r))for(const e in r)w(r[e])?(t[e]||(t=Object.assign(Object.assign({},t),{[e]:{}})),t[e]=Xt(t[e],r[e])):t=Object.assign(Object.assign({},t),{[e]:r[e]});return Xt(t,...e)},te=(t,e,r)=>xt(void 0,void 0,void 0,(function*(){yield Promise.allSettled(t.map(((s,n)=>e.call(r,s,n,t)))).catch(Rt)})),ee=(t,e,r)=>xt(void 0,void 0,void 0,(function*(){for(let s=0;s<t.length;s++)yield e.call(r,t[s],s,t).catch(Rt)})),re=t=>new Promise((e=>setTimeout(e,t)));class se{}var ne,ie,ae,ue,le;se.DESCRIPTION=Symbol("DESCRIPTION"),se.ERROR=Symbol("ERROR"),se.NAME=Symbol("NAME"),se.REQUIRED=Symbol("REQUIRED"),se.SOURCE=Symbol("SOURCE"),se.TYPE=Symbol("TYPE");class he{constructor(t){this[ne]="",this[ie]="",this[ae]="",this[ue]="any",this[le]=!1,this.rules=[],this.custom=[],this[se.TYPE]=t}description(t){return this[se.DESCRIPTION]=t,this}empty(t){const e=t;return this.unshift((({value:t})=>{const r=p(t);return{break:!r,value:r?t:m(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 C(t)&&(this[se.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 m(t)?t:()=>t}from(t){return this[se.SOURCE]=t,this}invalid(t,e){return t=`[${this[se.TYPE]}]${t}`,{error:this[se.ERROR]?this[se.ERROR]:this[se.NAME]?this[se.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[se.REQUIRED]=!0,this.unshift((({value:e})=>p(e)?{value:e}:this.invalid(".required",t)))}test(t){return!C(this.validate(t).error)}testAsync(t){return xt(this,void 0,void 0,(function*(){return!C((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 xt(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}}))}}ne=se.NAME,ie=se.DESCRIPTION,se.SOURCE,ae=se.ERROR,ue=se.TYPE,le=se.REQUIRED;class oe extends he{constructor(t){super("array"),this.push((({value:e})=>o(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[se.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 ce extends he{constructor(t){super("boolean"),this.push((({value:e})=>c(e)?{value:e}:this.invalid("",t)))}parse(){return this.unshift((({value:t})=>({value:p(t)?N(t):t})))}}class ve extends he{constructor(t){super("date"),this.push((({value:e})=>C(e)&&e.length>=9&&!isNaN(new Date(e).getTime())?{value:e}:this.invalid("",t)))}format(t){const e=t;return this.push((({value:t})=>({value:lt(e,new Date(t))})))}parse(){return this.unshift((({value:t})=>({value:new Date(C(t)&&t.length<=10?`${t} 12:00`:t)})))}}class pe extends he{constructor(t){super("number"),this.push((({value:e})=>d(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})=>f(e)?{value:e}:this.invalid(".float",t)))}integer(t){return this.push((({value:e})=>g(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:p(t)?parseFloat(t.toString()):t})))}}class de extends he{constructor(t){super("object"),this.push((({value:e})=>b(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[se.NAME]=null!==(a=u[se.SOURCE])&&void 0!==a?a:i;const{error:l,message:h,value:o}=u.validate(t[u[se.NAME]],n);!e&&h&&(e=h),l&&s.push(l),p(o)&&(n[i]=o)})),s.length?this.invalid("{ "+s.join(", ")+" }",e):{value:n}})):this}parse(t){return this.unshift((({value:e})=>{if(!b(e))try{e=JSON.parse(e)}catch(e){return this.invalid("",t)}return{value:e}}))}}class fe extends he{constructor(t){super("string"),this.push((({value:e})=>C(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:Mt(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:Jt(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:b(t)?JSON.stringify(t):p(t)?t.toString():t})))}required(t){return 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)=>m(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:Qt(t)})))}}class me{static array(t,e){return new oe(e).items(t)}static boolean(t){return new ce(t)}static date(t){return new ve(t)}static number(t){return new pe(t)}static object(t,e){return new de(e).keys(t)}static ref(t,e){return({context:r})=>r&&p(r[t])?r[t]:e}static string(t){return new fe(t)}test(t,...e){return!C(me.validate(t,...e).error)}testAsync(t,...e){return xt(this,void 0,void 0,(function*(){return!C((yield me.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 xt(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{gt as EventEmitter,K as Hash,qt as RandomString,me as Validation,he as ValidationBase,se as ValidationKeys,Kt as allowed,D as cache,kt as camelCase,t as chunkArray,r as clamp,z as colorPalette,e as countArray,jt as cutText,lt as dateFormat,ht as dateRange,mt as debounce,Nt as decodeHTML,Vt as denied,P as each,Dt as encodeHTML,te as forEachAsync,U as forEachIndex,T as forEachKey,ee as forEachSeries,$ as forLoop,Y as hexToRgb,J as hslToRgb,o as isArray,c as isBoolean,Ut as isCharacter,v as isDate,p as isDef,Tt as isDigit,bt as isEmpty,St as isFalse,f as isFloat,m as isFunction,g as isInteger,Pt as isLetter,x as isMap,Ot as isNotEmpty,y as isNull,d as isNumber,b as isObject,w as isPlainObject,E as isRegExp,O as isScalar,R as isSet,$t as isSpecialChar,C as isString,M as isSymbol,Et as isTrue,k as isUndefined,s as lerp,yt as loop,Mt as lowerCamelCase,_ as map,Jt as mask,Wt as maskMoney,Bt as maskReverse,Gt as maskTest,Xt as merge,dt as msToString,Rt as noop,ft as parseMs,_t as parseSize,n as random,Lt as randomCase,i as randomElement,a as rangeArray,F as rgbToHex,G as rgbToHsl,Q as shadeColor,u as shuffleArray,Yt as shuffleString,st as simpleID,re as sleep,Ft as stringReverse,H as tintColor,j as toArray,N as toBool,h as type,I as uniqueArray,nt as uniqueID,Qt as upperCamelCase,it as uuidv4};
package/dist/index.min.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /*!
2
- * @andrewcaires/utils.js v0.4.3
2
+ * @andrewcaires/utils.js v0.4.5
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={},a=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 i=e=>"array"==a(e),u=e=>"boolean"==a(e),l=e=>"null"!=a(e),o=e=>"number"==a(e),h=e=>o(e)&&!!(e%1),c=e=>"function"==typeof e,v=e=>o(e)&&!(e%1),p=e=>"object"==a(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},w=(e,t,r)=>{let s="";const n=Object.keys(e);for(let a=0;a<n.length&&(s=n[a],!1!==t.call(r,e[s],s,e));a++);return e},S=(e,t,r)=>Object.fromEntries(Object.entries(e).map((([s,n])=>[s,t.call(r,n,s,e)]))),C=e=>parseInt(null!=e?e:"0",16)||0,k=e=>{var t;return(null===(t=e.replace(/^#/,"").match(/.{1,2}/g))||void 0===t?void 0:t.map(C))||[]},O=e=>("0"+e.toString(16)).slice(-2),j=(e,t,r)=>"#"+O(e)+O(t)+O(r),M=(e,r)=>{const s=k(e);r=t(r,0,1);const[n,a,i]=s.map((e=>Math.round(e*r)));return j(n,a,i)},A=(e,r)=>{const s=k(e);r=t(r,0,1);const[n,a,i]=s.map((e=>Math.round(e+(255-e)*r)));return j(n,a,i)},E={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,_=(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[a,i]=this.index(e,t,n);s+=-1===a||-1===i?e[n]:this.result(a,i,r)}return s}}D.dictionary="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";const T=e=>Math.random().toString(16).slice(e),L=()=>T(-3),$=()=>T(-4),F=()=>$()+$(),N=()=>F()+F(),U=e=>("0"+e.toString()).slice(-2),q={"%y":e=>U(e.getFullYear()),"%Y":e=>e.getFullYear().toString(),"%m":e=>U(e.getMonth()+1),"%d":e=>U(e.getDate()),"%H":e=>U(e.getHours()),"%M":e=>U(e.getMinutes()),"%S":e=>U(e.getSeconds())},H=(e,t)=>(t=null!=t?t:new Date,e.replace(/%[yYmdHMS]/g,(e=>q[e]?q[e](t):e.slice(1)))),R=36e5,P=24*R,B={ms:1,s:1e3,m:6e4,h:R,d:P,w:7*P,y:315576e5},Y=["y","d","h","m","s","ms"];function z(e,t,r,s){return new(r||(r=Promise))((function(n,a){function i(e){try{l(s.next(e))}catch(e){a(e)}}function u(e){try{l(s.throw(e))}catch(e){a(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(i,u)}l((s=s.apply(e,t||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;const J=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),K=()=>{},W=(e,t)=>t(e.toLowerCase().replace(/\W+/g," ")).replace(/\s/g,""),G=e=>W(e,(e=>e.replace(/\s(\w)/g,(e=>e.toUpperCase())))),Q=G,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 ae{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 ae).chars()}lower(){return this.hasLower=!0,this}static lower(){return(new ae).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 ae).numbers()}space(){return this.hasSpace=!0,this}static space(){return(new ae).space()}symbols(){return this.hasSymbols=!0,this}static symbols(){return(new ae).symbols()}upper(){return this.hasUpper=!0,this}static upper(){return(new ae).upper()}}const ie=e=>e.split("").reverse().join(""),ue=e=>W(e,(e=>e.replace(/(\w)(\w*)/g,((e,t,r)=>t.toUpperCase()+r)))),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:a,value:i}=e;return g(a)||g(i)?"":(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)=>ie(ce(ie(e),ie(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{constructor(e){this.name="",this._error="",this._type="any",this.rules=[],this.custom=[],this._type=e}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._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.source=e,this}invalid(e,t){return e=`[${this._type}]${e}`,{error:this._error?this._error:this.name?this.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.unshift((({value:t})=>l(t)?{value:t}:this.invalid(".required",e)))}test(e){return!f(this.validate(e).error)}testAsync(e){return z(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 z(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}}))}}class fe extends me{constructor(e){super("array"),this.push((({value:t})=>i(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.name="";for(let s=0;s<e.length;s++){const{error:n,value:a}=r.validate(e[s],e);if(n)return this.invalid("< "+n+"["+s+"] >",t);e[s]=a}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 ge extends me{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 ye extends me{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:H(t,new Date(e))})))}parse(){return this.unshift((({value:e})=>({value:new Date(f(e)&&e.length<=10?`${e} 12:00`:e)})))}}class xe extends me{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 be extends me{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((a=>{var i;const u=r[a];u.name=null!==(i=u.source)&&void 0!==i?i:a;const{error:o,message:h,value:c}=u.validate(e[u.name],n);!t&&h&&(t=h),o&&s.push(o),l(c)&&(n[a]=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 we extends me{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:G(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.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 Se{static array(e,t){return new fe(t).items(e)}static boolean(e){return new ge(e)}static date(e){return new ye(e)}static number(e){return new xe(e)}static object(e,t){return new be(t).keys(e)}static ref(e,t){return({context:r})=>r&&l(r[e])?r[e]:t}static string(e){return new we(e)}test(e,...t){return!f(Se.validate(e,...t).error)}testAsync(e,...t){return z(this,void 0,void 0,(function*(){return!f((yield Se.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 z(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=ae,e.Validation=Se,e.ValidationBase=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=Q,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)=>S(null!=t?t:E,(t=>0==t?e:t>0?A(e,t):M(e,1- -1*t))),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=H,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)=>i(e)?b(e,t,r):p(e)?w(e,t,r):e,e.encodeHTML=e=>e.replace(/[^0-9A-Za-z ]/g,(e=>"&#"+e.charCodeAt(0)+";")),e.forEachAsync=(e,t,r)=>z(void 0,void 0,void 0,(function*(){yield Promise.allSettled(e.map(((s,n)=>t.call(r,s,n,e)))).catch(K)})),e.forEachIndex=b,e.forEachKey=w,e.forEachSeries=(e,t,r)=>z(void 0,void 0,void 0,(function*(){for(let s=0;s<e.length;s++)yield t.call(r,e[s],s,e).catch(K)})),e.forLoop=(e,t,r)=>{for(let s=1;s<=e&&!1!==t.call(r,s,e);s++);return e},e.hexToRgb=k,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 a=[0,0,0];e<=1?a=[s,n,0]:e<=2?a=[n,s,0]:e<=3?a=[0,s,n]:e<=4?a=[0,n,s]:e<=5?a=[n,0,s]:e<=6&&(a=[s,0,n]);const i=r-.5*s;return[Math.round(255*(a[0]+i)),Math.round(255*(a[1]+i)),Math.round(255*(a[2]+i))]},e.isArray=i,e.isBoolean=u,e.isCharacter=e=>/^[\w]$/.test(e),e.isDate=e=>"date"==a(e),e.isDef=l,e.isDigit=te,e.isEmpty=J,e.isFalse=e=>!V(e),e.isFloat=h,e.isFunction=c,e.isInteger=v,e.isLetter=re,e.isMap=e=>"map"==a(e),e.isNotEmpty=e=>!J(e),e.isNull=e=>null===e,e.isNumber=o,e.isObject=p,e.isPlainObject=d,e.isRegExp=e=>"regexp"==a(e),e.isScalar=e=>-1!=m.indexOf(a(e)),e.isSet=e=>"set"==a(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=()=>z(void 0,void 0,void 0,(function*(){r&&(yield e(),setTimeout(s,t))}));return{start(){r||(r=!0,s())},stop(){r=!1}}},e.lowerCamelCase=G,e.map=S,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 Y.forEach((r=>{const s=B[r],n=(e-e%s)/s;n&&(e-=n*s,t.push(n.toString()+r))})),t.join(" ")},e.noop=K,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])*B[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=j,e.rgbToHsl=(e,t,r)=>{const[s,n,a]=((...e)=>e.map((e=>e/255)))(e,t,r),i=Math.max(s,n,a),u=Math.min(s,n,a),l=i-u,o=(u+i)/2;return[60*I(l,i,s,n,a),_(l,o),o]},e.shadeColor=M,e.shuffleArray=s,e.shuffleString=ne,e.simpleID=()=>L()+$(),e.sleep=e=>new Promise((t=>setTimeout(t,e))),e.stringReverse=ie,e.tintColor=A,e.toArray=e=>i(e)?e:l(e)?[e]:[],e.toBool=x,e.type=a,e.uniqueArray=e=>e.filter(((e,t,r)=>r.indexOf(e)===t)),e.uniqueID=()=>N()+N()+N()+N(),e.upperCamelCase=ue,e.uuidv4=()=>F()+"-"+$()+"-4"+L()+"-"+$()+"-"+(F()+$()),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,C=e=>{var t;return(null===(t=e.replace(/^#/,"").match(/.{1,2}/g))||void 0===t?void 0:t.map(S))||[]},O=e=>("0"+e.toString(16)).slice(-2),R=(e,t,s)=>"#"+O(e)+O(t)+O(s),M=(e,s)=>{const r=C(e);s=t(s,0,1);const[n,i,a]=r.map((e=>Math.round(e*s)));return R(n,i,a)},k=(e,s)=>{const r=C(e);s=t(s,0,1);const[n,i,a]=r.map((e=>Math.round(e+(255-e)*s)));return R(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,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},B=["y","d","h","m","s","ms"];function Q(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){const t=e;return this.unshift((({value:e})=>{const s=l(e);return{break:!s,value:s?e:c(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 f(e)&&(this[me.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 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 Q(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.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}}))}}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 Ce 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 Oe 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 Re 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.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 ke{static array(e,t){return new we(t).items(e)}static boolean(e){return new Se(e)}static date(e){return new Ce(e)}static number(e){return new Oe(e)}static object(e,t){return new Re(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(ke.validate(e,...t).error)}testAsync(e,...t){return Q(this,void 0,void 0,(function*(){return!f((yield ke.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}}))}}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=ke,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:A,(t=>0==t?e:t>0?k(e,t):M(e,1- -1*t))),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)=>Q(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)=>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)})),e.forLoop=(e,t,s)=>{for(let r=1;r<=e&&!1!==t.call(s,r,e);r++);return e},e.hexToRgb=C,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=()=>Q(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 B.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=R,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*I(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=k,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.3",
3
+ "version": "0.4.5",
4
4
  "description": "JavaScript utility library for web and nodejs development",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs.js",
@@ -44,15 +44,15 @@
44
44
  },
45
45
  "homepage": "https://github.com/andrewcaires/npm/tree/main/utils.js#readme",
46
46
  "devDependencies": {
47
- "@rollup/plugin-commonjs": "^28.0.2",
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.10.7",
51
- "eslint": "^9.18.0",
52
- "rollup": "^4.30.1",
50
+ "@types/node": "^22.13.10",
51
+ "eslint": "^9.22.0",
52
+ "rollup": "^4.35.0",
53
53
  "rollup-plugin-dts": "^6.1.1",
54
54
  "tslib": "^2.8.1",
55
- "tsx": "^4.19.2",
56
- "typescript-eslint": "^8.20.0"
55
+ "tsx": "^4.19.3",
56
+ "typescript-eslint": "^8.26.0"
57
57
  }
58
58
  }