@andrewcaires/utils.js 0.4.14 → 0.4.15

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.14
2
+ * @andrewcaires/utils.js v0.4.15
3
3
  * JavaScript utility library for web and nodejs development
4
4
  * (c) 2025 Andrew Caires
5
5
  * @license: MIT
6
6
  */
7
- "use strict";const t=(t,e,s)=>Math.max(e,Math.min(s,t)),e=(t,e)=>Math.floor(Math.random()*(e-t+1)+t),s=t=>{for(let s=t.length-1;s>0;s--){const r=e(0,s);[t[s],t[r]]=[t[r],t[s]]}return t},r={},n=t=>null==t?"null":r[r.toString.call(t)]||"object";["Array","AsyncFunction","Boolean","Date","Function","Map","Number","Object","RegExp","Set","String"].forEach(t=>r["[object "+t+"]"]=t.toLowerCase());const i=t=>"array"==n(t),a=t=>"boolean"==n(t),o=t=>"null"!=n(t),l=t=>"number"==n(t),u=t=>l(t)&&!!(t%1),h=t=>"function"==typeof t,c=t=>l(t)&&!(t%1),p=t=>"object"==n(t),v=t=>p(t)&&t.constructor===Object,x=["boolean","number","string"],m=t=>"string"==typeof t,d=t=>void 0===t,g=[1,"1",!0,"true"],f=t=>-1!=g.indexOf(t),y=(t,e,s)=>{for(let r=0;r<t.length&&!1!==e.call(s,t[r],r,t);r++);return t},S=(t,e,s)=>{let r="";const n=Object.keys(t);for(let i=0;i<n.length&&(r=n[i],!1!==e.call(s,t[r],r,t));i++);return t},E=(t,e,s)=>Object.fromEntries(Object.entries(t).map(([r,n])=>[r,e.call(s,n,r,t)])),w=t=>parseInt(t??"0",16)||0,b=t=>t.replace(/^#/,"").match(/.{1,2}/g)?.map(w)||[],T=t=>("0"+t.toString(16)).slice(-2),I=(t,e,s)=>"#"+T(t)+T(e)+T(s),C=(e,s)=>{const r=b(e);s=t(s,0,1);const[n,i,a]=r.map(t=>Math.round(t*s));return I(n,i,a)},M=(e,s)=>{const r=b(e);s=t(s,0,1);const[n,i,a]=r.map(t=>Math.round(t+(255-t)*s));return I(n,i,a)},D={50:.95,100:.9,200:.75,300:.6,400:.3,500:0,600:-.1,700:-.25,800:-.4,900:-.55,950:-.71},O=(t,e,s,r,n)=>0===t?0:e===s?(r-n)/t%6:e===r?(n-s)/t+2:e===n?(s-r)/t+4:0,R=(t,e)=>0===t?0:t/(1-Math.abs(2*e-1));class A{constructor(t){this.key=this.shuffle(A.dictionary,t,!1)}encrypt(t){return this.shuffle(t,this.key,!1)}decrypt(t){return this.shuffle(t,this.key,!0)}index(t,e,s){return[A.dictionary.indexOf(t[s]),A.dictionary.indexOf(e[s%e.length])]}result(t,e,s){return A.dictionary[(s?t-e+A.dictionary.length:t+e)%A.dictionary.length]}shuffle(t,e,s){let r="";for(let n=0;n<t.length;n++){const[i,a]=this.index(t,e,n);r+=-1===i||-1===a?t[n]:this.result(i,a,s)}return r}static hex(t){let e=0;for(let s=0;s<t.length;s++)e=16777619*(e^t.charCodeAt(s));return(e>>>0).toString(16).padStart(8,"0")}}A.dictionary="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";const k=(t=64)=>Array(Math.ceil(t/2)).fill(0).map(()=>e(0,255).toString(16).padStart(2,"0")).join("").slice(0,t),j=t=>("0"+t.toString()).slice(-2),N={"%y":(t,e)=>j(e?t.getUTCFullYear():t.getFullYear()),"%Y":(t,e)=>(e?t.getUTCFullYear():t.getFullYear()).toString(),"%m":(t,e)=>j((e?t.getUTCMonth():t.getMonth())+1),"%d":(t,e)=>j(e?t.getUTCDate():t.getDate()),"%H":(t,e)=>j(e?t.getUTCHours():t.getHours()),"%M":(t,e)=>j(e?t.getUTCMinutes():t.getMinutes()),"%S":(t,e)=>j(e?t.getUTCSeconds():t.getSeconds())},Y=(t,e,s)=>(e=e??new Date,t.replace(/%[yYmdHMS]/g,t=>N[t]?N[t](e,s):t.slice(1))),U=36e5,L=24*U,P={ms:1,s:1e3,m:6e4,h:U,d:L,w:7*L,y:315576e5},$=t=>{const e=/(-?(?:\d+)?\.?\d+) *(ms|s|m|h|d|w|y)/gm;let s,r=0;for(;null!==(s=e.exec(t));)s.index===e.lastIndex&&e.lastIndex++,r+=parseFloat(s[1])*P[s[2]]||0;return r},F=t=>{const e=new Date(t);return e.getTime()==e.getTime()&&t==e.toISOString().slice(0,10)},q=t=>new Date(t.getFullYear(),t.getMonth()+1,0,t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()),H=(t,e)=>/^([\d]{4})-([\d]{2})-([\d]{2})$/.test(t)?F(t)?new Date(`${t} ${e}`):null:/^([\d]{4})-([\d]{2})$/.test(t)&&F(t=`${t}-01`)?new Date(`${t} ${e}`):null,X=["y","d","h","m","s","ms"];const K=t=>0==(t?.length??0),_=["",0,"0",null,!1,void 0],Q=t=>-1==_.indexOf(t),B=()=>{},J=(t,e,s)=>e(t.toLowerCase().replace(/\W+/g," ")).replace(/\s/g,s??""),V=(t,e)=>J(t,t=>t.replace(/\s(\w)/g,t=>t.toUpperCase()),e),z=V,Z=/&(amp|apos|lt|gt|nbsp|quot);/g,W={amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",quot:'"'},G=t=>/^[\d]$/.test(t),tt=t=>/^[A-Za-z]$/.test(t),et=t=>/^[^\w]$/.test(t),st=t=>s(t.split("")).join("");class rt{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 rt).chars()}lower(){return this.hasLower=!0,this}static lower(){return(new rt).lower()}make(t){let s="";this.hasSpace&&(s+=this._space),this.hasNumbers&&(s+=this._numbers),this.hasSymbols&&(s+=this._symbols),this.hasUpper&&!this.hasChars&&(s+=this._upper),this.hasLower&&!this.hasChars&&(s+=this._lower),this.hasChars&&(s+=this._chars);let r="";if(t&&s.length){s=st(s);for(let n=0;n<t;n++)r+=s.charAt(e(0,s.length-1))}return r}numbers(){return this.hasNumbers=!0,this}static numbers(){return(new rt).numbers()}space(){return this.hasSpace=!0,this}static space(){return(new rt).space()}symbols(){return this.hasSymbols=!0,this}static symbols(){return(new rt).symbols()}upper(){return this.hasUpper=!0,this}static upper(){return(new rt).upper()}}const nt=t=>t.split("").reverse().join(""),it=(t,e)=>J(t,t=>t.replace(/(\w)(\w*)/g,(t,e,s)=>e.toUpperCase()+s),e),at=(t,e)=>e(t.value)?t.value:(t=>(t.maskIndex--,""))(t),ot={"#":t=>t.value,0:t=>at(t,G),9:t=>at(t,G),A:t=>at(t,tt),Z:t=>at(t,tt),L:t=>at(t,tt).toLowerCase(),U:t=>at(t,tt).toUpperCase(),S:t=>at(t,et)},lt=t=>{t.maskIndex++,t.textIndex++;const{mask:e,maskIndex:s,text:r,textIndex:n}=t;t.key=e[s],t.value=r[n];const{key:i,value:a}=t;return d(i)||d(a)?"":(t=>ot[t.key]?ot[t.key](t):(t.key!=t.value&&t.textIndex--,t.key))(t)+lt(t)},ut=(t,e)=>lt({mask:t,maskIndex:-1,text:e,textIndex:-1,key:"",value:""}),ht=(t,e)=>nt(ut(nt(t),nt(e))),ct=(t,e)=>t.reduce((t,s)=>({...t,[s]:e[s]}),{}),pt=t=>t instanceof Date?new Date(t.getTime()):i(t)?t.map(t=>pt(t)):p(t)?E(t,t=>pt(t)):t,vt=(t,...e)=>{if(!e.length)return t;const s=e.shift();if(v(t)&&v(s))for(const e in s)v(s[e])?(t[e]||(t={...t,[e]:{}}),t[e]=vt(t[e],s[e])):t={...t,[e]:s[e]};return vt(t,...e)};class xt{}var mt,dt,gt,ft,yt,St,Et,wt,bt;xt.DESCRIPTION=Symbol("DESCRIPTION"),xt.ERROR=Symbol("ERROR"),xt.EXAMPLE=Symbol("EXAMPLE"),xt.INDEXES=Symbol("INDEXES"),xt.KEYS=Symbol("KEYS"),xt.LIST=Symbol("LIST"),xt.NAME=Symbol("NAME"),xt.REQUIRED=Symbol("REQUIRED"),xt.SOURCE=Symbol("SOURCE"),xt.TYPE=Symbol("TYPE");class Tt{constructor(t){this[mt]="",this[dt]="",this[gt]=null,this[ft]="",this[yt]="any",this[St]=!1,this.rules=[],this.custom=[],this[xt.TYPE]=t}description(t){return this[xt.DESCRIPTION]=t,this}example(t){return this[xt.EXAMPLE]=t,this}empty(t){const e=t;return this.unshift(({value:t})=>{const s=o(t);return{break:!o(e)&&!s,value:s?t:h(e)?e():e}})}equal(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t==n?{value:t}:this.invalid(`.equal(${n})`,e)})}error(t){return m(t)&&(this[xt.ERROR]=t),this}filter(...t){const e=t;return this.unshift(({value:t})=>{const s=-1==e.indexOf(t);return{break:!s,value:s?t:void 0}})}fn(t){return h(t)?t:()=>t}from(t){return this[xt.SOURCE]=t,this}invalid(t,e){return t=`[${this[xt.TYPE]}]${t}`,{error:this[xt.ERROR]?this[xt.ERROR]:this[xt.NAME]?this[xt.NAME]+":"+t:t,message:e}}model(){return this.toString()}parse(){return this.unshift(({value:t})=>({value:t}))}push(t){return this.rules.push(t),this}required(t){return this[xt.REQUIRED]=!0,this.unshift(({value:e})=>o(e)?{value:e}:this.invalid(".required",t))}test(t){return!m(this.validate(t).error)}async testAsync(t){return!m((await this.validateAsync(t)).error)}toString(){return this[xt.TYPE]}unshift(t){return this.rules.unshift(t),this}validate(t,e){if(this.custom.length)return this.invalid("[async]");let s={value:t};for(let t=0;t<this.rules.length;t++){if(s=this.rules[t]({value:s.value,context:e}),s.error?.length)return{error:s.error,...s.message?{message:s.message}:{}};if(s.break)return{value:s.value}}return{value:s.value}}async validateAsync(t,e){let s=this.validate(t,e);if(s.error)return{error:s.error};for(let t=0;t<this.custom.length;t++){if(s=await this.custom[t]({value:s.value}),s.error)return{error:s.error};if(s.break)return{value:s.value}}return{value:s.value}}}mt=xt.NAME,dt=xt.DESCRIPTION,gt=xt.EXAMPLE,xt.SOURCE,ft=xt.ERROR,yt=xt.TYPE,St=xt.REQUIRED;class It extends Tt{constructor(t){super("array"),this[Et]=[],this.push(({value:e})=>i(e)?{value:e}:this.invalid("",t))}between(t,e,s){return this.min(t,s),this.max(e,s)}items(t,e){const s=t;return s&&this[xt.INDEXES].push(s),s?this.push(({value:t})=>{const r=[];s[xt.NAME]="";for(let n=0;n<t.length;n++){const{error:i,value:a}=s.validate(t[n],t);if(i)return this.invalid("< "+i+"["+n+"] >",e);r[n]=a}return{value:r}}):this}length(t,e){const s=t;return this.push(({value:t})=>t.length==s?{value:t}:this.invalid(".length("+s+")",e))}max(t,e){const s=t;return this.push(({value:t})=>t.length<=s?{value:t}:this.invalid(".max("+s+")",e))}min(t,e){const s=t;return this.push(({value:t})=>t.length>=s?{value:t}:this.invalid(".min("+s+")",e))}model(){return this[xt.INDEXES].length?this[xt.INDEXES].map(t=>t.model()):this[xt.TYPE]}toString(){return this[xt.INDEXES].length?JSON.stringify(this.model(),null,4):this[xt.TYPE]}}Et=xt.INDEXES;class Ct extends Tt{constructor(t){super("boolean"),this.push(({value:e})=>a(e)?{value:e}:this.invalid("",t))}parse(){return this.unshift(({value:t})=>({value:o(t)?f(t):t}))}}class Mt extends Tt{constructor(t){super("date"),this.push(({value:e})=>m(e)&&F(e)||!isNaN(new Date(e).getTime())?{value:e}:this.invalid("",t))}format(t){const e=t;return this.push(({value:t})=>({value:Y(e,new Date(t))}))}parse(){return this.unshift(({value:t})=>({value:new Date(t)}))}}class Dt extends Tt{constructor(t){super("enum"),this[wt]=[],this.push(({value:e})=>o(e)?{value:e}:this.invalid(`('${this[xt.LIST].join("', '")}')`,t))}list(t,e){const s=t;return s&&this[xt.LIST].push(...s),s?this.push(({value:t})=>-1!=this[xt.LIST].indexOf(t)?{value:t}:this.invalid(`('${this[xt.LIST].join("', '")}')`,e)):this}toString(){return`${this[xt.TYPE]}('${this[xt.LIST].join("', '")}')`}}wt=xt.LIST;class Ot extends Tt{constructor(t){super("number"),this.push(({value:e})=>l(e)?{value:e}:this.invalid("",t))}between(t,e,s){return this.min(t,s),this.max(e,s)}float(t){return this.push(({value:e})=>u(e)?{value:e}:this.invalid(".float",t))}integer(t){return this.push(({value:e})=>c(e)?{value:e}:this.invalid(".integer",t))}max(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t<=n?{value:t}:this.invalid(`.max(${n})`,e)})}min(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t>=n?{value:t}:this.invalid(`.min(${n})`,e)})}parse(){return this.unshift(({value:t})=>({value:o(t)?parseFloat(t.toString()):t}))}}class Rt extends Tt{constructor(t){super("object"),this[bt]={},this.push(({value:e})=>p(e)?{value:e}:this.invalid("",t))}keys(t,e){const s=t;return s&&(this[xt.KEYS]={...this[xt.KEYS],...s}),s?this.push(({value:t})=>{const r=[],n={};return Object.keys(s).forEach(i=>{const a=s[i];a[xt.NAME]=a[xt.SOURCE]??i;const{error:l,message:u,value:h}=a.validate(t[a[xt.NAME]],n);!e&&u&&(e=u),l&&r.push(l),o(h)&&(n[i]=h)}),r.length?this.invalid("{ "+r.join(", ")+" }",e):{value:n}}):this}model(){const t={},e=Object.keys(this[xt.KEYS]);return e.length&&e.forEach(e=>t[e]=this[xt.KEYS][e].model()),e.length?t:this[xt.TYPE]}parse(t){return this.unshift(({value:e})=>{if(!p(e))try{e=JSON.parse(e)}catch(e){return this.invalid("",t)}return{value:e}})}toString(){return Object.keys(this[xt.KEYS]).length?JSON.stringify(this.model(),null,4):this[xt.TYPE]}}bt=xt.KEYS;class At extends Tt{constructor(t){super("string"),this.push(({value:e})=>m(e)?{value:e}:this.invalid("",t))}between(t,e,s){return this.min(t,s),this.max(e,s)}email(t){const e=/^[\w-\\.]+@([\w-]+\.)+[\w-]{2,4}$/i;return this.push(({value:s})=>e.test(s)?{value:s}:this.invalid(".email",t))}length(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t.length==n?{value:t}:this.invalid(`.length(${n})`,e)})}lowerCase(){return this.push(({value:t})=>({value:t.toLowerCase()}))}lowerCamelCase(){return this.push(({value:t})=>({value:V(t)}))}max(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t.length<=n?{value:t}:this.invalid(`.max(${n})`,e)})}mask(t){const e=this.fn(t);return this.push(({value:t,context:s})=>({value:ut(e({value:t,context:s}),t)}))}min(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t.length>=n?{value:t}:this.invalid(`.min(${n})`,e)})}parse(){return this.unshift(({value:t})=>({value:p(t)?JSON.stringify(t):o(t)?t.toString():t}))}required(t){return this[xt.REQUIRED]=!0,this.push(({value:e})=>e.length?{value:e}:this.invalid(".required",t))}regex(t,e){return this.push(({value:s})=>t.test(s)?{value:s}:this.invalid(".regex",e))}replace(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>({value:t.replace(s({value:t,context:r}),e)}))}trim(){return this.push(({value:t})=>({value:t.trim()}))}upperCase(){return this.push(({value:t})=>({value:t.toUpperCase()}))}upperCamelCase(){return this.push(({value:t})=>({value:it(t)}))}}class kt{static array(t,e){return new It(e).items(t)}static boolean(t){return new Ct(t)}static date(t){return new Mt(t)}static enum(t,e){return new Dt(e).list(t)}static number(t){return new Ot(t)}static object(t,e){return new Rt(e).keys(t)}static ref(t,e){return({context:s})=>s&&o(s[t])?s[t]:e}static string(t){return new At(t)}test(t,...e){return!m(kt.validate(t,...e).error)}async testAsync(t,...e){return!m((await kt.validateAsync(t,...e)).error)}static validate(t,...e){let s={value:t};for(let t=0;t<e.length;t++)if(s=e[t].validate(s.value),s.error)return{value:s.value,error:s.error};return{value:s.value}}static async validateAsync(t,...e){let s={value:t};for(let t=0;t<e.length;t++)if(s=await e[t].validateAsync(s.value),s.error)return{value:s.value,error:s.error};return{value:s.value}}}exports.AsyncQueue=class{constructor(){this.running=!1,this.queue=[]}push(t){return new Promise((e,s)=>{this.queue.push(async()=>{try{const s=await t();e(s)}catch(t){s(t)}}),this.run()})}async run(){if(!this.running){for(this.running=!0;this.queue.length>0;){const t=this.queue.shift();t&&await t()}this.running=!1}}},exports.EventEmitter=class{constructor(){this.events=new Map}on(t,e){const s=this.events.get(t);return s?s.push(e):this.events.set(t,[e]),{dispose:()=>this.off(t,e)}}once(t,e){const s=r=>{e(r),this.off(t,s)};return this.on(t,s),{dispose:()=>this.off(t,s)}}off(t,e){const s=this.events.get(t);if(e){if(s){const t=s.indexOf(e);t>=0&&s.splice(t,1)}}else this.events.set(t,[])}emit(t,e){const s=this.events.get(t);s&&s.forEach(t=>t(e))}},exports.Hash=A,exports.RandomString=rt,exports.Validation=kt,exports.ValidationBase=Tt,exports.ValidationKeys=xt,exports.allowed=ct,exports.cache=()=>{const t=[],e=[];return s=>{let r=t.indexOf(s);return-1==r&&(t.push(s),e.push({}),r=e.length-1),e[r]}},exports.camelCase=z,exports.chunkArray=(t,e)=>{const s=[];for(let r=0;r<t.length;r+=e)s.push(t.slice(r,r+e));return s},exports.clamp=t,exports.clone=pt,exports.colorPalette=(t,e)=>E(e??D,e=>0==e?t:e>0?M(t,e):C(t,1- -1*e)),exports.compareArray=(t,e)=>t.length===e.length&&t.every((t,s)=>t===e[s]),exports.countArray=t=>{const e={};return t.forEach(t=>{const s=t.toString();e[s]=(e[s]||0)+1}),e},exports.cutText=(t,e)=>{if(t.length>e){const s=t.substring(0,e).split(" ");return s.pop(),s.join(" ")+"..."}return t},exports.dateFormat=Y,exports.dateInterval=(t,e,s)=>{const r=new Date(t);s=s??$("1d");const n=[];for(;r<e;)r.setTime(r.getTime()+s),n.push(new Date(r));return n},exports.dateRange=(t,e)=>{const s=t??Y("%Y-%m"),r=H(s,"00:00:00");if(!r||!F(r.toISOString().slice(0,10)))return[null,null];const n=e||s;let i=H(n,"23:59:59");return i&&F(i.toISOString().slice(0,10))?(7==n.length&&(i=q(i)),r>i?[null,null]:[r,i]):[r,null]},exports.debounce=(t,e)=>{let s;const r=()=>{s&&clearTimeout(s)};return{cancel:r,run(...n){r(),s=setTimeout(()=>t(...n),e)}}},exports.decodeHTML=t=>t.replace(Z,(t,e)=>W[e]).replace(/&#(\d+);/gi,(t,e)=>String.fromCharCode(parseInt(e,10))),exports.denied=(t,e)=>ct(Object.keys(e).filter(e=>-1==t.indexOf(e)),e),exports.each=(t,e,s)=>i(t)?y(t,e,s):p(t)?S(t,e,s):t,exports.encodeHTML=t=>t.replace(/[^0-9A-Za-z ]/g,t=>"&#"+t.charCodeAt(0)+";"),exports.firstDayDate=t=>new Date(t.getFullYear(),t.getMonth(),1,t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()),exports.forEachAsync=async(t,e,s)=>{await Promise.allSettled(t.map((r,n)=>e.call(s,r,n,t)?.catch(B))).catch(B)},exports.forEachIndex=y,exports.forEachKey=S,exports.forEachPage=async t=>{let e=!0;const s=()=>e=!0;let r=1;for(;e;)e=!1,await(t(r,s)?.catch(B)),r+=1},exports.forEachSeries=async(t,e,s)=>{for(let r=0;r<t.length;r++)await(e.call(s,t[r],r,t)?.catch(B))},exports.forLoop=(t,e,s)=>{for(let r=1;r<=t&&!1!==e.call(s,r,t);r++);return t},exports.hexToRgb=b,exports.hslToRgb=(t,e,s)=>{t/=60;const r=(1-Math.abs(2*s-1))*e,n=r*(1-Math.abs(t%2-1));let i=[0,0,0];t<=1?i=[r,n,0]:t<=2?i=[n,r,0]:t<=3?i=[0,r,n]:t<=4?i=[0,n,r]:t<=5?i=[n,0,r]:t<=6&&(i=[r,0,n]);const a=s-.5*r;return[Math.round(255*(i[0]+a)),Math.round(255*(i[1]+a)),Math.round(255*(i[2]+a))]},exports.inArray=(t,e)=>-1!=e.indexOf(t),exports.includesArray=(t,e)=>t.every(t=>e.includes(t)),exports.isArray=i,exports.isBoolean=a,exports.isCharacter=t=>/^[\w]$/.test(t),exports.isDate=t=>"date"==n(t),exports.isDef=o,exports.isDigit=G,exports.isEmpty=K,exports.isFalse=t=>!Q(t),exports.isFloat=u,exports.isFunction=h,exports.isInteger=c,exports.isLetter=tt,exports.isMap=t=>"map"==n(t),exports.isNotEmpty=t=>!K(t),exports.isNull=t=>null===t,exports.isNumber=l,exports.isObject=p,exports.isPlainObject=v,exports.isRegExp=t=>"regexp"==n(t),exports.isScalar=t=>-1!=x.indexOf(n(t)),exports.isSet=t=>"set"==n(t),exports.isSpecialChar=et,exports.isString=m,exports.isSymbol=t=>"symbol"==typeof t,exports.isTrue=Q,exports.isUndefined=d,exports.isValidDate=F,exports.lastDayDate=q,exports.lerp=(e,s,r)=>e+(s-e)*t(r,0,1),exports.loop=(t,e)=>{let s=!1;const r=async()=>{s&&(await t(),setTimeout(r,e))};return{start(){s||(s=!0,r())},stop(){s=!1}}},exports.lowerCamelCase=V,exports.map=E,exports.mask=ut,exports.maskMoney=(t,e,s)=>(s++,e=parseInt((e||"0").replace(/\D/g,"")).toString(),ht(t,e.length<s?("0".repeat(s)+e).slice(-1*s):e)),exports.maskReverse=ht,exports.maskTest=(t,e)=>t.length==ut(t,e).length,exports.merge=vt,exports.msToString=t=>{const e=[];return X.forEach(s=>{const r=P[s],n=(t-t%r)/r;n&&(t-=n*r,e.push(n.toString()+s))}),e.join(" ")},exports.noop=B,exports.parseMs=$,exports.parseSize=t=>{if(l(t))return t+"px";const e=(t=>/(-?(?:\d+)?\.?\d+) *(px|%|cm|mm|in|pt|pc|en|ex|ch|rem|vw|vh|vmin|vmax)*/g.exec(t))(t);return e?parseFloat(e[1])+(e[2]||"px"):"0px"},exports.random=e,exports.randomCase=t=>t.split("").map(t=>Math.random()<.5?t.toUpperCase():t.toLowerCase()).join(""),exports.randomElement=t=>t.length?t[e(0,t.length-1)]:null,exports.rangeArray=(t,e,s=1)=>Array.from({length:(e-t)/s+1},(e,r)=>t+r*s),exports.rgbToHex=I,exports.rgbToHsl=(t,e,s)=>{const[r,n,i]=((...t)=>t.map(t=>t/255))(t,e,s),a=Math.max(r,n,i),o=Math.min(r,n,i),l=a-o,u=(o+a)/2;return[60*O(l,a,r,n,i),R(l,u),u]},exports.shadeColor=C,exports.shuffleArray=s,exports.shuffleString=st,exports.sleep=t=>new Promise(e=>setTimeout(e,t)),exports.stringReverse=nt,exports.tintColor=M,exports.toArray=t=>i(t)?t:o(t)?[t]:[],exports.toBool=f,exports.type=n,exports.uniqueArray=t=>t.filter((t,e,s)=>s.indexOf(t)===e),exports.uniqueID=k,exports.upperCamelCase=it,exports.uuidv1=()=>{const t=1e4*(Date.now()+122192928e5),s=(4294967295&t)>>>0,r=(t/4294967296&65535)>>>0,n=(t/281474976710656&4095)>>>0,i=e(0,s),a=(t,e)=>t.toString(16).padStart(e,"0");return[a(s,8),a(r,4),a(4096|n,4),a(i>>8&63|128,2)+a(255&i,2),k(12)].join("-")},exports.uuidv1ToTimestamp=t=>{const e=t.replace(/-/g,""),s=parseInt(e.slice(0,8),16),r=parseInt(e.slice(8,12),16),n=(4095&parseInt(e.slice(12,16),16))*Math.pow(2,48)+r*Math.pow(2,32)+s;return Math.floor((n-122192928e9)/1e4)},exports.uuidv4=()=>{const t=[];t.push(...Array(16).fill(0).map(()=>e(0,255))),t[6]=15&t[6]|64;const s=t.map(t=>t.toString(16).padStart(2,"0")).join("");return[s.slice(0,8),s.slice(8,12),s.slice(12,16),s.slice(16,20),s.slice(20)].join("-")},exports.uuidv7=()=>{const t=Date.now(),s=[];s[0]=t/2**40&255,s[1]=t/2**32&255,s[2]=t>>>24&255,s[3]=t>>>16&255,s[4]=t>>>8&255,s[5]=255&t,s.push(...Array(10).fill(0).map(()=>e(0,255))),s[6]=15&s[6]|112,s[8]=63&s[8]|128;const r=s.map(t=>t.toString(16).padStart(2,"0")).join("");return[r.slice(0,8),r.slice(8,12),r.slice(12,16),r.slice(16,20),r.slice(20)].join("-")},exports.uuidv7ToTimestamp=t=>parseInt(t.replace(/-/g,"").slice(0,12),16),exports.uuidv8=t=>{const s=Date.now(),r=[];r[0]=s/2**40&255,r[1]=s/2**32&255,r[2]=s>>>24&255,r[3]=s>>>16&255,r[4]=s>>>8&255,r[5]=255&s,r.push(...Array(8).fill(0).map(()=>e(0,255))),r[6]=15&r[6]|128,r[8]=63&r[8]|128;const n=r.map(t=>t.toString(16).padStart(2,"0")).join("");return[n.slice(0,8),n.slice(8,12),n.slice(12,16),A.hex(t??"").slice(4),n.slice(16)].join("-")};
7
+ "use strict";const t=(t,e,s)=>Math.max(e,Math.min(s,t)),e=(t,e)=>Math.floor(Math.random()*(e-t+1)+t),s=t=>{for(let s=t.length-1;s>0;s--){const r=e(0,s);[t[s],t[r]]=[t[r],t[s]]}return t},r={},n=t=>null==t?"null":r[r.toString.call(t)]||"object";["Array","AsyncFunction","Boolean","Date","Function","Map","Number","Object","RegExp","Set","String"].forEach(t=>r["[object "+t+"]"]=t.toLowerCase());const i=t=>"array"==n(t),a=t=>"boolean"==n(t),o=t=>"null"!=n(t),l=t=>"number"==n(t),u=t=>l(t)&&!!(t%1),h=t=>"function"==typeof t,c=t=>l(t)&&!(t%1),p=t=>"object"==n(t),v=t=>p(t)&&t.constructor===Object,x=["boolean","number","string"],m=t=>"string"==typeof t,d=t=>void 0===t,g=[1,"1",!0,"true"],f=t=>-1!=g.indexOf(t),y=(t,e,s)=>{for(let r=0;r<t.length&&!1!==e.call(s,t[r],r,t);r++);return t},S=(t,e,s)=>{let r="";const n=Object.keys(t);for(let i=0;i<n.length&&(r=n[i],!1!==e.call(s,t[r],r,t));i++);return t},E=(t,e,s)=>Object.fromEntries(Object.entries(t).map(([r,n])=>[r,e.call(s,n,r,t)])),w=t=>parseInt(t??"0",16)||0,b=t=>t.replace(/^#/,"").match(/.{1,2}/g)?.map(w)||[],T=t=>("0"+t.toString(16)).slice(-2),I=(t,e,s)=>"#"+T(t)+T(e)+T(s),C=(e,s)=>{const r=b(e);s=t(s,0,1);const[n,i,a]=r.map(t=>Math.round(t*s));return I(n,i,a)},M=(e,s)=>{const r=b(e);s=t(s,0,1);const[n,i,a]=r.map(t=>Math.round(t+(255-t)*s));return I(n,i,a)},D={50:.95,100:.9,200:.75,300:.6,400:.3,500:0,600:-.1,700:-.25,800:-.4,900:-.55,950:-.71},O=(t,e,s,r,n)=>0===t?0:e===s?(r-n)/t%6:e===r?(n-s)/t+2:e===n?(s-r)/t+4:0,R=(t,e)=>0===t?0:t/(1-Math.abs(2*e-1));class A{constructor(t){this.key=this.shuffle(A.dictionary,t,!1)}encrypt(t){return this.shuffle(t,this.key,!1)}decrypt(t){return this.shuffle(t,this.key,!0)}index(t,e,s){return[A.dictionary.indexOf(t[s]),A.dictionary.indexOf(e[s%e.length])]}result(t,e,s){return A.dictionary[(s?t-e+A.dictionary.length:t+e)%A.dictionary.length]}shuffle(t,e,s){let r="";for(let n=0;n<t.length;n++){const[i,a]=this.index(t,e,n);r+=-1===i||-1===a?t[n]:this.result(i,a,s)}return r}static hex(t){let e=0;for(let s=0;s<t.length;s++)e=16777619*(e^t.charCodeAt(s));return(e>>>0).toString(16).padStart(8,"0")}}A.dictionary="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";const k=(t=64)=>Array(Math.ceil(t/2)).fill(0).map(()=>e(0,255).toString(16).padStart(2,"0")).join("").slice(0,t),j=t=>("0"+t.toString()).slice(-2),N={"%y":(t,e)=>j(e?t.getUTCFullYear():t.getFullYear()),"%Y":(t,e)=>(e?t.getUTCFullYear():t.getFullYear()).toString(),"%m":(t,e)=>j((e?t.getUTCMonth():t.getMonth())+1),"%d":(t,e)=>j(e?t.getUTCDate():t.getDate()),"%H":(t,e)=>j(e?t.getUTCHours():t.getHours()),"%M":(t,e)=>j(e?t.getUTCMinutes():t.getMinutes()),"%S":(t,e)=>j(e?t.getUTCSeconds():t.getSeconds())},Y=(t,e,s)=>(e=e??new Date,t.replace(/%[yYmdHMS]/g,t=>N[t]?N[t](e,s):t.slice(1))),U=36e5,L=24*U,P={ms:1,s:1e3,m:6e4,h:U,d:L,w:7*L,y:315576e5},$=t=>{const e=/(-?(?:\d+)?\.?\d+)\s*(ms|s|m|h|d|w|y)/gm;let s,r=0;for(;null!==(s=e.exec(t));)s.index===e.lastIndex&&e.lastIndex++,r+=parseFloat(s[1])*P[s[2]]||0;return r},F=t=>{const e=new Date(t);return e.getTime()==e.getTime()&&t==e.toISOString().slice(0,10)},q=t=>new Date(t.getFullYear(),t.getMonth()+1,0,t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()),H=(t,e)=>/^([\d]{4})-([\d]{2})-([\d]{2})$/.test(t)?F(t)?new Date(`${t} ${e}`):null:/^([\d]{4})-([\d]{2})$/.test(t)&&F(t=`${t}-01`)?new Date(`${t} ${e}`):null,X=["y","d","h","m","s","ms"];const K=t=>0==(t?.length??0),_=["",0,"0",null,!1,void 0],Q=t=>-1==_.indexOf(t),B=()=>{},J=(t,e,s)=>e(t.toLowerCase().replace(/\W+/g," ")).replace(/\s/g,s??""),V=(t,e)=>J(t,t=>t.replace(/\s(\w)/g,t=>t.toUpperCase()),e),z=V,Z=/&(amp|apos|lt|gt|nbsp|quot);/g,W={amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",quot:'"'},G=t=>/^[\d]$/.test(t),tt=t=>/^[A-Za-z]$/.test(t),et=t=>/^[^\w]$/.test(t),st=t=>s(t.split("")).join("");class rt{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 rt).chars()}lower(){return this.hasLower=!0,this}static lower(){return(new rt).lower()}make(t){let s="";this.hasSpace&&(s+=this._space),this.hasNumbers&&(s+=this._numbers),this.hasSymbols&&(s+=this._symbols),this.hasUpper&&!this.hasChars&&(s+=this._upper),this.hasLower&&!this.hasChars&&(s+=this._lower),this.hasChars&&(s+=this._chars);let r="";if(t&&s.length){s=st(s);for(let n=0;n<t;n++)r+=s.charAt(e(0,s.length-1))}return r}numbers(){return this.hasNumbers=!0,this}static numbers(){return(new rt).numbers()}space(){return this.hasSpace=!0,this}static space(){return(new rt).space()}symbols(){return this.hasSymbols=!0,this}static symbols(){return(new rt).symbols()}upper(){return this.hasUpper=!0,this}static upper(){return(new rt).upper()}}const nt=t=>t.split("").reverse().join(""),it=(t,e)=>J(t,t=>t.replace(/(\w)(\w*)/g,(t,e,s)=>e.toUpperCase()+s),e),at=(t,e)=>e(t.value)?t.value:(t=>(t.maskIndex--,""))(t),ot={"#":t=>t.value,0:t=>at(t,G),9:t=>at(t,G),A:t=>at(t,tt),Z:t=>at(t,tt),L:t=>at(t,tt).toLowerCase(),U:t=>at(t,tt).toUpperCase(),S:t=>at(t,et)},lt=t=>{t.maskIndex++,t.textIndex++;const{mask:e,maskIndex:s,text:r,textIndex:n}=t;t.key=e[s],t.value=r[n];const{key:i,value:a}=t;return d(i)||d(a)?"":(t=>ot[t.key]?ot[t.key](t):(t.key!=t.value&&t.textIndex--,t.key))(t)+lt(t)},ut=(t,e)=>lt({mask:t,maskIndex:-1,text:e,textIndex:-1,key:"",value:""}),ht=(t,e)=>nt(ut(nt(t),nt(e))),ct=(t,e)=>t.reduce((t,s)=>({...t,[s]:e[s]}),{}),pt=t=>t instanceof Date?new Date(t.getTime()):i(t)?t.map(t=>pt(t)):p(t)?E(t,t=>pt(t)):t,vt=(t,...e)=>{if(!e.length)return t;const s=e.shift();if(v(t)&&v(s))for(const e in s)v(s[e])?(t[e]||(t={...t,[e]:{}}),t[e]=vt(t[e],s[e])):t={...t,[e]:s[e]};return vt(t,...e)};class xt{}var mt,dt,gt,ft,yt,St,Et,wt,bt;xt.DESCRIPTION=Symbol("DESCRIPTION"),xt.ERROR=Symbol("ERROR"),xt.EXAMPLE=Symbol("EXAMPLE"),xt.INDEXES=Symbol("INDEXES"),xt.KEYS=Symbol("KEYS"),xt.LIST=Symbol("LIST"),xt.NAME=Symbol("NAME"),xt.REQUIRED=Symbol("REQUIRED"),xt.SOURCE=Symbol("SOURCE"),xt.TYPE=Symbol("TYPE");class Tt{constructor(t){this[mt]="",this[dt]="",this[gt]=null,this[ft]="",this[yt]="any",this[St]=!1,this.rules=[],this.custom=[],this[xt.TYPE]=t}description(t){return this[xt.DESCRIPTION]=t,this}example(t){return this[xt.EXAMPLE]=t,this}empty(t){const e=t;return this.unshift(({value:t})=>{const s=o(t);return{break:!o(e)&&!s,value:s?t:h(e)?e():e}})}equal(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t==n?{value:t}:this.invalid(`.equal(${n})`,e)})}error(t){return m(t)&&(this[xt.ERROR]=t),this}filter(...t){const e=t;return this.unshift(({value:t})=>{const s=-1==e.indexOf(t);return{break:!s,value:s?t:void 0}})}fn(t){return h(t)?t:()=>t}from(t){return this[xt.SOURCE]=t,this}invalid(t,e){return t=`[${this[xt.TYPE]}]${t}`,{error:this[xt.ERROR]?this[xt.ERROR]:this[xt.NAME]?this[xt.NAME]+":"+t:t,message:e}}model(){return this.toString()}parse(){return this.unshift(({value:t})=>({value:t}))}push(t){return this.rules.push(t),this}required(t){return this[xt.REQUIRED]=!0,this.unshift(({value:e})=>o(e)?{value:e}:this.invalid(".required",t))}test(t){return!m(this.validate(t).error)}async testAsync(t){return!m((await this.validateAsync(t)).error)}toString(){return this[xt.TYPE]}unshift(t){return this.rules.unshift(t),this}validate(t,e){if(this.custom.length)return this.invalid("[async]");let s={value:t};for(let t=0;t<this.rules.length;t++){if(s=this.rules[t]({value:s.value,context:e}),s.error?.length)return{error:s.error,...s.message?{message:s.message}:{}};if(s.break)return{value:s.value}}return{value:s.value}}async validateAsync(t,e){let s=this.validate(t,e);if(s.error)return{error:s.error};for(let t=0;t<this.custom.length;t++){if(s=await this.custom[t]({value:s.value}),s.error)return{error:s.error};if(s.break)return{value:s.value}}return{value:s.value}}}mt=xt.NAME,dt=xt.DESCRIPTION,gt=xt.EXAMPLE,xt.SOURCE,ft=xt.ERROR,yt=xt.TYPE,St=xt.REQUIRED;class It extends Tt{constructor(t){super("array"),this[Et]=[],this.push(({value:e})=>i(e)?{value:e}:this.invalid("",t))}between(t,e,s){return this.min(t,s),this.max(e,s)}items(t,e){const s=t;return s&&this[xt.INDEXES].push(s),s?this.push(({value:t})=>{const r=[];s[xt.NAME]="";for(let n=0;n<t.length;n++){const{error:i,value:a}=s.validate(t[n],t);if(i)return this.invalid("< "+i+"["+n+"] >",e);r[n]=a}return{value:r}}):this}length(t,e){const s=t;return this.push(({value:t})=>t.length==s?{value:t}:this.invalid(".length("+s+")",e))}max(t,e){const s=t;return this.push(({value:t})=>t.length<=s?{value:t}:this.invalid(".max("+s+")",e))}min(t,e){const s=t;return this.push(({value:t})=>t.length>=s?{value:t}:this.invalid(".min("+s+")",e))}model(){return this[xt.INDEXES].length?this[xt.INDEXES].map(t=>t.model()):this[xt.TYPE]}toString(){return this[xt.INDEXES].length?JSON.stringify(this.model(),null,4):this[xt.TYPE]}}Et=xt.INDEXES;class Ct extends Tt{constructor(t){super("boolean"),this.push(({value:e})=>a(e)?{value:e}:this.invalid("",t))}parse(){return this.unshift(({value:t})=>({value:o(t)?f(t):t}))}}class Mt extends Tt{constructor(t){super("date"),this.push(({value:e})=>m(e)&&F(e)||!isNaN(new Date(e).getTime())?{value:e}:this.invalid("",t))}format(t){const e=t;return this.push(({value:t})=>({value:Y(e,new Date(t))}))}parse(){return this.unshift(({value:t})=>({value:new Date(t)}))}}class Dt extends Tt{constructor(t){super("enum"),this[wt]=[],this.push(({value:e})=>o(e)?{value:e}:this.invalid(`('${this[xt.LIST].join("', '")}')`,t))}list(t,e){const s=t;return s&&this[xt.LIST].push(...s),s?this.push(({value:t})=>-1!=this[xt.LIST].indexOf(t)?{value:t}:this.invalid(`('${this[xt.LIST].join("', '")}')`,e)):this}toString(){return`${this[xt.TYPE]}('${this[xt.LIST].join("', '")}')`}}wt=xt.LIST;class Ot extends Tt{constructor(t){super("number"),this.push(({value:e})=>l(e)?{value:e}:this.invalid("",t))}between(t,e,s){return this.min(t,s),this.max(e,s)}float(t){return this.push(({value:e})=>u(e)?{value:e}:this.invalid(".float",t))}integer(t){return this.push(({value:e})=>c(e)?{value:e}:this.invalid(".integer",t))}max(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t<=n?{value:t}:this.invalid(`.max(${n})`,e)})}min(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t>=n?{value:t}:this.invalid(`.min(${n})`,e)})}parse(){return this.unshift(({value:t})=>({value:o(t)?parseFloat(t.toString()):t}))}}class Rt extends Tt{constructor(t){super("object"),this[bt]={},this.push(({value:e})=>p(e)?{value:e}:this.invalid("",t))}keys(t,e){const s=t;return s&&(this[xt.KEYS]={...this[xt.KEYS],...s}),s?this.push(({value:t})=>{const r=[],n={};return Object.keys(s).forEach(i=>{const a=s[i];a[xt.NAME]=a[xt.SOURCE]??i;const{error:l,message:u,value:h}=a.validate(t[a[xt.NAME]],n);!e&&u&&(e=u),l&&r.push(l),o(h)&&(n[i]=h)}),r.length?this.invalid("{ "+r.join(", ")+" }",e):{value:n}}):this}model(){const t={},e=Object.keys(this[xt.KEYS]);return e.length&&e.forEach(e=>t[e]=this[xt.KEYS][e].model()),e.length?t:this[xt.TYPE]}parse(t){return this.unshift(({value:e})=>{if(!p(e))try{e=JSON.parse(e)}catch(e){return this.invalid("",t)}return{value:e}})}toString(){return Object.keys(this[xt.KEYS]).length?JSON.stringify(this.model(),null,4):this[xt.TYPE]}}bt=xt.KEYS;class At extends Tt{constructor(t){super("string"),this.push(({value:e})=>m(e)?{value:e}:this.invalid("",t))}between(t,e,s){return this.min(t,s),this.max(e,s)}email(t){const e=/^[\w-\\.]+@([\w-]+\.)+[\w-]{2,4}$/i;return this.push(({value:s})=>e.test(s)?{value:s}:this.invalid(".email",t))}length(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t.length==n?{value:t}:this.invalid(`.length(${n})`,e)})}lowerCase(){return this.push(({value:t})=>({value:t.toLowerCase()}))}lowerCamelCase(){return this.push(({value:t})=>({value:V(t)}))}max(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t.length<=n?{value:t}:this.invalid(`.max(${n})`,e)})}mask(t){const e=this.fn(t);return this.push(({value:t,context:s})=>({value:ut(e({value:t,context:s}),t)}))}min(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t.length>=n?{value:t}:this.invalid(`.min(${n})`,e)})}parse(){return this.unshift(({value:t})=>({value:p(t)?JSON.stringify(t):o(t)?t.toString():t}))}required(t){return this[xt.REQUIRED]=!0,this.push(({value:e})=>e.length?{value:e}:this.invalid(".required",t))}regex(t,e){return this.push(({value:s})=>t.test(s)?{value:s}:this.invalid(".regex",e))}replace(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>({value:t.replace(s({value:t,context:r}),e)}))}trim(){return this.push(({value:t})=>({value:t.trim()}))}upperCase(){return this.push(({value:t})=>({value:t.toUpperCase()}))}upperCamelCase(){return this.push(({value:t})=>({value:it(t)}))}}class kt{static array(t,e){return new It(e).items(t)}static boolean(t){return new Ct(t)}static date(t){return new Mt(t)}static enum(t,e){return new Dt(e).list(t)}static number(t){return new Ot(t)}static object(t,e){return new Rt(e).keys(t)}static ref(t,e){return({context:s})=>s&&o(s[t])?s[t]:e}static string(t){return new At(t)}test(t,...e){return!m(kt.validate(t,...e).error)}async testAsync(t,...e){return!m((await kt.validateAsync(t,...e)).error)}static validate(t,...e){let s={value:t};for(let t=0;t<e.length;t++)if(s=e[t].validate(s.value),s.error)return{value:s.value,error:s.error};return{value:s.value}}static async validateAsync(t,...e){let s={value:t};for(let t=0;t<e.length;t++)if(s=await e[t].validateAsync(s.value),s.error)return{value:s.value,error:s.error};return{value:s.value}}}exports.AsyncQueue=class{constructor(){this.running=!1,this.queue=[]}push(t){return new Promise((e,s)=>{this.queue.push(async()=>{try{const s=await t();e(s)}catch(t){s(t)}}),this.run()})}async run(){if(!this.running){for(this.running=!0;this.queue.length>0;){const t=this.queue.shift();t&&await t()}this.running=!1}}},exports.EventEmitter=class{constructor(){this.events=new Map}on(t,e){const s=this.events.get(t);return s?s.push(e):this.events.set(t,[e]),{dispose:()=>this.off(t,e)}}once(t,e){const s=r=>{e(r),this.off(t,s)};return this.on(t,s),{dispose:()=>this.off(t,s)}}off(t,e){const s=this.events.get(t);if(e){if(s){const t=s.indexOf(e);t>=0&&s.splice(t,1)}}else this.events.set(t,[])}emit(t,e){const s=this.events.get(t);s&&s.forEach(t=>t(e))}},exports.Hash=A,exports.RandomString=rt,exports.Validation=kt,exports.ValidationBase=Tt,exports.ValidationKeys=xt,exports.allowed=ct,exports.cache=()=>{const t=[],e=[];return s=>{let r=t.indexOf(s);return-1==r&&(t.push(s),e.push({}),r=e.length-1),e[r]}},exports.camelCase=z,exports.chunkArray=(t,e)=>{const s=[];for(let r=0;r<t.length;r+=e)s.push(t.slice(r,r+e));return s},exports.clamp=t,exports.clone=pt,exports.colorPalette=(t,e)=>E(e??D,e=>0==e?t:e>0?M(t,e):C(t,1- -1*e)),exports.compareArray=(t,e)=>t.length===e.length&&t.every((t,s)=>t===e[s]),exports.countArray=t=>{const e={};return t.forEach(t=>{const s=t.toString();e[s]=(e[s]||0)+1}),e},exports.cutText=(t,e)=>{if(t.length>e){const s=t.substring(0,e).split(" ");return s.pop(),s.join(" ")+"..."}return t},exports.dateFormat=Y,exports.dateInterval=(t,e,s)=>{const r=new Date(t);s=s??$("1d");const n=[];for(;r<e;)r.setTime(r.getTime()+s),n.push(new Date(r));return n},exports.dateRange=(t,e)=>{const s=t??Y("%Y-%m"),r=H(s,"00:00:00");if(!r||!F(r.toISOString().slice(0,10)))return[null,null];const n=e||s;let i=H(n,"23:59:59");return i&&F(i.toISOString().slice(0,10))?(7==n.length&&(i=q(i)),r>i?[null,null]:[r,i]):[r,null]},exports.debounce=(t,e)=>{let s;const r=()=>{s&&clearTimeout(s)};return{cancel:r,run(...n){r(),s=setTimeout(()=>t(...n),e)}}},exports.decodeHTML=t=>t.replace(Z,(t,e)=>W[e]).replace(/&#(\d+);/gi,(t,e)=>String.fromCharCode(parseInt(e,10))),exports.denied=(t,e)=>ct(Object.keys(e).filter(e=>-1==t.indexOf(e)),e),exports.each=(t,e,s)=>i(t)?y(t,e,s):p(t)?S(t,e,s):t,exports.encodeHTML=t=>t.replace(/[^0-9A-Za-z ]/g,t=>"&#"+t.charCodeAt(0)+";"),exports.firstDayDate=t=>new Date(t.getFullYear(),t.getMonth(),1,t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()),exports.forEachAsync=async(t,e,s)=>{await Promise.allSettled(t.map((r,n)=>e.call(s,r,n,t)?.catch(B))).catch(B)},exports.forEachIndex=y,exports.forEachKey=S,exports.forEachPage=async t=>{let e=!0;const s=()=>e=!0;let r=1;for(;e;)e=!1,await(t(r,s)?.catch(B)),r+=1},exports.forEachSeries=async(t,e,s)=>{for(let r=0;r<t.length;r++)await(e.call(s,t[r],r,t)?.catch(B))},exports.forLoop=(t,e,s)=>{for(let r=1;r<=t&&!1!==e.call(s,r,t);r++);return t},exports.hexToRgb=b,exports.hslToRgb=(t,e,s)=>{t/=60;const r=(1-Math.abs(2*s-1))*e,n=r*(1-Math.abs(t%2-1));let i=[0,0,0];t<=1?i=[r,n,0]:t<=2?i=[n,r,0]:t<=3?i=[0,r,n]:t<=4?i=[0,n,r]:t<=5?i=[n,0,r]:t<=6&&(i=[r,0,n]);const a=s-.5*r;return[Math.round(255*(i[0]+a)),Math.round(255*(i[1]+a)),Math.round(255*(i[2]+a))]},exports.inArray=(t,e)=>-1!=e.indexOf(t),exports.includesArray=(t,e)=>t.every(t=>e.includes(t)),exports.isArray=i,exports.isBoolean=a,exports.isCharacter=t=>/^[\w]$/.test(t),exports.isDate=t=>"date"==n(t),exports.isDef=o,exports.isDigit=G,exports.isEmpty=K,exports.isFalse=t=>!Q(t),exports.isFloat=u,exports.isFunction=h,exports.isInteger=c,exports.isLetter=tt,exports.isMap=t=>"map"==n(t),exports.isNotEmpty=t=>!K(t),exports.isNull=t=>null===t,exports.isNumber=l,exports.isObject=p,exports.isPlainObject=v,exports.isRegExp=t=>"regexp"==n(t),exports.isScalar=t=>-1!=x.indexOf(n(t)),exports.isSet=t=>"set"==n(t),exports.isSpecialChar=et,exports.isString=m,exports.isSymbol=t=>"symbol"==typeof t,exports.isTrue=Q,exports.isUndefined=d,exports.isValidDate=F,exports.lastDayDate=q,exports.lerp=(e,s,r)=>e+(s-e)*t(r,0,1),exports.loop=(t,e)=>{let s=!1;const r=async()=>{s&&(await t(),setTimeout(r,e))};return{start(){s||(s=!0,r())},stop(){s=!1}}},exports.lowerCamelCase=V,exports.map=E,exports.mask=ut,exports.maskMoney=(t,e,s)=>(s++,e=parseInt((e||"0").replace(/\D/g,"")).toString(),ht(t,e.length<s?("0".repeat(s)+e).slice(-1*s):e)),exports.maskReverse=ht,exports.maskTest=(t,e)=>t.length==ut(t,e).length,exports.merge=vt,exports.msToString=t=>{const e=[];return X.forEach(s=>{const r=P[s],n=(t-t%r)/r;n&&(t-=n*r,e.push(n.toString()+s))}),e.join(" ")},exports.noop=B,exports.parseMs=$,exports.parseSize=t=>{if(l(t))return t+"px";const e=(t=>/(-?(?:\d+)?\.?\d+) *(px|%|cm|mm|in|pt|pc|en|ex|ch|rem|vw|vh|vmin|vmax)*/g.exec(t))(t);return e?parseFloat(e[1])+(e[2]||"px"):"0px"},exports.random=e,exports.randomCase=t=>t.split("").map(t=>Math.random()<.5?t.toUpperCase():t.toLowerCase()).join(""),exports.randomElement=t=>t.length?t[e(0,t.length-1)]:null,exports.rangeArray=(t,e,s=1)=>Array.from({length:(e-t)/s+1},(e,r)=>t+r*s),exports.rgbToHex=I,exports.rgbToHsl=(t,e,s)=>{const[r,n,i]=((...t)=>t.map(t=>t/255))(t,e,s),a=Math.max(r,n,i),o=Math.min(r,n,i),l=a-o,u=(o+a)/2;return[60*O(l,a,r,n,i),R(l,u),u]},exports.shadeColor=C,exports.shuffleArray=s,exports.shuffleString=st,exports.sleep=t=>new Promise(e=>setTimeout(e,t)),exports.stringReverse=nt,exports.tintColor=M,exports.toArray=t=>i(t)?t:o(t)?[t]:[],exports.toBool=f,exports.type=n,exports.uniqueArray=t=>t.filter((t,e,s)=>s.indexOf(t)===e),exports.uniqueID=k,exports.upperCamelCase=it,exports.uuidv1=()=>{const t=1e4*(Date.now()+122192928e5),s=(4294967295&t)>>>0,r=(t/4294967296&65535)>>>0,n=(t/281474976710656&4095)>>>0,i=e(0,s),a=(t,e)=>t.toString(16).padStart(e,"0");return[a(s,8),a(r,4),a(4096|n,4),a(i>>8&63|128,2)+a(255&i,2),k(12)].join("-")},exports.uuidv1ToTimestamp=t=>{const e=t.replace(/-/g,""),s=parseInt(e.slice(0,8),16),r=parseInt(e.slice(8,12),16),n=(4095&parseInt(e.slice(12,16),16))*Math.pow(2,48)+r*Math.pow(2,32)+s;return Math.floor((n-122192928e9)/1e4)},exports.uuidv4=()=>{const t=[];t.push(...Array(16).fill(0).map(()=>e(0,255))),t[6]=15&t[6]|64;const s=t.map(t=>t.toString(16).padStart(2,"0")).join("");return[s.slice(0,8),s.slice(8,12),s.slice(12,16),s.slice(16,20),s.slice(20)].join("-")},exports.uuidv7=()=>{const t=Date.now(),s=[];s[0]=t/2**40&255,s[1]=t/2**32&255,s[2]=t>>>24&255,s[3]=t>>>16&255,s[4]=t>>>8&255,s[5]=255&t,s.push(...Array(10).fill(0).map(()=>e(0,255))),s[6]=15&s[6]|112,s[8]=63&s[8]|128;const r=s.map(t=>t.toString(16).padStart(2,"0")).join("");return[r.slice(0,8),r.slice(8,12),r.slice(12,16),r.slice(16,20),r.slice(20)].join("-")},exports.uuidv7ToTimestamp=t=>parseInt(t.replace(/-/g,"").slice(0,12),16),exports.uuidv8=t=>{const s=Date.now(),r=[];r[0]=s/2**40&255,r[1]=s/2**32&255,r[2]=s>>>24&255,r[3]=s>>>16&255,r[4]=s>>>8&255,r[5]=255&s,r.push(...Array(8).fill(0).map(()=>e(0,255))),r[6]=15&r[6]|128,r[8]=63&r[8]|128;const n=r.map(t=>t.toString(16).padStart(2,"0")).join("");return[n.slice(0,8),n.slice(8,12),n.slice(12,16),A.hex(t??"").slice(4),n.slice(16)].join("-")};
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @andrewcaires/utils.js v0.4.14
2
+ * @andrewcaires/utils.js v0.4.15
3
3
  * JavaScript utility library for web and nodejs development
4
4
  * (c) 2025 Andrew Caires
5
5
  * @license: MIT
@@ -18,14 +18,17 @@ declare const isDef: <T = any>(test: any) => test is T;
18
18
 
19
19
  declare const isFloat: (test: any) => test is number;
20
20
 
21
+ type TypeAnyConstructor<T = any> = new (...args: Array<any>) => T;
21
22
  type TypeAnyFunction<T = any> = (...args: Array<any>) => T;
23
+ /** @deprecated don't use this anymore */
22
24
  type TypeCallbackFunction<T = any> = (...args: Array<any>) => T;
23
25
  type TypeArray<T> = Array<T>;
24
26
  type TypeAnyArray = TypeArray<any>;
27
+ /** @deprecated don't use this anymore */
25
28
  type TypeArrayAny = TypeArray<any>;
26
29
  type TypeArrayString = TypeArray<string>;
27
30
  type TypeArrayNumber = TypeArray<number>;
28
- type TypeArrayFunction = TypeArray<TypeCallbackFunction>;
31
+ type TypeArrayFunction = TypeArray<TypeAnyFunction>;
29
32
  type TypeKey = number | string | symbol;
30
33
  type TypeNullable<T> = T | null;
31
34
  type TypeUndefined<T> = T | undefined;
@@ -35,9 +38,10 @@ type TypeObject<T, K extends keyof any = string> = {
35
38
  [P in K]: T;
36
39
  };
37
40
  type TypeAnyObject = TypeObject<any>;
41
+ /** @deprecated don't use this anymore */
38
42
  type TypeObjectAny = TypeObject<any>;
39
43
  type TypeObjectBoolean = TypeObject<boolean>;
40
- type TypeObjectFunction = TypeObject<TypeCallbackFunction>;
44
+ type TypeObjectFunction = TypeObject<TypeAnyFunction>;
41
45
  type TypeObjectNumber = TypeObject<number>;
42
46
  type TypeObjectNullable<T, K = void> = {
43
47
  [P in keyof T]?: P extends K ? T[P] : TypeNullable<T[P]>;
@@ -49,13 +53,13 @@ type TypeObjectString = TypeObject<string>;
49
53
  type TypeObjectKeys<T, F = any> = {
50
54
  [K in keyof T]: T[K] extends F ? K : never;
51
55
  }[keyof T];
52
- type TypeObjectKeysFunction<T> = TypeObjectKeys<T, TypeCallbackFunction>;
56
+ type TypeObjectKeysFunction<T> = TypeObjectKeys<T, TypeAnyFunction>;
53
57
  type TypeCallback<T, K, O, R> = (value: T, key: K, object: O) => R;
54
58
  type TypeCallbackArray<T> = TypeCallback<T, number, TypeArray<T>, any>;
55
59
  type TypeCallbackMap<T> = TypeCallback<T, number, TypeArray<T>, T>;
56
60
  type TypeCallbackObject<T> = TypeCallback<T, string, TypeObject<T>, any>;
57
61
 
58
- declare const isFunction: (test: any) => test is TypeCallbackFunction;
62
+ declare const isFunction: (test: any) => test is TypeAnyFunction;
59
63
 
60
64
  declare const isInteger: (test: any) => test is number;
61
65
 
@@ -65,9 +69,9 @@ declare const isNull: (test: any) => test is null;
65
69
 
66
70
  declare const isNumber: (test: any) => test is number;
67
71
 
68
- declare const isObject: (test: any) => test is TypeObjectAny;
72
+ declare const isObject: (test: any) => test is TypeAnyObject;
69
73
 
70
- declare const isPlainObject: (test: any) => test is TypeObjectAny;
74
+ declare const isPlainObject: (test: any) => test is TypeAnyObject;
71
75
 
72
76
  declare const isRegExp: (test: any) => test is RegExp;
73
77
 
@@ -162,11 +166,11 @@ declare const msToString: (ms: number) => string;
162
166
  declare const parseMs: (str: string) => number;
163
167
 
164
168
  interface IDebounceCallbacks {
165
- cancel: TypeCallbackFunction;
166
- run: TypeCallbackFunction;
169
+ cancel: TypeAnyFunction;
170
+ run: TypeAnyFunction;
167
171
  }
168
172
 
169
- declare const debounce: (callback: TypeCallbackFunction, ms: number) => IDebounceCallbacks;
173
+ declare const debounce: (callback: TypeAnyFunction, ms: number) => IDebounceCallbacks;
170
174
 
171
175
  type EventCallback = (data?: any) => void;
172
176
 
@@ -186,11 +190,11 @@ declare class EventEmitter {
186
190
  type EventList = Array<EventCallback>;
187
191
 
188
192
  interface ILoopCallbacks {
189
- start: TypeCallbackFunction;
190
- stop: TypeCallbackFunction;
193
+ start: TypeAnyFunction;
194
+ stop: TypeAnyFunction;
191
195
  }
192
196
 
193
- declare const loop: (callback: TypeCallbackFunction, ms: number) => ILoopCallbacks;
197
+ declare const loop: (callback: TypeAnyFunction, ms: number) => ILoopCallbacks;
194
198
 
195
199
  declare const isEmpty: (test: string | Array<any>) => boolean;
196
200
 
@@ -232,13 +236,13 @@ declare const lerp: (value1: number, value2: number, amount: number) => number;
232
236
 
233
237
  declare const random: (min: number, max: number) => number;
234
238
 
235
- declare const allowed: (allowed: Array<string>, target: TypeObjectAny) => TypeObjectAny;
239
+ declare const allowed: (allowed: Array<string>, target: TypeAnyObject) => TypeAnyObject;
236
240
 
237
241
  declare const clone: <T>(value: T) => T;
238
242
 
239
- declare const denied: (denied: Array<string>, target: TypeObjectAny) => TypeObjectAny;
243
+ declare const denied: (denied: Array<string>, target: TypeAnyObject) => TypeAnyObject;
240
244
 
241
- declare const merge: (target: TypeObjectAny, ...sources: Array<TypeObjectAny>) => TypeObjectAny;
245
+ declare const merge: (target: TypeAnyObject, ...sources: Array<TypeAnyObject>) => TypeAnyObject;
242
246
 
243
247
  type AsyncQueueTask<T = any> = () => Promise<T>;
244
248
 
@@ -253,7 +257,7 @@ type ForEachCallback<T> = TypeCallback<T, number, Array<T>, void | Promise<void>
253
257
 
254
258
  declare const forEachAsync: <T>(array: Array<T>, callback: ForEachCallback<T>, thisArg?: any) => Promise<void>;
255
259
 
256
- type forEachPageCallback = (index: number, next: TypeCallbackFunction) => void | Promise<void>;
260
+ type forEachPageCallback = (index: number, next: TypeAnyFunction) => void | Promise<void>;
257
261
 
258
262
  declare const forEachPage: (callback: forEachPageCallback) => Promise<void>;
259
263
 
@@ -332,6 +336,8 @@ declare class ValidationKeys {
332
336
  static readonly TYPE: unique symbol;
333
337
  }
334
338
 
339
+ type ValidationFunction<T> = (value: IValidationInput) => T;
340
+
335
341
  declare class ValidationBase<T = any> {
336
342
  [ValidationKeys.NAME]: string;
337
343
  [ValidationKeys.DESCRIPTION]: string;
@@ -345,14 +351,14 @@ declare class ValidationBase<T = any> {
345
351
  constructor(type: string);
346
352
  description(value: string): this;
347
353
  example(value: T): this;
348
- empty(value?: T | TypeCallbackFunction<T>): this;
349
- equal(value: T | IValidationFunction<T>, message?: string): this;
354
+ empty(value?: T | TypeAnyFunction<T>): this;
355
+ equal(value: T | ValidationFunction<T>, message?: string): this;
350
356
  error(value?: string): this;
351
357
  filter(...values: Array<T>): this;
352
- protected fn<T = any>(value: T | TypeCallbackFunction<T>): TypeCallbackFunction<T>;
358
+ protected fn<T = any>(value: T | TypeAnyFunction<T>): TypeAnyFunction<T>;
353
359
  from(value: string): this;
354
360
  protected invalid(error: string, message?: string): IValidationOutput<T>;
355
- model(): string | TypeObjectAny | Array<string | TypeObjectAny>;
361
+ model(): string | TypeAnyObject | Array<string | TypeAnyObject>;
356
362
  parse(): this;
357
363
  push(callback: ValidationCallback<T>): this;
358
364
  required(message?: string): this;
@@ -377,8 +383,6 @@ interface IValidationInput<T = any> extends IValidationOutput<T> {
377
383
  value: T;
378
384
  }
379
385
 
380
- type IValidationFunction<T> = (value: IValidationInput) => T;
381
-
382
386
  declare class ValidationArray extends ValidationBase<Array<any>> {
383
387
  private [ValidationKeys.INDEXES];
384
388
  constructor(message?: string);
@@ -387,7 +391,7 @@ declare class ValidationArray extends ValidationBase<Array<any>> {
387
391
  length(value: number, message?: string): this;
388
392
  max(value: number, message?: string): this;
389
393
  min(value: number, message?: string): this;
390
- model(): string | TypeObjectAny | Array<string | TypeObjectAny>;
394
+ model(): string | TypeAnyObject | Array<string | TypeAnyObject>;
391
395
  toString(): string;
392
396
  }
393
397
 
@@ -411,37 +415,37 @@ declare class ValidationEnum extends ValidationBase<string> {
411
415
 
412
416
  declare class ValidationNumber extends ValidationBase<number> {
413
417
  constructor(message?: string);
414
- between(min: number | TypeCallbackFunction, max: number | TypeCallbackFunction, message?: string): this;
418
+ between(min: number | TypeAnyFunction, max: number | TypeAnyFunction, message?: string): this;
415
419
  float(message?: string): this;
416
420
  integer(message?: string): this;
417
- max(value: number | TypeCallbackFunction, message?: string): this;
418
- min(value: number | TypeCallbackFunction, message?: string): this;
421
+ max(value: number | TypeAnyFunction, message?: string): this;
422
+ min(value: number | TypeAnyFunction, message?: string): this;
419
423
  parse(): this;
420
424
  }
421
425
 
422
- declare class ValidationObject extends ValidationBase<TypeObjectAny> {
426
+ declare class ValidationObject extends ValidationBase<TypeAnyObject> {
423
427
  private [ValidationKeys.KEYS];
424
428
  constructor(message?: string);
425
429
  keys(value?: TypeObject<ValidationBase>, message?: string): this;
426
- model(): string | TypeObjectAny | Array<string | TypeObjectAny>;
430
+ model(): string | TypeAnyObject | Array<string | TypeAnyObject>;
427
431
  parse(message?: string): this;
428
432
  toString(): string;
429
433
  }
430
434
 
431
435
  declare class ValidationString extends ValidationBase<string> {
432
436
  constructor(message?: string);
433
- between<T extends number>(min: T | IValidationFunction<T>, max: number | IValidationFunction<T>, message?: string): this;
437
+ between<T extends number>(min: T | ValidationFunction<T>, max: number | ValidationFunction<T>, message?: string): this;
434
438
  email(message?: string): this;
435
- length<T extends number>(value: T | IValidationFunction<T>, message?: string): this;
439
+ length<T extends number>(value: T | ValidationFunction<T>, message?: string): this;
436
440
  lowerCase(): this;
437
441
  lowerCamelCase(): this;
438
- max<T extends number>(value: T | IValidationFunction<T>, message?: string): this;
439
- mask<T extends string>(value: T | IValidationFunction<T>): this;
440
- min<T extends number>(value: T | IValidationFunction<T>, message?: string): this;
442
+ max<T extends number>(value: T | ValidationFunction<T>, message?: string): this;
443
+ mask<T extends string>(value: T | ValidationFunction<T>): this;
444
+ min<T extends number>(value: T | ValidationFunction<T>, message?: string): this;
441
445
  parse(): this;
442
446
  required(message?: string): this;
443
447
  regex(regex: RegExp, message?: string): this;
444
- replace<T extends string>(value: T | RegExp | IValidationFunction<T>, text: string): this;
448
+ replace<T extends string>(value: T | RegExp | ValidationFunction<T>, text: string): this;
445
449
  trim(): this;
446
450
  upperCase(): this;
447
451
  upperCamelCase(): this;
@@ -454,7 +458,7 @@ declare class Validation {
454
458
  static enum(value?: Array<any>, message?: string): ValidationEnum;
455
459
  static number(message?: string): ValidationNumber;
456
460
  static object(value?: TypeObject<ValidationBase>, message?: string): ValidationObject;
457
- static ref(ref: string | number, value?: any): TypeCallbackFunction;
461
+ static ref(ref: string | number, value?: any): TypeAnyFunction;
458
462
  static string(message?: string): ValidationString;
459
463
  test(value?: any, ...rules: Array<ValidationBase>): boolean;
460
464
  testAsync(value?: any, ...rules: Array<ValidationBase>): Promise<boolean>;
@@ -465,4 +469,4 @@ declare class Validation {
465
469
  type ValidationCallbackAsync<T = any> = (value: IValidationInput<T>) => Promise<IValidationOutput<T>>;
466
470
 
467
471
  export { AsyncQueue, EventEmitter, Hash, RandomString, Validation, ValidationBase, ValidationKeys, allowed, cache, camelCase, chunkArray, clamp, clone, colorPalette, compareArray, countArray, cutText, dateFormat, dateInterval, dateRange, debounce, decodeHTML, denied, each, encodeHTML, firstDayDate, forEachAsync, forEachIndex, forEachKey, forEachPage, forEachSeries, forLoop, hexToRgb, hslToRgb, inArray, includesArray, 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, isValidDate, lastDayDate, lerp, loop, lowerCamelCase, map, mask, maskMoney, maskReverse, maskTest, merge, msToString, noop, parseMs, parseSize, random, randomCase, randomElement, rangeArray, rgbToHex, rgbToHsl, shadeColor, shuffleArray, shuffleString, sleep, stringReverse, tintColor, toArray, toBool, type, uniqueArray, uniqueID, upperCamelCase, uuidv1, uuidv1ToTimestamp, uuidv4, uuidv7, uuidv7ToTimestamp, uuidv8 };
468
- export type { AsyncQueueTask, CacheCallback, EachCallback, EachValue, EventCallback, EventList, ForEachCallback, IDebounceCallbacks, IEventDisposable, ILoopCallbacks, IValidationFunction, IValidationInput, IValidationOutput, TypeAnyArray, TypeAnyFunction, TypeAnyObject, TypeArray, TypeArrayAny, TypeArrayFunction, TypeArrayNumber, TypeArrayString, TypeCallback, TypeCallbackArray, TypeCallbackFunction, TypeCallbackMap, TypeCallbackObject, TypeKey, TypeNullable, TypeObject, TypeObjectAny, TypeObjectBoolean, TypeObjectFunction, TypeObjectKeys, TypeObjectKeysFunction, TypeObjectNullable, TypeObjectNumber, TypeObjectString, TypeSatisfies, TypeScalar, TypeUndefined, ValidationCallback, ValidationCallbackAsync, forEachPageCallback, typeObjectSatisfies };
472
+ export type { AsyncQueueTask, CacheCallback, EachCallback, EachValue, EventCallback, EventList, ForEachCallback, IDebounceCallbacks, IEventDisposable, ILoopCallbacks, IValidationInput, IValidationOutput, TypeAnyArray, TypeAnyConstructor, TypeAnyFunction, TypeAnyObject, TypeArray, TypeArrayAny, TypeArrayFunction, TypeArrayNumber, TypeArrayString, TypeCallback, TypeCallbackArray, TypeCallbackFunction, TypeCallbackMap, TypeCallbackObject, TypeKey, TypeNullable, TypeObject, TypeObjectAny, TypeObjectBoolean, TypeObjectFunction, TypeObjectKeys, TypeObjectKeysFunction, TypeObjectNullable, TypeObjectNumber, TypeObjectString, TypeSatisfies, TypeScalar, TypeUndefined, ValidationCallback, ValidationCallbackAsync, ValidationFunction, forEachPageCallback, typeObjectSatisfies };
package/dist/index.esm.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /*!
2
- * @andrewcaires/utils.js v0.4.14
2
+ * @andrewcaires/utils.js v0.4.15
3
3
  * JavaScript utility library for web and nodejs development
4
4
  * (c) 2025 Andrew Caires
5
5
  * @license: MIT
6
6
  */
7
- const t=(t,e)=>{const s=[];for(let r=0;r<t.length;r+=e)s.push(t.slice(r,r+e));return s},e=(t,e)=>t.length===e.length&&t.every((t,s)=>t===e[s]),s=t=>{const e={};return t.forEach(t=>{const s=t.toString();e[s]=(e[s]||0)+1}),e},r=(t,e)=>-1!=e.indexOf(t),n=(t,e)=>t.every(t=>e.includes(t)),i=(t,e,s)=>Math.max(e,Math.min(s,t)),a=(t,e,s)=>t+(e-t)*i(s,0,1),l=(t,e)=>Math.floor(Math.random()*(e-t+1)+t),u=t=>t.length?t[l(0,t.length-1)]:null,h=(t,e,s=1)=>Array.from({length:(e-t)/s+1},(e,r)=>t+r*s),o=t=>{for(let e=t.length-1;e>0;e--){const s=l(0,e);[t[e],t[s]]=[t[s],t[e]]}return t},c={},p=t=>null==t?"null":c[c.toString.call(t)]||"object";["Array","AsyncFunction","Boolean","Date","Function","Map","Number","Object","RegExp","Set","String"].forEach(t=>c["[object "+t+"]"]=t.toLowerCase());const v=t=>"array"==p(t),g=t=>"boolean"==p(t),m=t=>"date"==p(t),d=t=>"null"!=p(t),f=t=>"number"==p(t),S=t=>f(t)&&!!(t%1),y=t=>"function"==typeof t,x=t=>f(t)&&!(t%1),E=t=>"map"==p(t),w=t=>null===t,b=t=>"object"==p(t),I=t=>b(t)&&t.constructor===Object,M=t=>"regexp"==p(t),O=["boolean","number","string"],C=t=>-1!=O.indexOf(p(t)),T=t=>"set"==p(t),R=t=>"string"==typeof t,D=t=>"symbol"==typeof t,A=t=>void 0===t,j=t=>v(t)?t:d(t)?[t]:[],k=t=>t.filter((t,e,s)=>s.indexOf(t)===e),N=[1,"1",!0,"true"],Y=t=>-1!=N.indexOf(t),U=()=>{const t=[],e=[];return s=>{let r=t.indexOf(s);return-1==r&&(t.push(s),e.push({}),r=e.length-1),e[r]}},P=(t,e,s)=>{for(let r=0;r<t.length&&!1!==e.call(s,t[r],r,t);r++);return t},$=(t,e,s)=>{let r="";const n=Object.keys(t);for(let i=0;i<n.length&&(r=n[i],!1!==e.call(s,t[r],r,t));i++);return t},L=(t,e,s)=>v(t)?P(t,e,s):b(t)?$(t,e,s):t,q=(t,e,s)=>{for(let r=1;r<=t&&!1!==e.call(s,r,t);r++);return t},F=(t,e,s)=>Object.fromEntries(Object.entries(t).map(([r,n])=>[r,e.call(s,n,r,t)])),X=t=>parseInt(t??"0",16)||0,_=t=>t.replace(/^#/,"").match(/.{1,2}/g)?.map(X)||[],K=t=>("0"+t.toString(16)).slice(-2),H=(t,e,s)=>"#"+K(t)+K(e)+K(s),Q=(t,e)=>{const s=_(t);e=i(e,0,1);const[r,n,a]=s.map(t=>Math.round(t*e));return H(r,n,a)},J=(t,e)=>{const s=_(t);e=i(e,0,1);const[r,n,a]=s.map(t=>Math.round(t+(255-t)*e));return H(r,n,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)=>F(e??Z,e=>0==e?t:e>0?J(t,e):Q(t,1- -1*e)),B=(t,e,s)=>{t/=60;const r=(1-Math.abs(2*s-1))*e,n=r*(1-Math.abs(t%2-1));let i=[0,0,0];t<=1?i=[r,n,0]:t<=2?i=[n,r,0]:t<=3?i=[0,r,n]:t<=4?i=[0,n,r]:t<=5?i=[n,0,r]:t<=6&&(i=[r,0,n]);const a=s-.5*r;return[Math.round(255*(i[0]+a)),Math.round(255*(i[1]+a)),Math.round(255*(i[2]+a))]},W=(t,e,s,r,n)=>0===t?0:e===s?(r-n)/t%6:e===r?(n-s)/t+2:e===n?(s-r)/t+4:0,G=(t,e)=>0===t?0:t/(1-Math.abs(2*e-1)),V=(t,e,s)=>{const[r,n,i]=((...t)=>t.map(t=>t/255))(t,e,s),a=Math.max(r,n,i),l=Math.min(r,n,i),u=a-l,h=(l+a)/2;return[60*W(u,a,r,n,i),G(u,h),h]};class tt{constructor(t){this.key=this.shuffle(tt.dictionary,t,!1)}encrypt(t){return this.shuffle(t,this.key,!1)}decrypt(t){return this.shuffle(t,this.key,!0)}index(t,e,s){return[tt.dictionary.indexOf(t[s]),tt.dictionary.indexOf(e[s%e.length])]}result(t,e,s){return tt.dictionary[(s?t-e+tt.dictionary.length:t+e)%tt.dictionary.length]}shuffle(t,e,s){let r="";for(let n=0;n<t.length;n++){const[i,a]=this.index(t,e,n);r+=-1===i||-1===a?t[n]:this.result(i,a,s)}return r}static hex(t){let e=0;for(let s=0;s<t.length;s++)e=16777619*(e^t.charCodeAt(s));return(e>>>0).toString(16).padStart(8,"0")}}tt.dictionary="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";const et=(t=64)=>Array(Math.ceil(t/2)).fill(0).map(()=>l(0,255).toString(16).padStart(2,"0")).join("").slice(0,t),st=()=>{const t=1e4*(Date.now()+122192928e5),e=(4294967295&t)>>>0,s=(t/4294967296&65535)>>>0,r=(t/281474976710656&4095)>>>0,n=l(0,e),i=(t,e)=>t.toString(16).padStart(e,"0");return[i(e,8),i(s,4),i(4096|r,4),i(n>>8&63|128,2)+i(255&n,2),et(12)].join("-")},rt=t=>{const e=t.replace(/-/g,""),s=parseInt(e.slice(0,8),16),r=parseInt(e.slice(8,12),16),n=(4095&parseInt(e.slice(12,16),16))*Math.pow(2,48)+r*Math.pow(2,32)+s;return Math.floor((n-122192928e9)/1e4)},nt=()=>{const t=[];t.push(...Array(16).fill(0).map(()=>l(0,255))),t[6]=15&t[6]|64;const e=t.map(t=>t.toString(16).padStart(2,"0")).join("");return[e.slice(0,8),e.slice(8,12),e.slice(12,16),e.slice(16,20),e.slice(20)].join("-")},it=()=>{const t=Date.now(),e=[];e[0]=t/2**40&255,e[1]=t/2**32&255,e[2]=t>>>24&255,e[3]=t>>>16&255,e[4]=t>>>8&255,e[5]=255&t,e.push(...Array(10).fill(0).map(()=>l(0,255))),e[6]=15&e[6]|112,e[8]=63&e[8]|128;const s=e.map(t=>t.toString(16).padStart(2,"0")).join("");return[s.slice(0,8),s.slice(8,12),s.slice(12,16),s.slice(16,20),s.slice(20)].join("-")},at=t=>parseInt(t.replace(/-/g,"").slice(0,12),16),lt=t=>{const e=Date.now(),s=[];s[0]=e/2**40&255,s[1]=e/2**32&255,s[2]=e>>>24&255,s[3]=e>>>16&255,s[4]=e>>>8&255,s[5]=255&e,s.push(...Array(8).fill(0).map(()=>l(0,255))),s[6]=15&s[6]|128,s[8]=63&s[8]|128;const r=s.map(t=>t.toString(16).padStart(2,"0")).join("");return[r.slice(0,8),r.slice(8,12),r.slice(12,16),tt.hex(t??"").slice(4),r.slice(16)].join("-")},ut=t=>("0"+t.toString()).slice(-2),ht={"%y":(t,e)=>ut(e?t.getUTCFullYear():t.getFullYear()),"%Y":(t,e)=>(e?t.getUTCFullYear():t.getFullYear()).toString(),"%m":(t,e)=>ut((e?t.getUTCMonth():t.getMonth())+1),"%d":(t,e)=>ut(e?t.getUTCDate():t.getDate()),"%H":(t,e)=>ut(e?t.getUTCHours():t.getHours()),"%M":(t,e)=>ut(e?t.getUTCMinutes():t.getMinutes()),"%S":(t,e)=>ut(e?t.getUTCSeconds():t.getSeconds())},ot=(t,e,s)=>(e=e??new Date,t.replace(/%[yYmdHMS]/g,t=>ht[t]?ht[t](e,s):t.slice(1))),ct=36e5,pt=24*ct,vt={ms:1,s:1e3,m:6e4,h:ct,d:pt,w:7*pt,y:315576e5},gt=t=>{const e=/(-?(?:\d+)?\.?\d+) *(ms|s|m|h|d|w|y)/gm;let s,r=0;for(;null!==(s=e.exec(t));)s.index===e.lastIndex&&e.lastIndex++,r+=parseFloat(s[1])*vt[s[2]]||0;return r},mt=(t,e,s)=>{const r=new Date(t);s=s??gt("1d");const n=[];for(;r<e;)r.setTime(r.getTime()+s),n.push(new Date(r));return n},dt=t=>{const e=new Date(t);return e.getTime()==e.getTime()&&t==e.toISOString().slice(0,10)},ft=t=>new Date(t.getFullYear(),t.getMonth()+1,0,t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()),St=(t,e)=>/^([\d]{4})-([\d]{2})-([\d]{2})$/.test(t)?dt(t)?new Date(`${t} ${e}`):null:/^([\d]{4})-([\d]{2})$/.test(t)&&dt(t=`${t}-01`)?new Date(`${t} ${e}`):null,yt=(t,e)=>{const s=t??ot("%Y-%m"),r=St(s,"00:00:00");if(!r||!dt(r.toISOString().slice(0,10)))return[null,null];const n=e||s;let i=St(n,"23:59:59");return i&&dt(i.toISOString().slice(0,10))?(7==n.length&&(i=ft(i)),r>i?[null,null]:[r,i]):[r,null]},xt=t=>new Date(t.getFullYear(),t.getMonth(),1,t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()),Et=["y","d","h","m","s","ms"],wt=t=>{const e=[];return Et.forEach(s=>{const r=vt[s],n=(t-t%r)/r;n&&(t-=n*r,e.push(n.toString()+s))}),e.join(" ")},bt=(t,e)=>{let s;const r=()=>{s&&clearTimeout(s)};return{cancel:r,run(...n){r(),s=setTimeout(()=>t(...n),e)}}};class It{constructor(){this.events=new Map}on(t,e){const s=this.events.get(t);return s?s.push(e):this.events.set(t,[e]),{dispose:()=>this.off(t,e)}}once(t,e){const s=r=>{e(r),this.off(t,s)};return this.on(t,s),{dispose:()=>this.off(t,s)}}off(t,e){const s=this.events.get(t);if(e){if(s){const t=s.indexOf(e);t>=0&&s.splice(t,1)}}else this.events.set(t,[])}emit(t,e){const s=this.events.get(t);s&&s.forEach(t=>t(e))}}const Mt=(t,e)=>{let s=!1;const r=async()=>{s&&(await t(),setTimeout(r,e))};return{start(){s||(s=!0,r())},stop(){s=!1}}},Ot=t=>0==(t?.length??0),Ct=["",0,"0",null,!1,void 0],Tt=t=>-1==Ct.indexOf(t),Rt=t=>!Tt(t),Dt=t=>!Ot(t),At=()=>{},jt=(t,e,s)=>e(t.toLowerCase().replace(/\W+/g," ")).replace(/\s/g,s??""),kt=(t,e)=>jt(t,t=>t.replace(/\s(\w)/g,t=>t.toUpperCase()),e),Nt=kt,Yt=(t,e)=>{if(t.length>e){const s=t.substring(0,e).split(" ");return s.pop(),s.join(" ")+"..."}return t},Ut=/&(amp|apos|lt|gt|nbsp|quot);/g,Pt={amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",quot:'"'},$t=t=>t.replace(Ut,(t,e)=>Pt[e]).replace(/&#(\d+);/gi,(t,e)=>String.fromCharCode(parseInt(e,10))),Lt=t=>t.replace(/[^0-9A-Za-z ]/g,t=>"&#"+t.charCodeAt(0)+";"),qt=t=>/^[\w]$/.test(t),Ft=t=>/^[\d]$/.test(t),Xt=t=>/^[A-Za-z]$/.test(t),_t=t=>/^[^\w]$/.test(t),Kt=t=>{if(f(t))return t+"px";const e=(t=>/(-?(?:\d+)?\.?\d+) *(px|%|cm|mm|in|pt|pc|en|ex|ch|rem|vw|vh|vmin|vmax)*/g.exec(t))(t);return e?parseFloat(e[1])+(e[2]||"px"):"0px"},Ht=t=>t.split("").map(t=>Math.random()<.5?t.toUpperCase():t.toLowerCase()).join(""),Qt=t=>o(t.split("")).join("");class Jt{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 Jt).chars()}lower(){return this.hasLower=!0,this}static lower(){return(new Jt).lower()}make(t){let e="";this.hasSpace&&(e+=this._space),this.hasNumbers&&(e+=this._numbers),this.hasSymbols&&(e+=this._symbols),this.hasUpper&&!this.hasChars&&(e+=this._upper),this.hasLower&&!this.hasChars&&(e+=this._lower),this.hasChars&&(e+=this._chars);let s="";if(t&&e.length){e=Qt(e);for(let r=0;r<t;r++)s+=e.charAt(l(0,e.length-1))}return s}numbers(){return this.hasNumbers=!0,this}static numbers(){return(new Jt).numbers()}space(){return this.hasSpace=!0,this}static space(){return(new Jt).space()}symbols(){return this.hasSymbols=!0,this}static symbols(){return(new Jt).symbols()}upper(){return this.hasUpper=!0,this}static upper(){return(new Jt).upper()}}const Zt=t=>t.split("").reverse().join(""),zt=(t,e)=>jt(t,t=>t.replace(/(\w)(\w*)/g,(t,e,s)=>e.toUpperCase()+s),e),Bt=(t,e)=>e(t.value)?t.value:(t=>(t.maskIndex--,""))(t),Wt={"#":t=>t.value,0:t=>Bt(t,Ft),9:t=>Bt(t,Ft),A:t=>Bt(t,Xt),Z:t=>Bt(t,Xt),L:t=>Bt(t,Xt).toLowerCase(),U:t=>Bt(t,Xt).toUpperCase(),S:t=>Bt(t,_t)},Gt=t=>{t.maskIndex++,t.textIndex++;const{mask:e,maskIndex:s,text:r,textIndex:n}=t;t.key=e[s],t.value=r[n];const{key:i,value:a}=t;return A(i)||A(a)?"":(t=>Wt[t.key]?Wt[t.key](t):(t.key!=t.value&&t.textIndex--,t.key))(t)+Gt(t)},Vt=(t,e)=>Gt({mask:t,maskIndex:-1,text:e,textIndex:-1,key:"",value:""}),te=(t,e)=>Zt(Vt(Zt(t),Zt(e))),ee=(t,e,s)=>(s++,e=parseInt((e||"0").replace(/\D/g,"")).toString(),te(t,e.length<s?("0".repeat(s)+e).slice(-1*s):e)),se=(t,e)=>t.length==Vt(t,e).length,re=(t,e)=>t.reduce((t,s)=>({...t,[s]:e[s]}),{}),ne=t=>t instanceof Date?new Date(t.getTime()):v(t)?t.map(t=>ne(t)):b(t)?F(t,t=>ne(t)):t,ie=(t,e)=>re(Object.keys(e).filter(e=>-1==t.indexOf(e)),e),ae=(t,...e)=>{if(!e.length)return t;const s=e.shift();if(I(t)&&I(s))for(const e in s)I(s[e])?(t[e]||(t={...t,[e]:{}}),t[e]=ae(t[e],s[e])):t={...t,[e]:s[e]};return ae(t,...e)};class le{constructor(){this.running=!1,this.queue=[]}push(t){return new Promise((e,s)=>{this.queue.push(async()=>{try{const s=await t();e(s)}catch(t){s(t)}}),this.run()})}async run(){if(!this.running){for(this.running=!0;this.queue.length>0;){const t=this.queue.shift();t&&await t()}this.running=!1}}}const ue=async(t,e,s)=>{await Promise.allSettled(t.map((r,n)=>e.call(s,r,n,t)?.catch(At))).catch(At)},he=async t=>{let e=!0;const s=()=>e=!0;let r=1;for(;e;)e=!1,await(t(r,s)?.catch(At)),r+=1},oe=async(t,e,s)=>{for(let r=0;r<t.length;r++)await(e.call(s,t[r],r,t)?.catch(At))},ce=t=>new Promise(e=>setTimeout(e,t));class pe{}var ve,ge,me,de,fe,Se,ye,xe,Ee;pe.DESCRIPTION=Symbol("DESCRIPTION"),pe.ERROR=Symbol("ERROR"),pe.EXAMPLE=Symbol("EXAMPLE"),pe.INDEXES=Symbol("INDEXES"),pe.KEYS=Symbol("KEYS"),pe.LIST=Symbol("LIST"),pe.NAME=Symbol("NAME"),pe.REQUIRED=Symbol("REQUIRED"),pe.SOURCE=Symbol("SOURCE"),pe.TYPE=Symbol("TYPE");class we{constructor(t){this[ve]="",this[ge]="",this[me]=null,this[de]="",this[fe]="any",this[Se]=!1,this.rules=[],this.custom=[],this[pe.TYPE]=t}description(t){return this[pe.DESCRIPTION]=t,this}example(t){return this[pe.EXAMPLE]=t,this}empty(t){const e=t;return this.unshift(({value:t})=>{const s=d(t);return{break:!d(e)&&!s,value:s?t:y(e)?e():e}})}equal(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t==n?{value:t}:this.invalid(`.equal(${n})`,e)})}error(t){return R(t)&&(this[pe.ERROR]=t),this}filter(...t){const e=t;return this.unshift(({value:t})=>{const s=-1==e.indexOf(t);return{break:!s,value:s?t:void 0}})}fn(t){return y(t)?t:()=>t}from(t){return this[pe.SOURCE]=t,this}invalid(t,e){return t=`[${this[pe.TYPE]}]${t}`,{error:this[pe.ERROR]?this[pe.ERROR]:this[pe.NAME]?this[pe.NAME]+":"+t:t,message:e}}model(){return this.toString()}parse(){return this.unshift(({value:t})=>({value:t}))}push(t){return this.rules.push(t),this}required(t){return this[pe.REQUIRED]=!0,this.unshift(({value:e})=>d(e)?{value:e}:this.invalid(".required",t))}test(t){return!R(this.validate(t).error)}async testAsync(t){return!R((await this.validateAsync(t)).error)}toString(){return this[pe.TYPE]}unshift(t){return this.rules.unshift(t),this}validate(t,e){if(this.custom.length)return this.invalid("[async]");let s={value:t};for(let t=0;t<this.rules.length;t++){if(s=this.rules[t]({value:s.value,context:e}),s.error?.length)return{error:s.error,...s.message?{message:s.message}:{}};if(s.break)return{value:s.value}}return{value:s.value}}async validateAsync(t,e){let s=this.validate(t,e);if(s.error)return{error:s.error};for(let t=0;t<this.custom.length;t++){if(s=await this.custom[t]({value:s.value}),s.error)return{error:s.error};if(s.break)return{value:s.value}}return{value:s.value}}}ve=pe.NAME,ge=pe.DESCRIPTION,me=pe.EXAMPLE,pe.SOURCE,de=pe.ERROR,fe=pe.TYPE,Se=pe.REQUIRED;class be extends we{constructor(t){super("array"),this[ye]=[],this.push(({value:e})=>v(e)?{value:e}:this.invalid("",t))}between(t,e,s){return this.min(t,s),this.max(e,s)}items(t,e){const s=t;return s&&this[pe.INDEXES].push(s),s?this.push(({value:t})=>{const r=[];s[pe.NAME]="";for(let n=0;n<t.length;n++){const{error:i,value:a}=s.validate(t[n],t);if(i)return this.invalid("< "+i+"["+n+"] >",e);r[n]=a}return{value:r}}):this}length(t,e){const s=t;return this.push(({value:t})=>t.length==s?{value:t}:this.invalid(".length("+s+")",e))}max(t,e){const s=t;return this.push(({value:t})=>t.length<=s?{value:t}:this.invalid(".max("+s+")",e))}min(t,e){const s=t;return this.push(({value:t})=>t.length>=s?{value:t}:this.invalid(".min("+s+")",e))}model(){return this[pe.INDEXES].length?this[pe.INDEXES].map(t=>t.model()):this[pe.TYPE]}toString(){return this[pe.INDEXES].length?JSON.stringify(this.model(),null,4):this[pe.TYPE]}}ye=pe.INDEXES;class Ie extends we{constructor(t){super("boolean"),this.push(({value:e})=>g(e)?{value:e}:this.invalid("",t))}parse(){return this.unshift(({value:t})=>({value:d(t)?Y(t):t}))}}class Me extends we{constructor(t){super("date"),this.push(({value:e})=>R(e)&&dt(e)||!isNaN(new Date(e).getTime())?{value:e}:this.invalid("",t))}format(t){const e=t;return this.push(({value:t})=>({value:ot(e,new Date(t))}))}parse(){return this.unshift(({value:t})=>({value:new Date(t)}))}}class Oe extends we{constructor(t){super("enum"),this[xe]=[],this.push(({value:e})=>d(e)?{value:e}:this.invalid(`('${this[pe.LIST].join("', '")}')`,t))}list(t,e){const s=t;return s&&this[pe.LIST].push(...s),s?this.push(({value:t})=>-1!=this[pe.LIST].indexOf(t)?{value:t}:this.invalid(`('${this[pe.LIST].join("', '")}')`,e)):this}toString(){return`${this[pe.TYPE]}('${this[pe.LIST].join("', '")}')`}}xe=pe.LIST;class Ce extends we{constructor(t){super("number"),this.push(({value:e})=>f(e)?{value:e}:this.invalid("",t))}between(t,e,s){return this.min(t,s),this.max(e,s)}float(t){return this.push(({value:e})=>S(e)?{value:e}:this.invalid(".float",t))}integer(t){return this.push(({value:e})=>x(e)?{value:e}:this.invalid(".integer",t))}max(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t<=n?{value:t}:this.invalid(`.max(${n})`,e)})}min(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t>=n?{value:t}:this.invalid(`.min(${n})`,e)})}parse(){return this.unshift(({value:t})=>({value:d(t)?parseFloat(t.toString()):t}))}}class Te extends we{constructor(t){super("object"),this[Ee]={},this.push(({value:e})=>b(e)?{value:e}:this.invalid("",t))}keys(t,e){const s=t;return s&&(this[pe.KEYS]={...this[pe.KEYS],...s}),s?this.push(({value:t})=>{const r=[],n={};return Object.keys(s).forEach(i=>{const a=s[i];a[pe.NAME]=a[pe.SOURCE]??i;const{error:l,message:u,value:h}=a.validate(t[a[pe.NAME]],n);!e&&u&&(e=u),l&&r.push(l),d(h)&&(n[i]=h)}),r.length?this.invalid("{ "+r.join(", ")+" }",e):{value:n}}):this}model(){const t={},e=Object.keys(this[pe.KEYS]);return e.length&&e.forEach(e=>t[e]=this[pe.KEYS][e].model()),e.length?t:this[pe.TYPE]}parse(t){return this.unshift(({value:e})=>{if(!b(e))try{e=JSON.parse(e)}catch(e){return this.invalid("",t)}return{value:e}})}toString(){return Object.keys(this[pe.KEYS]).length?JSON.stringify(this.model(),null,4):this[pe.TYPE]}}Ee=pe.KEYS;class Re extends we{constructor(t){super("string"),this.push(({value:e})=>R(e)?{value:e}:this.invalid("",t))}between(t,e,s){return this.min(t,s),this.max(e,s)}email(t){const e=/^[\w-\\.]+@([\w-]+\.)+[\w-]{2,4}$/i;return this.push(({value:s})=>e.test(s)?{value:s}:this.invalid(".email",t))}length(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t.length==n?{value:t}:this.invalid(`.length(${n})`,e)})}lowerCase(){return this.push(({value:t})=>({value:t.toLowerCase()}))}lowerCamelCase(){return this.push(({value:t})=>({value:kt(t)}))}max(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t.length<=n?{value:t}:this.invalid(`.max(${n})`,e)})}mask(t){const e=this.fn(t);return this.push(({value:t,context:s})=>({value:Vt(e({value:t,context:s}),t)}))}min(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t.length>=n?{value:t}:this.invalid(`.min(${n})`,e)})}parse(){return this.unshift(({value:t})=>({value:b(t)?JSON.stringify(t):d(t)?t.toString():t}))}required(t){return this[pe.REQUIRED]=!0,this.push(({value:e})=>e.length?{value:e}:this.invalid(".required",t))}regex(t,e){return this.push(({value:s})=>t.test(s)?{value:s}:this.invalid(".regex",e))}replace(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>({value:t.replace(s({value:t,context:r}),e)}))}trim(){return this.push(({value:t})=>({value:t.trim()}))}upperCase(){return this.push(({value:t})=>({value:t.toUpperCase()}))}upperCamelCase(){return this.push(({value:t})=>({value:zt(t)}))}}class De{static array(t,e){return new be(e).items(t)}static boolean(t){return new Ie(t)}static date(t){return new Me(t)}static enum(t,e){return new Oe(e).list(t)}static number(t){return new Ce(t)}static object(t,e){return new Te(e).keys(t)}static ref(t,e){return({context:s})=>s&&d(s[t])?s[t]:e}static string(t){return new Re(t)}test(t,...e){return!R(De.validate(t,...e).error)}async testAsync(t,...e){return!R((await De.validateAsync(t,...e)).error)}static validate(t,...e){let s={value:t};for(let t=0;t<e.length;t++)if(s=e[t].validate(s.value),s.error)return{value:s.value,error:s.error};return{value:s.value}}static async validateAsync(t,...e){let s={value:t};for(let t=0;t<e.length;t++)if(s=await e[t].validateAsync(s.value),s.error)return{value:s.value,error:s.error};return{value:s.value}}}export{le as AsyncQueue,It as EventEmitter,tt as Hash,Jt as RandomString,De as Validation,we as ValidationBase,pe as ValidationKeys,re as allowed,U as cache,Nt as camelCase,t as chunkArray,i as clamp,ne as clone,z as colorPalette,e as compareArray,s as countArray,Yt as cutText,ot as dateFormat,mt as dateInterval,yt as dateRange,bt as debounce,$t as decodeHTML,ie as denied,L as each,Lt as encodeHTML,xt as firstDayDate,ue as forEachAsync,P as forEachIndex,$ as forEachKey,he as forEachPage,oe as forEachSeries,q as forLoop,_ as hexToRgb,B as hslToRgb,r as inArray,n as includesArray,v as isArray,g as isBoolean,qt as isCharacter,m as isDate,d as isDef,Ft as isDigit,Ot as isEmpty,Rt as isFalse,S as isFloat,y as isFunction,x as isInteger,Xt as isLetter,E as isMap,Dt as isNotEmpty,w as isNull,f as isNumber,b as isObject,I as isPlainObject,M as isRegExp,C as isScalar,T as isSet,_t as isSpecialChar,R as isString,D as isSymbol,Tt as isTrue,A as isUndefined,dt as isValidDate,ft as lastDayDate,a as lerp,Mt as loop,kt as lowerCamelCase,F as map,Vt as mask,ee as maskMoney,te as maskReverse,se as maskTest,ae as merge,wt as msToString,At as noop,gt as parseMs,Kt as parseSize,l as random,Ht as randomCase,u as randomElement,h as rangeArray,H as rgbToHex,V as rgbToHsl,Q as shadeColor,o as shuffleArray,Qt as shuffleString,ce as sleep,Zt as stringReverse,J as tintColor,j as toArray,Y as toBool,p as type,k as uniqueArray,et as uniqueID,zt as upperCamelCase,st as uuidv1,rt as uuidv1ToTimestamp,nt as uuidv4,it as uuidv7,at as uuidv7ToTimestamp,lt as uuidv8};
7
+ const t=(t,e)=>{const s=[];for(let r=0;r<t.length;r+=e)s.push(t.slice(r,r+e));return s},e=(t,e)=>t.length===e.length&&t.every((t,s)=>t===e[s]),s=t=>{const e={};return t.forEach(t=>{const s=t.toString();e[s]=(e[s]||0)+1}),e},r=(t,e)=>-1!=e.indexOf(t),n=(t,e)=>t.every(t=>e.includes(t)),i=(t,e,s)=>Math.max(e,Math.min(s,t)),a=(t,e,s)=>t+(e-t)*i(s,0,1),l=(t,e)=>Math.floor(Math.random()*(e-t+1)+t),u=t=>t.length?t[l(0,t.length-1)]:null,h=(t,e,s=1)=>Array.from({length:(e-t)/s+1},(e,r)=>t+r*s),o=t=>{for(let e=t.length-1;e>0;e--){const s=l(0,e);[t[e],t[s]]=[t[s],t[e]]}return t},c={},p=t=>null==t?"null":c[c.toString.call(t)]||"object";["Array","AsyncFunction","Boolean","Date","Function","Map","Number","Object","RegExp","Set","String"].forEach(t=>c["[object "+t+"]"]=t.toLowerCase());const v=t=>"array"==p(t),g=t=>"boolean"==p(t),m=t=>"date"==p(t),d=t=>"null"!=p(t),f=t=>"number"==p(t),S=t=>f(t)&&!!(t%1),y=t=>"function"==typeof t,x=t=>f(t)&&!(t%1),E=t=>"map"==p(t),w=t=>null===t,b=t=>"object"==p(t),I=t=>b(t)&&t.constructor===Object,M=t=>"regexp"==p(t),O=["boolean","number","string"],C=t=>-1!=O.indexOf(p(t)),T=t=>"set"==p(t),R=t=>"string"==typeof t,D=t=>"symbol"==typeof t,A=t=>void 0===t,j=t=>v(t)?t:d(t)?[t]:[],k=t=>t.filter((t,e,s)=>s.indexOf(t)===e),N=[1,"1",!0,"true"],Y=t=>-1!=N.indexOf(t),U=()=>{const t=[],e=[];return s=>{let r=t.indexOf(s);return-1==r&&(t.push(s),e.push({}),r=e.length-1),e[r]}},P=(t,e,s)=>{for(let r=0;r<t.length&&!1!==e.call(s,t[r],r,t);r++);return t},$=(t,e,s)=>{let r="";const n=Object.keys(t);for(let i=0;i<n.length&&(r=n[i],!1!==e.call(s,t[r],r,t));i++);return t},L=(t,e,s)=>v(t)?P(t,e,s):b(t)?$(t,e,s):t,q=(t,e,s)=>{for(let r=1;r<=t&&!1!==e.call(s,r,t);r++);return t},F=(t,e,s)=>Object.fromEntries(Object.entries(t).map(([r,n])=>[r,e.call(s,n,r,t)])),X=t=>parseInt(t??"0",16)||0,_=t=>t.replace(/^#/,"").match(/.{1,2}/g)?.map(X)||[],K=t=>("0"+t.toString(16)).slice(-2),H=(t,e,s)=>"#"+K(t)+K(e)+K(s),Q=(t,e)=>{const s=_(t);e=i(e,0,1);const[r,n,a]=s.map(t=>Math.round(t*e));return H(r,n,a)},J=(t,e)=>{const s=_(t);e=i(e,0,1);const[r,n,a]=s.map(t=>Math.round(t+(255-t)*e));return H(r,n,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)=>F(e??Z,e=>0==e?t:e>0?J(t,e):Q(t,1- -1*e)),B=(t,e,s)=>{t/=60;const r=(1-Math.abs(2*s-1))*e,n=r*(1-Math.abs(t%2-1));let i=[0,0,0];t<=1?i=[r,n,0]:t<=2?i=[n,r,0]:t<=3?i=[0,r,n]:t<=4?i=[0,n,r]:t<=5?i=[n,0,r]:t<=6&&(i=[r,0,n]);const a=s-.5*r;return[Math.round(255*(i[0]+a)),Math.round(255*(i[1]+a)),Math.round(255*(i[2]+a))]},W=(t,e,s,r,n)=>0===t?0:e===s?(r-n)/t%6:e===r?(n-s)/t+2:e===n?(s-r)/t+4:0,G=(t,e)=>0===t?0:t/(1-Math.abs(2*e-1)),V=(t,e,s)=>{const[r,n,i]=((...t)=>t.map(t=>t/255))(t,e,s),a=Math.max(r,n,i),l=Math.min(r,n,i),u=a-l,h=(l+a)/2;return[60*W(u,a,r,n,i),G(u,h),h]};class tt{constructor(t){this.key=this.shuffle(tt.dictionary,t,!1)}encrypt(t){return this.shuffle(t,this.key,!1)}decrypt(t){return this.shuffle(t,this.key,!0)}index(t,e,s){return[tt.dictionary.indexOf(t[s]),tt.dictionary.indexOf(e[s%e.length])]}result(t,e,s){return tt.dictionary[(s?t-e+tt.dictionary.length:t+e)%tt.dictionary.length]}shuffle(t,e,s){let r="";for(let n=0;n<t.length;n++){const[i,a]=this.index(t,e,n);r+=-1===i||-1===a?t[n]:this.result(i,a,s)}return r}static hex(t){let e=0;for(let s=0;s<t.length;s++)e=16777619*(e^t.charCodeAt(s));return(e>>>0).toString(16).padStart(8,"0")}}tt.dictionary="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";const et=(t=64)=>Array(Math.ceil(t/2)).fill(0).map(()=>l(0,255).toString(16).padStart(2,"0")).join("").slice(0,t),st=()=>{const t=1e4*(Date.now()+122192928e5),e=(4294967295&t)>>>0,s=(t/4294967296&65535)>>>0,r=(t/281474976710656&4095)>>>0,n=l(0,e),i=(t,e)=>t.toString(16).padStart(e,"0");return[i(e,8),i(s,4),i(4096|r,4),i(n>>8&63|128,2)+i(255&n,2),et(12)].join("-")},rt=t=>{const e=t.replace(/-/g,""),s=parseInt(e.slice(0,8),16),r=parseInt(e.slice(8,12),16),n=(4095&parseInt(e.slice(12,16),16))*Math.pow(2,48)+r*Math.pow(2,32)+s;return Math.floor((n-122192928e9)/1e4)},nt=()=>{const t=[];t.push(...Array(16).fill(0).map(()=>l(0,255))),t[6]=15&t[6]|64;const e=t.map(t=>t.toString(16).padStart(2,"0")).join("");return[e.slice(0,8),e.slice(8,12),e.slice(12,16),e.slice(16,20),e.slice(20)].join("-")},it=()=>{const t=Date.now(),e=[];e[0]=t/2**40&255,e[1]=t/2**32&255,e[2]=t>>>24&255,e[3]=t>>>16&255,e[4]=t>>>8&255,e[5]=255&t,e.push(...Array(10).fill(0).map(()=>l(0,255))),e[6]=15&e[6]|112,e[8]=63&e[8]|128;const s=e.map(t=>t.toString(16).padStart(2,"0")).join("");return[s.slice(0,8),s.slice(8,12),s.slice(12,16),s.slice(16,20),s.slice(20)].join("-")},at=t=>parseInt(t.replace(/-/g,"").slice(0,12),16),lt=t=>{const e=Date.now(),s=[];s[0]=e/2**40&255,s[1]=e/2**32&255,s[2]=e>>>24&255,s[3]=e>>>16&255,s[4]=e>>>8&255,s[5]=255&e,s.push(...Array(8).fill(0).map(()=>l(0,255))),s[6]=15&s[6]|128,s[8]=63&s[8]|128;const r=s.map(t=>t.toString(16).padStart(2,"0")).join("");return[r.slice(0,8),r.slice(8,12),r.slice(12,16),tt.hex(t??"").slice(4),r.slice(16)].join("-")},ut=t=>("0"+t.toString()).slice(-2),ht={"%y":(t,e)=>ut(e?t.getUTCFullYear():t.getFullYear()),"%Y":(t,e)=>(e?t.getUTCFullYear():t.getFullYear()).toString(),"%m":(t,e)=>ut((e?t.getUTCMonth():t.getMonth())+1),"%d":(t,e)=>ut(e?t.getUTCDate():t.getDate()),"%H":(t,e)=>ut(e?t.getUTCHours():t.getHours()),"%M":(t,e)=>ut(e?t.getUTCMinutes():t.getMinutes()),"%S":(t,e)=>ut(e?t.getUTCSeconds():t.getSeconds())},ot=(t,e,s)=>(e=e??new Date,t.replace(/%[yYmdHMS]/g,t=>ht[t]?ht[t](e,s):t.slice(1))),ct=36e5,pt=24*ct,vt={ms:1,s:1e3,m:6e4,h:ct,d:pt,w:7*pt,y:315576e5},gt=t=>{const e=/(-?(?:\d+)?\.?\d+)\s*(ms|s|m|h|d|w|y)/gm;let s,r=0;for(;null!==(s=e.exec(t));)s.index===e.lastIndex&&e.lastIndex++,r+=parseFloat(s[1])*vt[s[2]]||0;return r},mt=(t,e,s)=>{const r=new Date(t);s=s??gt("1d");const n=[];for(;r<e;)r.setTime(r.getTime()+s),n.push(new Date(r));return n},dt=t=>{const e=new Date(t);return e.getTime()==e.getTime()&&t==e.toISOString().slice(0,10)},ft=t=>new Date(t.getFullYear(),t.getMonth()+1,0,t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()),St=(t,e)=>/^([\d]{4})-([\d]{2})-([\d]{2})$/.test(t)?dt(t)?new Date(`${t} ${e}`):null:/^([\d]{4})-([\d]{2})$/.test(t)&&dt(t=`${t}-01`)?new Date(`${t} ${e}`):null,yt=(t,e)=>{const s=t??ot("%Y-%m"),r=St(s,"00:00:00");if(!r||!dt(r.toISOString().slice(0,10)))return[null,null];const n=e||s;let i=St(n,"23:59:59");return i&&dt(i.toISOString().slice(0,10))?(7==n.length&&(i=ft(i)),r>i?[null,null]:[r,i]):[r,null]},xt=t=>new Date(t.getFullYear(),t.getMonth(),1,t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()),Et=["y","d","h","m","s","ms"],wt=t=>{const e=[];return Et.forEach(s=>{const r=vt[s],n=(t-t%r)/r;n&&(t-=n*r,e.push(n.toString()+s))}),e.join(" ")},bt=(t,e)=>{let s;const r=()=>{s&&clearTimeout(s)};return{cancel:r,run(...n){r(),s=setTimeout(()=>t(...n),e)}}};class It{constructor(){this.events=new Map}on(t,e){const s=this.events.get(t);return s?s.push(e):this.events.set(t,[e]),{dispose:()=>this.off(t,e)}}once(t,e){const s=r=>{e(r),this.off(t,s)};return this.on(t,s),{dispose:()=>this.off(t,s)}}off(t,e){const s=this.events.get(t);if(e){if(s){const t=s.indexOf(e);t>=0&&s.splice(t,1)}}else this.events.set(t,[])}emit(t,e){const s=this.events.get(t);s&&s.forEach(t=>t(e))}}const Mt=(t,e)=>{let s=!1;const r=async()=>{s&&(await t(),setTimeout(r,e))};return{start(){s||(s=!0,r())},stop(){s=!1}}},Ot=t=>0==(t?.length??0),Ct=["",0,"0",null,!1,void 0],Tt=t=>-1==Ct.indexOf(t),Rt=t=>!Tt(t),Dt=t=>!Ot(t),At=()=>{},jt=(t,e,s)=>e(t.toLowerCase().replace(/\W+/g," ")).replace(/\s/g,s??""),kt=(t,e)=>jt(t,t=>t.replace(/\s(\w)/g,t=>t.toUpperCase()),e),Nt=kt,Yt=(t,e)=>{if(t.length>e){const s=t.substring(0,e).split(" ");return s.pop(),s.join(" ")+"..."}return t},Ut=/&(amp|apos|lt|gt|nbsp|quot);/g,Pt={amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",quot:'"'},$t=t=>t.replace(Ut,(t,e)=>Pt[e]).replace(/&#(\d+);/gi,(t,e)=>String.fromCharCode(parseInt(e,10))),Lt=t=>t.replace(/[^0-9A-Za-z ]/g,t=>"&#"+t.charCodeAt(0)+";"),qt=t=>/^[\w]$/.test(t),Ft=t=>/^[\d]$/.test(t),Xt=t=>/^[A-Za-z]$/.test(t),_t=t=>/^[^\w]$/.test(t),Kt=t=>{if(f(t))return t+"px";const e=(t=>/(-?(?:\d+)?\.?\d+) *(px|%|cm|mm|in|pt|pc|en|ex|ch|rem|vw|vh|vmin|vmax)*/g.exec(t))(t);return e?parseFloat(e[1])+(e[2]||"px"):"0px"},Ht=t=>t.split("").map(t=>Math.random()<.5?t.toUpperCase():t.toLowerCase()).join(""),Qt=t=>o(t.split("")).join("");class Jt{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 Jt).chars()}lower(){return this.hasLower=!0,this}static lower(){return(new Jt).lower()}make(t){let e="";this.hasSpace&&(e+=this._space),this.hasNumbers&&(e+=this._numbers),this.hasSymbols&&(e+=this._symbols),this.hasUpper&&!this.hasChars&&(e+=this._upper),this.hasLower&&!this.hasChars&&(e+=this._lower),this.hasChars&&(e+=this._chars);let s="";if(t&&e.length){e=Qt(e);for(let r=0;r<t;r++)s+=e.charAt(l(0,e.length-1))}return s}numbers(){return this.hasNumbers=!0,this}static numbers(){return(new Jt).numbers()}space(){return this.hasSpace=!0,this}static space(){return(new Jt).space()}symbols(){return this.hasSymbols=!0,this}static symbols(){return(new Jt).symbols()}upper(){return this.hasUpper=!0,this}static upper(){return(new Jt).upper()}}const Zt=t=>t.split("").reverse().join(""),zt=(t,e)=>jt(t,t=>t.replace(/(\w)(\w*)/g,(t,e,s)=>e.toUpperCase()+s),e),Bt=(t,e)=>e(t.value)?t.value:(t=>(t.maskIndex--,""))(t),Wt={"#":t=>t.value,0:t=>Bt(t,Ft),9:t=>Bt(t,Ft),A:t=>Bt(t,Xt),Z:t=>Bt(t,Xt),L:t=>Bt(t,Xt).toLowerCase(),U:t=>Bt(t,Xt).toUpperCase(),S:t=>Bt(t,_t)},Gt=t=>{t.maskIndex++,t.textIndex++;const{mask:e,maskIndex:s,text:r,textIndex:n}=t;t.key=e[s],t.value=r[n];const{key:i,value:a}=t;return A(i)||A(a)?"":(t=>Wt[t.key]?Wt[t.key](t):(t.key!=t.value&&t.textIndex--,t.key))(t)+Gt(t)},Vt=(t,e)=>Gt({mask:t,maskIndex:-1,text:e,textIndex:-1,key:"",value:""}),te=(t,e)=>Zt(Vt(Zt(t),Zt(e))),ee=(t,e,s)=>(s++,e=parseInt((e||"0").replace(/\D/g,"")).toString(),te(t,e.length<s?("0".repeat(s)+e).slice(-1*s):e)),se=(t,e)=>t.length==Vt(t,e).length,re=(t,e)=>t.reduce((t,s)=>({...t,[s]:e[s]}),{}),ne=t=>t instanceof Date?new Date(t.getTime()):v(t)?t.map(t=>ne(t)):b(t)?F(t,t=>ne(t)):t,ie=(t,e)=>re(Object.keys(e).filter(e=>-1==t.indexOf(e)),e),ae=(t,...e)=>{if(!e.length)return t;const s=e.shift();if(I(t)&&I(s))for(const e in s)I(s[e])?(t[e]||(t={...t,[e]:{}}),t[e]=ae(t[e],s[e])):t={...t,[e]:s[e]};return ae(t,...e)};class le{constructor(){this.running=!1,this.queue=[]}push(t){return new Promise((e,s)=>{this.queue.push(async()=>{try{const s=await t();e(s)}catch(t){s(t)}}),this.run()})}async run(){if(!this.running){for(this.running=!0;this.queue.length>0;){const t=this.queue.shift();t&&await t()}this.running=!1}}}const ue=async(t,e,s)=>{await Promise.allSettled(t.map((r,n)=>e.call(s,r,n,t)?.catch(At))).catch(At)},he=async t=>{let e=!0;const s=()=>e=!0;let r=1;for(;e;)e=!1,await(t(r,s)?.catch(At)),r+=1},oe=async(t,e,s)=>{for(let r=0;r<t.length;r++)await(e.call(s,t[r],r,t)?.catch(At))},ce=t=>new Promise(e=>setTimeout(e,t));class pe{}var ve,ge,me,de,fe,Se,ye,xe,Ee;pe.DESCRIPTION=Symbol("DESCRIPTION"),pe.ERROR=Symbol("ERROR"),pe.EXAMPLE=Symbol("EXAMPLE"),pe.INDEXES=Symbol("INDEXES"),pe.KEYS=Symbol("KEYS"),pe.LIST=Symbol("LIST"),pe.NAME=Symbol("NAME"),pe.REQUIRED=Symbol("REQUIRED"),pe.SOURCE=Symbol("SOURCE"),pe.TYPE=Symbol("TYPE");class we{constructor(t){this[ve]="",this[ge]="",this[me]=null,this[de]="",this[fe]="any",this[Se]=!1,this.rules=[],this.custom=[],this[pe.TYPE]=t}description(t){return this[pe.DESCRIPTION]=t,this}example(t){return this[pe.EXAMPLE]=t,this}empty(t){const e=t;return this.unshift(({value:t})=>{const s=d(t);return{break:!d(e)&&!s,value:s?t:y(e)?e():e}})}equal(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t==n?{value:t}:this.invalid(`.equal(${n})`,e)})}error(t){return R(t)&&(this[pe.ERROR]=t),this}filter(...t){const e=t;return this.unshift(({value:t})=>{const s=-1==e.indexOf(t);return{break:!s,value:s?t:void 0}})}fn(t){return y(t)?t:()=>t}from(t){return this[pe.SOURCE]=t,this}invalid(t,e){return t=`[${this[pe.TYPE]}]${t}`,{error:this[pe.ERROR]?this[pe.ERROR]:this[pe.NAME]?this[pe.NAME]+":"+t:t,message:e}}model(){return this.toString()}parse(){return this.unshift(({value:t})=>({value:t}))}push(t){return this.rules.push(t),this}required(t){return this[pe.REQUIRED]=!0,this.unshift(({value:e})=>d(e)?{value:e}:this.invalid(".required",t))}test(t){return!R(this.validate(t).error)}async testAsync(t){return!R((await this.validateAsync(t)).error)}toString(){return this[pe.TYPE]}unshift(t){return this.rules.unshift(t),this}validate(t,e){if(this.custom.length)return this.invalid("[async]");let s={value:t};for(let t=0;t<this.rules.length;t++){if(s=this.rules[t]({value:s.value,context:e}),s.error?.length)return{error:s.error,...s.message?{message:s.message}:{}};if(s.break)return{value:s.value}}return{value:s.value}}async validateAsync(t,e){let s=this.validate(t,e);if(s.error)return{error:s.error};for(let t=0;t<this.custom.length;t++){if(s=await this.custom[t]({value:s.value}),s.error)return{error:s.error};if(s.break)return{value:s.value}}return{value:s.value}}}ve=pe.NAME,ge=pe.DESCRIPTION,me=pe.EXAMPLE,pe.SOURCE,de=pe.ERROR,fe=pe.TYPE,Se=pe.REQUIRED;class be extends we{constructor(t){super("array"),this[ye]=[],this.push(({value:e})=>v(e)?{value:e}:this.invalid("",t))}between(t,e,s){return this.min(t,s),this.max(e,s)}items(t,e){const s=t;return s&&this[pe.INDEXES].push(s),s?this.push(({value:t})=>{const r=[];s[pe.NAME]="";for(let n=0;n<t.length;n++){const{error:i,value:a}=s.validate(t[n],t);if(i)return this.invalid("< "+i+"["+n+"] >",e);r[n]=a}return{value:r}}):this}length(t,e){const s=t;return this.push(({value:t})=>t.length==s?{value:t}:this.invalid(".length("+s+")",e))}max(t,e){const s=t;return this.push(({value:t})=>t.length<=s?{value:t}:this.invalid(".max("+s+")",e))}min(t,e){const s=t;return this.push(({value:t})=>t.length>=s?{value:t}:this.invalid(".min("+s+")",e))}model(){return this[pe.INDEXES].length?this[pe.INDEXES].map(t=>t.model()):this[pe.TYPE]}toString(){return this[pe.INDEXES].length?JSON.stringify(this.model(),null,4):this[pe.TYPE]}}ye=pe.INDEXES;class Ie extends we{constructor(t){super("boolean"),this.push(({value:e})=>g(e)?{value:e}:this.invalid("",t))}parse(){return this.unshift(({value:t})=>({value:d(t)?Y(t):t}))}}class Me extends we{constructor(t){super("date"),this.push(({value:e})=>R(e)&&dt(e)||!isNaN(new Date(e).getTime())?{value:e}:this.invalid("",t))}format(t){const e=t;return this.push(({value:t})=>({value:ot(e,new Date(t))}))}parse(){return this.unshift(({value:t})=>({value:new Date(t)}))}}class Oe extends we{constructor(t){super("enum"),this[xe]=[],this.push(({value:e})=>d(e)?{value:e}:this.invalid(`('${this[pe.LIST].join("', '")}')`,t))}list(t,e){const s=t;return s&&this[pe.LIST].push(...s),s?this.push(({value:t})=>-1!=this[pe.LIST].indexOf(t)?{value:t}:this.invalid(`('${this[pe.LIST].join("', '")}')`,e)):this}toString(){return`${this[pe.TYPE]}('${this[pe.LIST].join("', '")}')`}}xe=pe.LIST;class Ce extends we{constructor(t){super("number"),this.push(({value:e})=>f(e)?{value:e}:this.invalid("",t))}between(t,e,s){return this.min(t,s),this.max(e,s)}float(t){return this.push(({value:e})=>S(e)?{value:e}:this.invalid(".float",t))}integer(t){return this.push(({value:e})=>x(e)?{value:e}:this.invalid(".integer",t))}max(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t<=n?{value:t}:this.invalid(`.max(${n})`,e)})}min(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t>=n?{value:t}:this.invalid(`.min(${n})`,e)})}parse(){return this.unshift(({value:t})=>({value:d(t)?parseFloat(t.toString()):t}))}}class Te extends we{constructor(t){super("object"),this[Ee]={},this.push(({value:e})=>b(e)?{value:e}:this.invalid("",t))}keys(t,e){const s=t;return s&&(this[pe.KEYS]={...this[pe.KEYS],...s}),s?this.push(({value:t})=>{const r=[],n={};return Object.keys(s).forEach(i=>{const a=s[i];a[pe.NAME]=a[pe.SOURCE]??i;const{error:l,message:u,value:h}=a.validate(t[a[pe.NAME]],n);!e&&u&&(e=u),l&&r.push(l),d(h)&&(n[i]=h)}),r.length?this.invalid("{ "+r.join(", ")+" }",e):{value:n}}):this}model(){const t={},e=Object.keys(this[pe.KEYS]);return e.length&&e.forEach(e=>t[e]=this[pe.KEYS][e].model()),e.length?t:this[pe.TYPE]}parse(t){return this.unshift(({value:e})=>{if(!b(e))try{e=JSON.parse(e)}catch(e){return this.invalid("",t)}return{value:e}})}toString(){return Object.keys(this[pe.KEYS]).length?JSON.stringify(this.model(),null,4):this[pe.TYPE]}}Ee=pe.KEYS;class Re extends we{constructor(t){super("string"),this.push(({value:e})=>R(e)?{value:e}:this.invalid("",t))}between(t,e,s){return this.min(t,s),this.max(e,s)}email(t){const e=/^[\w-\\.]+@([\w-]+\.)+[\w-]{2,4}$/i;return this.push(({value:s})=>e.test(s)?{value:s}:this.invalid(".email",t))}length(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t.length==n?{value:t}:this.invalid(`.length(${n})`,e)})}lowerCase(){return this.push(({value:t})=>({value:t.toLowerCase()}))}lowerCamelCase(){return this.push(({value:t})=>({value:kt(t)}))}max(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t.length<=n?{value:t}:this.invalid(`.max(${n})`,e)})}mask(t){const e=this.fn(t);return this.push(({value:t,context:s})=>({value:Vt(e({value:t,context:s}),t)}))}min(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t.length>=n?{value:t}:this.invalid(`.min(${n})`,e)})}parse(){return this.unshift(({value:t})=>({value:b(t)?JSON.stringify(t):d(t)?t.toString():t}))}required(t){return this[pe.REQUIRED]=!0,this.push(({value:e})=>e.length?{value:e}:this.invalid(".required",t))}regex(t,e){return this.push(({value:s})=>t.test(s)?{value:s}:this.invalid(".regex",e))}replace(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>({value:t.replace(s({value:t,context:r}),e)}))}trim(){return this.push(({value:t})=>({value:t.trim()}))}upperCase(){return this.push(({value:t})=>({value:t.toUpperCase()}))}upperCamelCase(){return this.push(({value:t})=>({value:zt(t)}))}}class De{static array(t,e){return new be(e).items(t)}static boolean(t){return new Ie(t)}static date(t){return new Me(t)}static enum(t,e){return new Oe(e).list(t)}static number(t){return new Ce(t)}static object(t,e){return new Te(e).keys(t)}static ref(t,e){return({context:s})=>s&&d(s[t])?s[t]:e}static string(t){return new Re(t)}test(t,...e){return!R(De.validate(t,...e).error)}async testAsync(t,...e){return!R((await De.validateAsync(t,...e)).error)}static validate(t,...e){let s={value:t};for(let t=0;t<e.length;t++)if(s=e[t].validate(s.value),s.error)return{value:s.value,error:s.error};return{value:s.value}}static async validateAsync(t,...e){let s={value:t};for(let t=0;t<e.length;t++)if(s=await e[t].validateAsync(s.value),s.error)return{value:s.value,error:s.error};return{value:s.value}}}export{le as AsyncQueue,It as EventEmitter,tt as Hash,Jt as RandomString,De as Validation,we as ValidationBase,pe as ValidationKeys,re as allowed,U as cache,Nt as camelCase,t as chunkArray,i as clamp,ne as clone,z as colorPalette,e as compareArray,s as countArray,Yt as cutText,ot as dateFormat,mt as dateInterval,yt as dateRange,bt as debounce,$t as decodeHTML,ie as denied,L as each,Lt as encodeHTML,xt as firstDayDate,ue as forEachAsync,P as forEachIndex,$ as forEachKey,he as forEachPage,oe as forEachSeries,q as forLoop,_ as hexToRgb,B as hslToRgb,r as inArray,n as includesArray,v as isArray,g as isBoolean,qt as isCharacter,m as isDate,d as isDef,Ft as isDigit,Ot as isEmpty,Rt as isFalse,S as isFloat,y as isFunction,x as isInteger,Xt as isLetter,E as isMap,Dt as isNotEmpty,w as isNull,f as isNumber,b as isObject,I as isPlainObject,M as isRegExp,C as isScalar,T as isSet,_t as isSpecialChar,R as isString,D as isSymbol,Tt as isTrue,A as isUndefined,dt as isValidDate,ft as lastDayDate,a as lerp,Mt as loop,kt as lowerCamelCase,F as map,Vt as mask,ee as maskMoney,te as maskReverse,se as maskTest,ae as merge,wt as msToString,At as noop,gt as parseMs,Kt as parseSize,l as random,Ht as randomCase,u as randomElement,h as rangeArray,H as rgbToHex,V as rgbToHsl,Q as shadeColor,o as shuffleArray,Qt as shuffleString,ce as sleep,Zt as stringReverse,J as tintColor,j as toArray,Y as toBool,p as type,k as uniqueArray,et as uniqueID,zt as upperCamelCase,st as uuidv1,rt as uuidv1ToTimestamp,nt as uuidv4,it as uuidv7,at as uuidv7ToTimestamp,lt as uuidv8};
package/dist/index.min.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /*!
2
- * @andrewcaires/utils.js v0.4.14
2
+ * @andrewcaires/utils.js v0.4.15
3
3
  * JavaScript utility library for web and nodejs development
4
4
  * (c) 2025 Andrew Caires
5
5
  * @license: MIT
6
6
  */
7
- var UtilsJS=function(t){"use strict";const e=(t,e,s)=>Math.max(e,Math.min(s,t)),s=(t,e)=>Math.floor(Math.random()*(e-t+1)+t),r=t=>{for(let e=t.length-1;e>0;e--){const r=s(0,e);[t[e],t[r]]=[t[r],t[e]]}return t},n={},i=t=>null==t?"null":n[n.toString.call(t)]||"object";["Array","AsyncFunction","Boolean","Date","Function","Map","Number","Object","RegExp","Set","String"].forEach(t=>n["[object "+t+"]"]=t.toLowerCase());const a=t=>"array"==i(t),l=t=>"boolean"==i(t),u=t=>"null"!=i(t),o=t=>"number"==i(t),h=t=>o(t)&&!!(t%1),c=t=>"function"==typeof t,p=t=>o(t)&&!(t%1),v=t=>"object"==i(t),m=t=>v(t)&&t.constructor===Object,d=["boolean","number","string"],g=t=>"string"==typeof t,f=t=>void 0===t,y=[1,"1",!0,"true"],S=t=>-1!=y.indexOf(t),E=(t,e,s)=>{for(let r=0;r<t.length&&!1!==e.call(s,t[r],r,t);r++);return t},x=(t,e,s)=>{let r="";const n=Object.keys(t);for(let i=0;i<n.length&&(r=n[i],!1!==e.call(s,t[r],r,t));i++);return t},w=(t,e,s)=>Object.fromEntries(Object.entries(t).map(([r,n])=>[r,e.call(s,n,r,t)])),b=t=>parseInt(t??"0",16)||0,T=t=>t.replace(/^#/,"").match(/.{1,2}/g)?.map(b)||[],I=t=>("0"+t.toString(16)).slice(-2),C=(t,e,s)=>"#"+I(t)+I(e)+I(s),M=(t,s)=>{const r=T(t);s=e(s,0,1);const[n,i,a]=r.map(t=>Math.round(t*s));return C(n,i,a)},D=(t,s)=>{const r=T(t);s=e(s,0,1);const[n,i,a]=r.map(t=>Math.round(t+(255-t)*s));return C(n,i,a)},O={50:.95,100:.9,200:.75,300:.6,400:.3,500:0,600:-.1,700:-.25,800:-.4,900:-.55,950:-.71},R=(t,e,s,r,n)=>0===t?0:e===s?(r-n)/t%6:e===r?(n-s)/t+2:e===n?(s-r)/t+4:0,A=(t,e)=>0===t?0:t/(1-Math.abs(2*e-1));class k{constructor(t){this.key=this.shuffle(k.dictionary,t,!1)}encrypt(t){return this.shuffle(t,this.key,!1)}decrypt(t){return this.shuffle(t,this.key,!0)}index(t,e,s){return[k.dictionary.indexOf(t[s]),k.dictionary.indexOf(e[s%e.length])]}result(t,e,s){return k.dictionary[(s?t-e+k.dictionary.length:t+e)%k.dictionary.length]}shuffle(t,e,s){let r="";for(let n=0;n<t.length;n++){const[i,a]=this.index(t,e,n);r+=-1===i||-1===a?t[n]:this.result(i,a,s)}return r}static hex(t){let e=0;for(let s=0;s<t.length;s++)e=16777619*(e^t.charCodeAt(s));return(e>>>0).toString(16).padStart(8,"0")}}k.dictionary="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";const j=(t=64)=>Array(Math.ceil(t/2)).fill(0).map(()=>s(0,255).toString(16).padStart(2,"0")).join("").slice(0,t),N=t=>("0"+t.toString()).slice(-2),U={"%y":(t,e)=>N(e?t.getUTCFullYear():t.getFullYear()),"%Y":(t,e)=>(e?t.getUTCFullYear():t.getFullYear()).toString(),"%m":(t,e)=>N((e?t.getUTCMonth():t.getMonth())+1),"%d":(t,e)=>N(e?t.getUTCDate():t.getDate()),"%H":(t,e)=>N(e?t.getUTCHours():t.getHours()),"%M":(t,e)=>N(e?t.getUTCMinutes():t.getMinutes()),"%S":(t,e)=>N(e?t.getUTCSeconds():t.getSeconds())},Y=(t,e,s)=>(e=e??new Date,t.replace(/%[yYmdHMS]/g,t=>U[t]?U[t](e,s):t.slice(1))),L=36e5,P=24*L,$={ms:1,s:1e3,m:6e4,h:L,d:P,w:7*P,y:315576e5},F=t=>{const e=/(-?(?:\d+)?\.?\d+) *(ms|s|m|h|d|w|y)/gm;let s,r=0;for(;null!==(s=e.exec(t));)s.index===e.lastIndex&&e.lastIndex++,r+=parseFloat(s[1])*$[s[2]]||0;return r},q=t=>{const e=new Date(t);return e.getTime()==e.getTime()&&t==e.toISOString().slice(0,10)},H=t=>new Date(t.getFullYear(),t.getMonth()+1,0,t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()),X=(t,e)=>/^([\d]{4})-([\d]{2})-([\d]{2})$/.test(t)?q(t)?new Date(`${t} ${e}`):null:/^([\d]{4})-([\d]{2})$/.test(t)&&q(t=`${t}-01`)?new Date(`${t} ${e}`):null,K=["y","d","h","m","s","ms"];const _=t=>0==(t?.length??0),Q=["",0,"0",null,!1,void 0],J=t=>-1==Q.indexOf(t),B=()=>{},V=(t,e,s)=>e(t.toLowerCase().replace(/\W+/g," ")).replace(/\s/g,s??""),z=(t,e)=>V(t,t=>t.replace(/\s(\w)/g,t=>t.toUpperCase()),e),Z=z,W=/&(amp|apos|lt|gt|nbsp|quot);/g,G={amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",quot:'"'},tt=t=>/^[\d]$/.test(t),et=t=>/^[A-Za-z]$/.test(t),st=t=>/^[^\w]$/.test(t),rt=t=>r(t.split("")).join("");class nt{constructor(){this.hasSpace=!1,this._space=" ",this.hasNumbers=!1,this._numbers="0123456789",this.hasSymbols=!1,this._symbols="!@#$%^&*()<>.<~:;?+=-_",this.hasUpper=!1,this._upper="ABCDEFGHIJKLMNOPQRSTUVWXYZ",this.hasLower=!1,this._lower="abcdefghijklmnopqrstuvwxyz",this.hasChars=!1,this._chars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"}chars(){return this.hasChars=!0,this}static chars(){return(new nt).chars()}lower(){return this.hasLower=!0,this}static lower(){return(new nt).lower()}make(t){let 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=rt(e);for(let n=0;n<t;n++)r+=e.charAt(s(0,e.length-1))}return r}numbers(){return this.hasNumbers=!0,this}static numbers(){return(new nt).numbers()}space(){return this.hasSpace=!0,this}static space(){return(new nt).space()}symbols(){return this.hasSymbols=!0,this}static symbols(){return(new nt).symbols()}upper(){return this.hasUpper=!0,this}static upper(){return(new nt).upper()}}const it=t=>t.split("").reverse().join(""),at=(t,e)=>V(t,t=>t.replace(/(\w)(\w*)/g,(t,e,s)=>e.toUpperCase()+s),e),lt=(t,e)=>e(t.value)?t.value:(t=>(t.maskIndex--,""))(t),ut={"#":t=>t.value,0:t=>lt(t,tt),9:t=>lt(t,tt),A:t=>lt(t,et),Z:t=>lt(t,et),L:t=>lt(t,et).toLowerCase(),U:t=>lt(t,et).toUpperCase(),S:t=>lt(t,st)},ot=t=>{t.maskIndex++,t.textIndex++;const{mask:e,maskIndex:s,text:r,textIndex:n}=t;t.key=e[s],t.value=r[n];const{key:i,value:a}=t;return f(i)||f(a)?"":(t=>ut[t.key]?ut[t.key](t):(t.key!=t.value&&t.textIndex--,t.key))(t)+ot(t)},ht=(t,e)=>ot({mask:t,maskIndex:-1,text:e,textIndex:-1,key:"",value:""}),ct=(t,e)=>it(ht(it(t),it(e))),pt=(t,e)=>t.reduce((t,s)=>({...t,[s]:e[s]}),{}),vt=t=>t instanceof Date?new Date(t.getTime()):a(t)?t.map(t=>vt(t)):v(t)?w(t,t=>vt(t)):t,mt=(t,...e)=>{if(!e.length)return t;const s=e.shift();if(m(t)&&m(s))for(const e in s)m(s[e])?(t[e]||(t={...t,[e]:{}}),t[e]=mt(t[e],s[e])):t={...t,[e]:s[e]};return mt(t,...e)};class dt{}var gt,ft,yt,St,Et,xt,wt,bt,Tt;dt.DESCRIPTION=Symbol("DESCRIPTION"),dt.ERROR=Symbol("ERROR"),dt.EXAMPLE=Symbol("EXAMPLE"),dt.INDEXES=Symbol("INDEXES"),dt.KEYS=Symbol("KEYS"),dt.LIST=Symbol("LIST"),dt.NAME=Symbol("NAME"),dt.REQUIRED=Symbol("REQUIRED"),dt.SOURCE=Symbol("SOURCE"),dt.TYPE=Symbol("TYPE");class It{constructor(t){this[gt]="",this[ft]="",this[yt]=null,this[St]="",this[Et]="any",this[xt]=!1,this.rules=[],this.custom=[],this[dt.TYPE]=t}description(t){return this[dt.DESCRIPTION]=t,this}example(t){return this[dt.EXAMPLE]=t,this}empty(t){const e=t;return this.unshift(({value:t})=>{const s=u(t);return{break:!u(e)&&!s,value:s?t:c(e)?e():e}})}equal(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t==n?{value:t}:this.invalid(`.equal(${n})`,e)})}error(t){return g(t)&&(this[dt.ERROR]=t),this}filter(...t){const e=t;return this.unshift(({value:t})=>{const s=-1==e.indexOf(t);return{break:!s,value:s?t:void 0}})}fn(t){return c(t)?t:()=>t}from(t){return this[dt.SOURCE]=t,this}invalid(t,e){return t=`[${this[dt.TYPE]}]${t}`,{error:this[dt.ERROR]?this[dt.ERROR]:this[dt.NAME]?this[dt.NAME]+":"+t:t,message:e}}model(){return this.toString()}parse(){return this.unshift(({value:t})=>({value:t}))}push(t){return this.rules.push(t),this}required(t){return this[dt.REQUIRED]=!0,this.unshift(({value:e})=>u(e)?{value:e}:this.invalid(".required",t))}test(t){return!g(this.validate(t).error)}async testAsync(t){return!g((await this.validateAsync(t)).error)}toString(){return this[dt.TYPE]}unshift(t){return this.rules.unshift(t),this}validate(t,e){if(this.custom.length)return this.invalid("[async]");let s={value:t};for(let t=0;t<this.rules.length;t++){if(s=this.rules[t]({value:s.value,context:e}),s.error?.length)return{error:s.error,...s.message?{message:s.message}:{}};if(s.break)return{value:s.value}}return{value:s.value}}async validateAsync(t,e){let s=this.validate(t,e);if(s.error)return{error:s.error};for(let t=0;t<this.custom.length;t++){if(s=await this.custom[t]({value:s.value}),s.error)return{error:s.error};if(s.break)return{value:s.value}}return{value:s.value}}}gt=dt.NAME,ft=dt.DESCRIPTION,yt=dt.EXAMPLE,dt.SOURCE,St=dt.ERROR,Et=dt.TYPE,xt=dt.REQUIRED;class Ct extends It{constructor(t){super("array"),this[wt]=[],this.push(({value:e})=>a(e)?{value:e}:this.invalid("",t))}between(t,e,s){return this.min(t,s),this.max(e,s)}items(t,e){const s=t;return s&&this[dt.INDEXES].push(s),s?this.push(({value:t})=>{const r=[];s[dt.NAME]="";for(let n=0;n<t.length;n++){const{error:i,value:a}=s.validate(t[n],t);if(i)return this.invalid("< "+i+"["+n+"] >",e);r[n]=a}return{value:r}}):this}length(t,e){const s=t;return this.push(({value:t})=>t.length==s?{value:t}:this.invalid(".length("+s+")",e))}max(t,e){const s=t;return this.push(({value:t})=>t.length<=s?{value:t}:this.invalid(".max("+s+")",e))}min(t,e){const s=t;return this.push(({value:t})=>t.length>=s?{value:t}:this.invalid(".min("+s+")",e))}model(){return this[dt.INDEXES].length?this[dt.INDEXES].map(t=>t.model()):this[dt.TYPE]}toString(){return this[dt.INDEXES].length?JSON.stringify(this.model(),null,4):this[dt.TYPE]}}wt=dt.INDEXES;class Mt extends It{constructor(t){super("boolean"),this.push(({value:e})=>l(e)?{value:e}:this.invalid("",t))}parse(){return this.unshift(({value:t})=>({value:u(t)?S(t):t}))}}class Dt extends It{constructor(t){super("date"),this.push(({value:e})=>g(e)&&q(e)||!isNaN(new Date(e).getTime())?{value:e}:this.invalid("",t))}format(t){const e=t;return this.push(({value:t})=>({value:Y(e,new Date(t))}))}parse(){return this.unshift(({value:t})=>({value:new Date(t)}))}}class Ot extends It{constructor(t){super("enum"),this[bt]=[],this.push(({value:e})=>u(e)?{value:e}:this.invalid(`('${this[dt.LIST].join("', '")}')`,t))}list(t,e){const s=t;return s&&this[dt.LIST].push(...s),s?this.push(({value:t})=>-1!=this[dt.LIST].indexOf(t)?{value:t}:this.invalid(`('${this[dt.LIST].join("', '")}')`,e)):this}toString(){return`${this[dt.TYPE]}('${this[dt.LIST].join("', '")}')`}}bt=dt.LIST;class Rt extends It{constructor(t){super("number"),this.push(({value:e})=>o(e)?{value:e}:this.invalid("",t))}between(t,e,s){return this.min(t,s),this.max(e,s)}float(t){return this.push(({value:e})=>h(e)?{value:e}:this.invalid(".float",t))}integer(t){return this.push(({value:e})=>p(e)?{value:e}:this.invalid(".integer",t))}max(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t<=n?{value:t}:this.invalid(`.max(${n})`,e)})}min(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t>=n?{value:t}:this.invalid(`.min(${n})`,e)})}parse(){return this.unshift(({value:t})=>({value:u(t)?parseFloat(t.toString()):t}))}}class At extends It{constructor(t){super("object"),this[Tt]={},this.push(({value:e})=>v(e)?{value:e}:this.invalid("",t))}keys(t,e){const s=t;return s&&(this[dt.KEYS]={...this[dt.KEYS],...s}),s?this.push(({value:t})=>{const r=[],n={};return Object.keys(s).forEach(i=>{const a=s[i];a[dt.NAME]=a[dt.SOURCE]??i;const{error:l,message:o,value:h}=a.validate(t[a[dt.NAME]],n);!e&&o&&(e=o),l&&r.push(l),u(h)&&(n[i]=h)}),r.length?this.invalid("{ "+r.join(", ")+" }",e):{value:n}}):this}model(){const t={},e=Object.keys(this[dt.KEYS]);return e.length&&e.forEach(e=>t[e]=this[dt.KEYS][e].model()),e.length?t:this[dt.TYPE]}parse(t){return this.unshift(({value:e})=>{if(!v(e))try{e=JSON.parse(e)}catch(e){return this.invalid("",t)}return{value:e}})}toString(){return Object.keys(this[dt.KEYS]).length?JSON.stringify(this.model(),null,4):this[dt.TYPE]}}Tt=dt.KEYS;class kt extends It{constructor(t){super("string"),this.push(({value:e})=>g(e)?{value:e}:this.invalid("",t))}between(t,e,s){return this.min(t,s),this.max(e,s)}email(t){const e=/^[\w-\\.]+@([\w-]+\.)+[\w-]{2,4}$/i;return this.push(({value:s})=>e.test(s)?{value:s}:this.invalid(".email",t))}length(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t.length==n?{value:t}:this.invalid(`.length(${n})`,e)})}lowerCase(){return this.push(({value:t})=>({value:t.toLowerCase()}))}lowerCamelCase(){return this.push(({value:t})=>({value:z(t)}))}max(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t.length<=n?{value:t}:this.invalid(`.max(${n})`,e)})}mask(t){const e=this.fn(t);return this.push(({value:t,context:s})=>({value:ht(e({value:t,context:s}),t)}))}min(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t.length>=n?{value:t}:this.invalid(`.min(${n})`,e)})}parse(){return this.unshift(({value:t})=>({value:v(t)?JSON.stringify(t):u(t)?t.toString():t}))}required(t){return this[dt.REQUIRED]=!0,this.push(({value:e})=>e.length?{value:e}:this.invalid(".required",t))}regex(t,e){return this.push(({value:s})=>t.test(s)?{value:s}:this.invalid(".regex",e))}replace(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>({value:t.replace(s({value:t,context:r}),e)}))}trim(){return this.push(({value:t})=>({value:t.trim()}))}upperCase(){return this.push(({value:t})=>({value:t.toUpperCase()}))}upperCamelCase(){return this.push(({value:t})=>({value:at(t)}))}}class jt{static array(t,e){return new Ct(e).items(t)}static boolean(t){return new Mt(t)}static date(t){return new Dt(t)}static enum(t,e){return new Ot(e).list(t)}static number(t){return new Rt(t)}static object(t,e){return new At(e).keys(t)}static ref(t,e){return({context:s})=>s&&u(s[t])?s[t]:e}static string(t){return new kt(t)}test(t,...e){return!g(jt.validate(t,...e).error)}async testAsync(t,...e){return!g((await jt.validateAsync(t,...e)).error)}static validate(t,...e){let s={value:t};for(let t=0;t<e.length;t++)if(s=e[t].validate(s.value),s.error)return{value:s.value,error:s.error};return{value:s.value}}static async validateAsync(t,...e){let s={value:t};for(let t=0;t<e.length;t++)if(s=await e[t].validateAsync(s.value),s.error)return{value:s.value,error:s.error};return{value:s.value}}}return t.AsyncQueue=class{constructor(){this.running=!1,this.queue=[]}push(t){return new Promise((e,s)=>{this.queue.push(async()=>{try{const s=await t();e(s)}catch(t){s(t)}}),this.run()})}async run(){if(!this.running){for(this.running=!0;this.queue.length>0;){const t=this.queue.shift();t&&await t()}this.running=!1}}},t.EventEmitter=class{constructor(){this.events=new Map}on(t,e){const s=this.events.get(t);return s?s.push(e):this.events.set(t,[e]),{dispose:()=>this.off(t,e)}}once(t,e){const s=r=>{e(r),this.off(t,s)};return this.on(t,s),{dispose:()=>this.off(t,s)}}off(t,e){const s=this.events.get(t);if(e){if(s){const t=s.indexOf(e);t>=0&&s.splice(t,1)}}else this.events.set(t,[])}emit(t,e){const s=this.events.get(t);s&&s.forEach(t=>t(e))}},t.Hash=k,t.RandomString=nt,t.Validation=jt,t.ValidationBase=It,t.ValidationKeys=dt,t.allowed=pt,t.cache=()=>{const t=[],e=[];return s=>{let r=t.indexOf(s);return-1==r&&(t.push(s),e.push({}),r=e.length-1),e[r]}},t.camelCase=Z,t.chunkArray=(t,e)=>{const s=[];for(let r=0;r<t.length;r+=e)s.push(t.slice(r,r+e));return s},t.clamp=e,t.clone=vt,t.colorPalette=(t,e)=>w(e??O,e=>0==e?t:e>0?D(t,e):M(t,1- -1*e)),t.compareArray=(t,e)=>t.length===e.length&&t.every((t,s)=>t===e[s]),t.countArray=t=>{const e={};return t.forEach(t=>{const s=t.toString();e[s]=(e[s]||0)+1}),e},t.cutText=(t,e)=>{if(t.length>e){const s=t.substring(0,e).split(" ");return s.pop(),s.join(" ")+"..."}return t},t.dateFormat=Y,t.dateInterval=(t,e,s)=>{const r=new Date(t);s=s??F("1d");const n=[];for(;r<e;)r.setTime(r.getTime()+s),n.push(new Date(r));return n},t.dateRange=(t,e)=>{const s=t??Y("%Y-%m"),r=X(s,"00:00:00");if(!r||!q(r.toISOString().slice(0,10)))return[null,null];const n=e||s;let i=X(n,"23:59:59");return i&&q(i.toISOString().slice(0,10))?(7==n.length&&(i=H(i)),r>i?[null,null]:[r,i]):[r,null]},t.debounce=(t,e)=>{let s;const r=()=>{s&&clearTimeout(s)};return{cancel:r,run(...n){r(),s=setTimeout(()=>t(...n),e)}}},t.decodeHTML=t=>t.replace(W,(t,e)=>G[e]).replace(/&#(\d+);/gi,(t,e)=>String.fromCharCode(parseInt(e,10))),t.denied=(t,e)=>pt(Object.keys(e).filter(e=>-1==t.indexOf(e)),e),t.each=(t,e,s)=>a(t)?E(t,e,s):v(t)?x(t,e,s):t,t.encodeHTML=t=>t.replace(/[^0-9A-Za-z ]/g,t=>"&#"+t.charCodeAt(0)+";"),t.firstDayDate=t=>new Date(t.getFullYear(),t.getMonth(),1,t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()),t.forEachAsync=async(t,e,s)=>{await Promise.allSettled(t.map((r,n)=>e.call(s,r,n,t)?.catch(B))).catch(B)},t.forEachIndex=E,t.forEachKey=x,t.forEachPage=async t=>{let e=!0;const s=()=>e=!0;let r=1;for(;e;)e=!1,await(t(r,s)?.catch(B)),r+=1},t.forEachSeries=async(t,e,s)=>{for(let r=0;r<t.length;r++)await(e.call(s,t[r],r,t)?.catch(B))},t.forLoop=(t,e,s)=>{for(let r=1;r<=t&&!1!==e.call(s,r,t);r++);return t},t.hexToRgb=T,t.hslToRgb=(t,e,s)=>{t/=60;const r=(1-Math.abs(2*s-1))*e,n=r*(1-Math.abs(t%2-1));let i=[0,0,0];t<=1?i=[r,n,0]:t<=2?i=[n,r,0]:t<=3?i=[0,r,n]:t<=4?i=[0,n,r]:t<=5?i=[n,0,r]:t<=6&&(i=[r,0,n]);const a=s-.5*r;return[Math.round(255*(i[0]+a)),Math.round(255*(i[1]+a)),Math.round(255*(i[2]+a))]},t.inArray=(t,e)=>-1!=e.indexOf(t),t.includesArray=(t,e)=>t.every(t=>e.includes(t)),t.isArray=a,t.isBoolean=l,t.isCharacter=t=>/^[\w]$/.test(t),t.isDate=t=>"date"==i(t),t.isDef=u,t.isDigit=tt,t.isEmpty=_,t.isFalse=t=>!J(t),t.isFloat=h,t.isFunction=c,t.isInteger=p,t.isLetter=et,t.isMap=t=>"map"==i(t),t.isNotEmpty=t=>!_(t),t.isNull=t=>null===t,t.isNumber=o,t.isObject=v,t.isPlainObject=m,t.isRegExp=t=>"regexp"==i(t),t.isScalar=t=>-1!=d.indexOf(i(t)),t.isSet=t=>"set"==i(t),t.isSpecialChar=st,t.isString=g,t.isSymbol=t=>"symbol"==typeof t,t.isTrue=J,t.isUndefined=f,t.isValidDate=q,t.lastDayDate=H,t.lerp=(t,s,r)=>t+(s-t)*e(r,0,1),t.loop=(t,e)=>{let s=!1;const r=async()=>{s&&(await t(),setTimeout(r,e))};return{start(){s||(s=!0,r())},stop(){s=!1}}},t.lowerCamelCase=z,t.map=w,t.mask=ht,t.maskMoney=(t,e,s)=>(s++,e=parseInt((e||"0").replace(/\D/g,"")).toString(),ct(t,e.length<s?("0".repeat(s)+e).slice(-1*s):e)),t.maskReverse=ct,t.maskTest=(t,e)=>t.length==ht(t,e).length,t.merge=mt,t.msToString=t=>{const e=[];return K.forEach(s=>{const r=$[s],n=(t-t%r)/r;n&&(t-=n*r,e.push(n.toString()+s))}),e.join(" ")},t.noop=B,t.parseMs=F,t.parseSize=t=>{if(o(t))return t+"px";const e=(t=>/(-?(?:\d+)?\.?\d+) *(px|%|cm|mm|in|pt|pc|en|ex|ch|rem|vw|vh|vmin|vmax)*/g.exec(t))(t);return e?parseFloat(e[1])+(e[2]||"px"):"0px"},t.random=s,t.randomCase=t=>t.split("").map(t=>Math.random()<.5?t.toUpperCase():t.toLowerCase()).join(""),t.randomElement=t=>t.length?t[s(0,t.length-1)]:null,t.rangeArray=(t,e,s=1)=>Array.from({length:(e-t)/s+1},(e,r)=>t+r*s),t.rgbToHex=C,t.rgbToHsl=(t,e,s)=>{const[r,n,i]=((...t)=>t.map(t=>t/255))(t,e,s),a=Math.max(r,n,i),l=Math.min(r,n,i),u=a-l,o=(l+a)/2;return[60*R(u,a,r,n,i),A(u,o),o]},t.shadeColor=M,t.shuffleArray=r,t.shuffleString=rt,t.sleep=t=>new Promise(e=>setTimeout(e,t)),t.stringReverse=it,t.tintColor=D,t.toArray=t=>a(t)?t:u(t)?[t]:[],t.toBool=S,t.type=i,t.uniqueArray=t=>t.filter((t,e,s)=>s.indexOf(t)===e),t.uniqueID=j,t.upperCamelCase=at,t.uuidv1=()=>{const t=1e4*(Date.now()+122192928e5),e=(4294967295&t)>>>0,r=(t/4294967296&65535)>>>0,n=(t/281474976710656&4095)>>>0,i=s(0,e),a=(t,e)=>t.toString(16).padStart(e,"0");return[a(e,8),a(r,4),a(4096|n,4),a(i>>8&63|128,2)+a(255&i,2),j(12)].join("-")},t.uuidv1ToTimestamp=t=>{const e=t.replace(/-/g,""),s=parseInt(e.slice(0,8),16),r=parseInt(e.slice(8,12),16),n=(4095&parseInt(e.slice(12,16),16))*Math.pow(2,48)+r*Math.pow(2,32)+s;return Math.floor((n-122192928e9)/1e4)},t.uuidv4=()=>{const t=[];t.push(...Array(16).fill(0).map(()=>s(0,255))),t[6]=15&t[6]|64;const e=t.map(t=>t.toString(16).padStart(2,"0")).join("");return[e.slice(0,8),e.slice(8,12),e.slice(12,16),e.slice(16,20),e.slice(20)].join("-")},t.uuidv7=()=>{const t=Date.now(),e=[];e[0]=t/2**40&255,e[1]=t/2**32&255,e[2]=t>>>24&255,e[3]=t>>>16&255,e[4]=t>>>8&255,e[5]=255&t,e.push(...Array(10).fill(0).map(()=>s(0,255))),e[6]=15&e[6]|112,e[8]=63&e[8]|128;const r=e.map(t=>t.toString(16).padStart(2,"0")).join("");return[r.slice(0,8),r.slice(8,12),r.slice(12,16),r.slice(16,20),r.slice(20)].join("-")},t.uuidv7ToTimestamp=t=>parseInt(t.replace(/-/g,"").slice(0,12),16),t.uuidv8=t=>{const e=Date.now(),r=[];r[0]=e/2**40&255,r[1]=e/2**32&255,r[2]=e>>>24&255,r[3]=e>>>16&255,r[4]=e>>>8&255,r[5]=255&e,r.push(...Array(8).fill(0).map(()=>s(0,255))),r[6]=15&r[6]|128,r[8]=63&r[8]|128;const n=r.map(t=>t.toString(16).padStart(2,"0")).join("");return[n.slice(0,8),n.slice(8,12),n.slice(12,16),k.hex(t??"").slice(4),n.slice(16)].join("-")},t}({});
7
+ var UtilsJS=function(t){"use strict";const e=(t,e,s)=>Math.max(e,Math.min(s,t)),s=(t,e)=>Math.floor(Math.random()*(e-t+1)+t),r=t=>{for(let e=t.length-1;e>0;e--){const r=s(0,e);[t[e],t[r]]=[t[r],t[e]]}return t},n={},i=t=>null==t?"null":n[n.toString.call(t)]||"object";["Array","AsyncFunction","Boolean","Date","Function","Map","Number","Object","RegExp","Set","String"].forEach(t=>n["[object "+t+"]"]=t.toLowerCase());const a=t=>"array"==i(t),l=t=>"boolean"==i(t),u=t=>"null"!=i(t),o=t=>"number"==i(t),h=t=>o(t)&&!!(t%1),c=t=>"function"==typeof t,p=t=>o(t)&&!(t%1),v=t=>"object"==i(t),m=t=>v(t)&&t.constructor===Object,d=["boolean","number","string"],g=t=>"string"==typeof t,f=t=>void 0===t,y=[1,"1",!0,"true"],S=t=>-1!=y.indexOf(t),E=(t,e,s)=>{for(let r=0;r<t.length&&!1!==e.call(s,t[r],r,t);r++);return t},x=(t,e,s)=>{let r="";const n=Object.keys(t);for(let i=0;i<n.length&&(r=n[i],!1!==e.call(s,t[r],r,t));i++);return t},w=(t,e,s)=>Object.fromEntries(Object.entries(t).map(([r,n])=>[r,e.call(s,n,r,t)])),b=t=>parseInt(t??"0",16)||0,T=t=>t.replace(/^#/,"").match(/.{1,2}/g)?.map(b)||[],I=t=>("0"+t.toString(16)).slice(-2),C=(t,e,s)=>"#"+I(t)+I(e)+I(s),M=(t,s)=>{const r=T(t);s=e(s,0,1);const[n,i,a]=r.map(t=>Math.round(t*s));return C(n,i,a)},D=(t,s)=>{const r=T(t);s=e(s,0,1);const[n,i,a]=r.map(t=>Math.round(t+(255-t)*s));return C(n,i,a)},O={50:.95,100:.9,200:.75,300:.6,400:.3,500:0,600:-.1,700:-.25,800:-.4,900:-.55,950:-.71},R=(t,e,s,r,n)=>0===t?0:e===s?(r-n)/t%6:e===r?(n-s)/t+2:e===n?(s-r)/t+4:0,A=(t,e)=>0===t?0:t/(1-Math.abs(2*e-1));class k{constructor(t){this.key=this.shuffle(k.dictionary,t,!1)}encrypt(t){return this.shuffle(t,this.key,!1)}decrypt(t){return this.shuffle(t,this.key,!0)}index(t,e,s){return[k.dictionary.indexOf(t[s]),k.dictionary.indexOf(e[s%e.length])]}result(t,e,s){return k.dictionary[(s?t-e+k.dictionary.length:t+e)%k.dictionary.length]}shuffle(t,e,s){let r="";for(let n=0;n<t.length;n++){const[i,a]=this.index(t,e,n);r+=-1===i||-1===a?t[n]:this.result(i,a,s)}return r}static hex(t){let e=0;for(let s=0;s<t.length;s++)e=16777619*(e^t.charCodeAt(s));return(e>>>0).toString(16).padStart(8,"0")}}k.dictionary="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";const j=(t=64)=>Array(Math.ceil(t/2)).fill(0).map(()=>s(0,255).toString(16).padStart(2,"0")).join("").slice(0,t),N=t=>("0"+t.toString()).slice(-2),U={"%y":(t,e)=>N(e?t.getUTCFullYear():t.getFullYear()),"%Y":(t,e)=>(e?t.getUTCFullYear():t.getFullYear()).toString(),"%m":(t,e)=>N((e?t.getUTCMonth():t.getMonth())+1),"%d":(t,e)=>N(e?t.getUTCDate():t.getDate()),"%H":(t,e)=>N(e?t.getUTCHours():t.getHours()),"%M":(t,e)=>N(e?t.getUTCMinutes():t.getMinutes()),"%S":(t,e)=>N(e?t.getUTCSeconds():t.getSeconds())},Y=(t,e,s)=>(e=e??new Date,t.replace(/%[yYmdHMS]/g,t=>U[t]?U[t](e,s):t.slice(1))),L=36e5,P=24*L,$={ms:1,s:1e3,m:6e4,h:L,d:P,w:7*P,y:315576e5},F=t=>{const e=/(-?(?:\d+)?\.?\d+)\s*(ms|s|m|h|d|w|y)/gm;let s,r=0;for(;null!==(s=e.exec(t));)s.index===e.lastIndex&&e.lastIndex++,r+=parseFloat(s[1])*$[s[2]]||0;return r},q=t=>{const e=new Date(t);return e.getTime()==e.getTime()&&t==e.toISOString().slice(0,10)},H=t=>new Date(t.getFullYear(),t.getMonth()+1,0,t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()),X=(t,e)=>/^([\d]{4})-([\d]{2})-([\d]{2})$/.test(t)?q(t)?new Date(`${t} ${e}`):null:/^([\d]{4})-([\d]{2})$/.test(t)&&q(t=`${t}-01`)?new Date(`${t} ${e}`):null,K=["y","d","h","m","s","ms"];const _=t=>0==(t?.length??0),Q=["",0,"0",null,!1,void 0],J=t=>-1==Q.indexOf(t),B=()=>{},V=(t,e,s)=>e(t.toLowerCase().replace(/\W+/g," ")).replace(/\s/g,s??""),z=(t,e)=>V(t,t=>t.replace(/\s(\w)/g,t=>t.toUpperCase()),e),Z=z,W=/&(amp|apos|lt|gt|nbsp|quot);/g,G={amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",quot:'"'},tt=t=>/^[\d]$/.test(t),et=t=>/^[A-Za-z]$/.test(t),st=t=>/^[^\w]$/.test(t),rt=t=>r(t.split("")).join("");class nt{constructor(){this.hasSpace=!1,this._space=" ",this.hasNumbers=!1,this._numbers="0123456789",this.hasSymbols=!1,this._symbols="!@#$%^&*()<>.<~:;?+=-_",this.hasUpper=!1,this._upper="ABCDEFGHIJKLMNOPQRSTUVWXYZ",this.hasLower=!1,this._lower="abcdefghijklmnopqrstuvwxyz",this.hasChars=!1,this._chars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"}chars(){return this.hasChars=!0,this}static chars(){return(new nt).chars()}lower(){return this.hasLower=!0,this}static lower(){return(new nt).lower()}make(t){let 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=rt(e);for(let n=0;n<t;n++)r+=e.charAt(s(0,e.length-1))}return r}numbers(){return this.hasNumbers=!0,this}static numbers(){return(new nt).numbers()}space(){return this.hasSpace=!0,this}static space(){return(new nt).space()}symbols(){return this.hasSymbols=!0,this}static symbols(){return(new nt).symbols()}upper(){return this.hasUpper=!0,this}static upper(){return(new nt).upper()}}const it=t=>t.split("").reverse().join(""),at=(t,e)=>V(t,t=>t.replace(/(\w)(\w*)/g,(t,e,s)=>e.toUpperCase()+s),e),lt=(t,e)=>e(t.value)?t.value:(t=>(t.maskIndex--,""))(t),ut={"#":t=>t.value,0:t=>lt(t,tt),9:t=>lt(t,tt),A:t=>lt(t,et),Z:t=>lt(t,et),L:t=>lt(t,et).toLowerCase(),U:t=>lt(t,et).toUpperCase(),S:t=>lt(t,st)},ot=t=>{t.maskIndex++,t.textIndex++;const{mask:e,maskIndex:s,text:r,textIndex:n}=t;t.key=e[s],t.value=r[n];const{key:i,value:a}=t;return f(i)||f(a)?"":(t=>ut[t.key]?ut[t.key](t):(t.key!=t.value&&t.textIndex--,t.key))(t)+ot(t)},ht=(t,e)=>ot({mask:t,maskIndex:-1,text:e,textIndex:-1,key:"",value:""}),ct=(t,e)=>it(ht(it(t),it(e))),pt=(t,e)=>t.reduce((t,s)=>({...t,[s]:e[s]}),{}),vt=t=>t instanceof Date?new Date(t.getTime()):a(t)?t.map(t=>vt(t)):v(t)?w(t,t=>vt(t)):t,mt=(t,...e)=>{if(!e.length)return t;const s=e.shift();if(m(t)&&m(s))for(const e in s)m(s[e])?(t[e]||(t={...t,[e]:{}}),t[e]=mt(t[e],s[e])):t={...t,[e]:s[e]};return mt(t,...e)};class dt{}var gt,ft,yt,St,Et,xt,wt,bt,Tt;dt.DESCRIPTION=Symbol("DESCRIPTION"),dt.ERROR=Symbol("ERROR"),dt.EXAMPLE=Symbol("EXAMPLE"),dt.INDEXES=Symbol("INDEXES"),dt.KEYS=Symbol("KEYS"),dt.LIST=Symbol("LIST"),dt.NAME=Symbol("NAME"),dt.REQUIRED=Symbol("REQUIRED"),dt.SOURCE=Symbol("SOURCE"),dt.TYPE=Symbol("TYPE");class It{constructor(t){this[gt]="",this[ft]="",this[yt]=null,this[St]="",this[Et]="any",this[xt]=!1,this.rules=[],this.custom=[],this[dt.TYPE]=t}description(t){return this[dt.DESCRIPTION]=t,this}example(t){return this[dt.EXAMPLE]=t,this}empty(t){const e=t;return this.unshift(({value:t})=>{const s=u(t);return{break:!u(e)&&!s,value:s?t:c(e)?e():e}})}equal(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t==n?{value:t}:this.invalid(`.equal(${n})`,e)})}error(t){return g(t)&&(this[dt.ERROR]=t),this}filter(...t){const e=t;return this.unshift(({value:t})=>{const s=-1==e.indexOf(t);return{break:!s,value:s?t:void 0}})}fn(t){return c(t)?t:()=>t}from(t){return this[dt.SOURCE]=t,this}invalid(t,e){return t=`[${this[dt.TYPE]}]${t}`,{error:this[dt.ERROR]?this[dt.ERROR]:this[dt.NAME]?this[dt.NAME]+":"+t:t,message:e}}model(){return this.toString()}parse(){return this.unshift(({value:t})=>({value:t}))}push(t){return this.rules.push(t),this}required(t){return this[dt.REQUIRED]=!0,this.unshift(({value:e})=>u(e)?{value:e}:this.invalid(".required",t))}test(t){return!g(this.validate(t).error)}async testAsync(t){return!g((await this.validateAsync(t)).error)}toString(){return this[dt.TYPE]}unshift(t){return this.rules.unshift(t),this}validate(t,e){if(this.custom.length)return this.invalid("[async]");let s={value:t};for(let t=0;t<this.rules.length;t++){if(s=this.rules[t]({value:s.value,context:e}),s.error?.length)return{error:s.error,...s.message?{message:s.message}:{}};if(s.break)return{value:s.value}}return{value:s.value}}async validateAsync(t,e){let s=this.validate(t,e);if(s.error)return{error:s.error};for(let t=0;t<this.custom.length;t++){if(s=await this.custom[t]({value:s.value}),s.error)return{error:s.error};if(s.break)return{value:s.value}}return{value:s.value}}}gt=dt.NAME,ft=dt.DESCRIPTION,yt=dt.EXAMPLE,dt.SOURCE,St=dt.ERROR,Et=dt.TYPE,xt=dt.REQUIRED;class Ct extends It{constructor(t){super("array"),this[wt]=[],this.push(({value:e})=>a(e)?{value:e}:this.invalid("",t))}between(t,e,s){return this.min(t,s),this.max(e,s)}items(t,e){const s=t;return s&&this[dt.INDEXES].push(s),s?this.push(({value:t})=>{const r=[];s[dt.NAME]="";for(let n=0;n<t.length;n++){const{error:i,value:a}=s.validate(t[n],t);if(i)return this.invalid("< "+i+"["+n+"] >",e);r[n]=a}return{value:r}}):this}length(t,e){const s=t;return this.push(({value:t})=>t.length==s?{value:t}:this.invalid(".length("+s+")",e))}max(t,e){const s=t;return this.push(({value:t})=>t.length<=s?{value:t}:this.invalid(".max("+s+")",e))}min(t,e){const s=t;return this.push(({value:t})=>t.length>=s?{value:t}:this.invalid(".min("+s+")",e))}model(){return this[dt.INDEXES].length?this[dt.INDEXES].map(t=>t.model()):this[dt.TYPE]}toString(){return this[dt.INDEXES].length?JSON.stringify(this.model(),null,4):this[dt.TYPE]}}wt=dt.INDEXES;class Mt extends It{constructor(t){super("boolean"),this.push(({value:e})=>l(e)?{value:e}:this.invalid("",t))}parse(){return this.unshift(({value:t})=>({value:u(t)?S(t):t}))}}class Dt extends It{constructor(t){super("date"),this.push(({value:e})=>g(e)&&q(e)||!isNaN(new Date(e).getTime())?{value:e}:this.invalid("",t))}format(t){const e=t;return this.push(({value:t})=>({value:Y(e,new Date(t))}))}parse(){return this.unshift(({value:t})=>({value:new Date(t)}))}}class Ot extends It{constructor(t){super("enum"),this[bt]=[],this.push(({value:e})=>u(e)?{value:e}:this.invalid(`('${this[dt.LIST].join("', '")}')`,t))}list(t,e){const s=t;return s&&this[dt.LIST].push(...s),s?this.push(({value:t})=>-1!=this[dt.LIST].indexOf(t)?{value:t}:this.invalid(`('${this[dt.LIST].join("', '")}')`,e)):this}toString(){return`${this[dt.TYPE]}('${this[dt.LIST].join("', '")}')`}}bt=dt.LIST;class Rt extends It{constructor(t){super("number"),this.push(({value:e})=>o(e)?{value:e}:this.invalid("",t))}between(t,e,s){return this.min(t,s),this.max(e,s)}float(t){return this.push(({value:e})=>h(e)?{value:e}:this.invalid(".float",t))}integer(t){return this.push(({value:e})=>p(e)?{value:e}:this.invalid(".integer",t))}max(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t<=n?{value:t}:this.invalid(`.max(${n})`,e)})}min(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t>=n?{value:t}:this.invalid(`.min(${n})`,e)})}parse(){return this.unshift(({value:t})=>({value:u(t)?parseFloat(t.toString()):t}))}}class At extends It{constructor(t){super("object"),this[Tt]={},this.push(({value:e})=>v(e)?{value:e}:this.invalid("",t))}keys(t,e){const s=t;return s&&(this[dt.KEYS]={...this[dt.KEYS],...s}),s?this.push(({value:t})=>{const r=[],n={};return Object.keys(s).forEach(i=>{const a=s[i];a[dt.NAME]=a[dt.SOURCE]??i;const{error:l,message:o,value:h}=a.validate(t[a[dt.NAME]],n);!e&&o&&(e=o),l&&r.push(l),u(h)&&(n[i]=h)}),r.length?this.invalid("{ "+r.join(", ")+" }",e):{value:n}}):this}model(){const t={},e=Object.keys(this[dt.KEYS]);return e.length&&e.forEach(e=>t[e]=this[dt.KEYS][e].model()),e.length?t:this[dt.TYPE]}parse(t){return this.unshift(({value:e})=>{if(!v(e))try{e=JSON.parse(e)}catch(e){return this.invalid("",t)}return{value:e}})}toString(){return Object.keys(this[dt.KEYS]).length?JSON.stringify(this.model(),null,4):this[dt.TYPE]}}Tt=dt.KEYS;class kt extends It{constructor(t){super("string"),this.push(({value:e})=>g(e)?{value:e}:this.invalid("",t))}between(t,e,s){return this.min(t,s),this.max(e,s)}email(t){const e=/^[\w-\\.]+@([\w-]+\.)+[\w-]{2,4}$/i;return this.push(({value:s})=>e.test(s)?{value:s}:this.invalid(".email",t))}length(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t.length==n?{value:t}:this.invalid(`.length(${n})`,e)})}lowerCase(){return this.push(({value:t})=>({value:t.toLowerCase()}))}lowerCamelCase(){return this.push(({value:t})=>({value:z(t)}))}max(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t.length<=n?{value:t}:this.invalid(`.max(${n})`,e)})}mask(t){const e=this.fn(t);return this.push(({value:t,context:s})=>({value:ht(e({value:t,context:s}),t)}))}min(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t.length>=n?{value:t}:this.invalid(`.min(${n})`,e)})}parse(){return this.unshift(({value:t})=>({value:v(t)?JSON.stringify(t):u(t)?t.toString():t}))}required(t){return this[dt.REQUIRED]=!0,this.push(({value:e})=>e.length?{value:e}:this.invalid(".required",t))}regex(t,e){return this.push(({value:s})=>t.test(s)?{value:s}:this.invalid(".regex",e))}replace(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>({value:t.replace(s({value:t,context:r}),e)}))}trim(){return this.push(({value:t})=>({value:t.trim()}))}upperCase(){return this.push(({value:t})=>({value:t.toUpperCase()}))}upperCamelCase(){return this.push(({value:t})=>({value:at(t)}))}}class jt{static array(t,e){return new Ct(e).items(t)}static boolean(t){return new Mt(t)}static date(t){return new Dt(t)}static enum(t,e){return new Ot(e).list(t)}static number(t){return new Rt(t)}static object(t,e){return new At(e).keys(t)}static ref(t,e){return({context:s})=>s&&u(s[t])?s[t]:e}static string(t){return new kt(t)}test(t,...e){return!g(jt.validate(t,...e).error)}async testAsync(t,...e){return!g((await jt.validateAsync(t,...e)).error)}static validate(t,...e){let s={value:t};for(let t=0;t<e.length;t++)if(s=e[t].validate(s.value),s.error)return{value:s.value,error:s.error};return{value:s.value}}static async validateAsync(t,...e){let s={value:t};for(let t=0;t<e.length;t++)if(s=await e[t].validateAsync(s.value),s.error)return{value:s.value,error:s.error};return{value:s.value}}}return t.AsyncQueue=class{constructor(){this.running=!1,this.queue=[]}push(t){return new Promise((e,s)=>{this.queue.push(async()=>{try{const s=await t();e(s)}catch(t){s(t)}}),this.run()})}async run(){if(!this.running){for(this.running=!0;this.queue.length>0;){const t=this.queue.shift();t&&await t()}this.running=!1}}},t.EventEmitter=class{constructor(){this.events=new Map}on(t,e){const s=this.events.get(t);return s?s.push(e):this.events.set(t,[e]),{dispose:()=>this.off(t,e)}}once(t,e){const s=r=>{e(r),this.off(t,s)};return this.on(t,s),{dispose:()=>this.off(t,s)}}off(t,e){const s=this.events.get(t);if(e){if(s){const t=s.indexOf(e);t>=0&&s.splice(t,1)}}else this.events.set(t,[])}emit(t,e){const s=this.events.get(t);s&&s.forEach(t=>t(e))}},t.Hash=k,t.RandomString=nt,t.Validation=jt,t.ValidationBase=It,t.ValidationKeys=dt,t.allowed=pt,t.cache=()=>{const t=[],e=[];return s=>{let r=t.indexOf(s);return-1==r&&(t.push(s),e.push({}),r=e.length-1),e[r]}},t.camelCase=Z,t.chunkArray=(t,e)=>{const s=[];for(let r=0;r<t.length;r+=e)s.push(t.slice(r,r+e));return s},t.clamp=e,t.clone=vt,t.colorPalette=(t,e)=>w(e??O,e=>0==e?t:e>0?D(t,e):M(t,1- -1*e)),t.compareArray=(t,e)=>t.length===e.length&&t.every((t,s)=>t===e[s]),t.countArray=t=>{const e={};return t.forEach(t=>{const s=t.toString();e[s]=(e[s]||0)+1}),e},t.cutText=(t,e)=>{if(t.length>e){const s=t.substring(0,e).split(" ");return s.pop(),s.join(" ")+"..."}return t},t.dateFormat=Y,t.dateInterval=(t,e,s)=>{const r=new Date(t);s=s??F("1d");const n=[];for(;r<e;)r.setTime(r.getTime()+s),n.push(new Date(r));return n},t.dateRange=(t,e)=>{const s=t??Y("%Y-%m"),r=X(s,"00:00:00");if(!r||!q(r.toISOString().slice(0,10)))return[null,null];const n=e||s;let i=X(n,"23:59:59");return i&&q(i.toISOString().slice(0,10))?(7==n.length&&(i=H(i)),r>i?[null,null]:[r,i]):[r,null]},t.debounce=(t,e)=>{let s;const r=()=>{s&&clearTimeout(s)};return{cancel:r,run(...n){r(),s=setTimeout(()=>t(...n),e)}}},t.decodeHTML=t=>t.replace(W,(t,e)=>G[e]).replace(/&#(\d+);/gi,(t,e)=>String.fromCharCode(parseInt(e,10))),t.denied=(t,e)=>pt(Object.keys(e).filter(e=>-1==t.indexOf(e)),e),t.each=(t,e,s)=>a(t)?E(t,e,s):v(t)?x(t,e,s):t,t.encodeHTML=t=>t.replace(/[^0-9A-Za-z ]/g,t=>"&#"+t.charCodeAt(0)+";"),t.firstDayDate=t=>new Date(t.getFullYear(),t.getMonth(),1,t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()),t.forEachAsync=async(t,e,s)=>{await Promise.allSettled(t.map((r,n)=>e.call(s,r,n,t)?.catch(B))).catch(B)},t.forEachIndex=E,t.forEachKey=x,t.forEachPage=async t=>{let e=!0;const s=()=>e=!0;let r=1;for(;e;)e=!1,await(t(r,s)?.catch(B)),r+=1},t.forEachSeries=async(t,e,s)=>{for(let r=0;r<t.length;r++)await(e.call(s,t[r],r,t)?.catch(B))},t.forLoop=(t,e,s)=>{for(let r=1;r<=t&&!1!==e.call(s,r,t);r++);return t},t.hexToRgb=T,t.hslToRgb=(t,e,s)=>{t/=60;const r=(1-Math.abs(2*s-1))*e,n=r*(1-Math.abs(t%2-1));let i=[0,0,0];t<=1?i=[r,n,0]:t<=2?i=[n,r,0]:t<=3?i=[0,r,n]:t<=4?i=[0,n,r]:t<=5?i=[n,0,r]:t<=6&&(i=[r,0,n]);const a=s-.5*r;return[Math.round(255*(i[0]+a)),Math.round(255*(i[1]+a)),Math.round(255*(i[2]+a))]},t.inArray=(t,e)=>-1!=e.indexOf(t),t.includesArray=(t,e)=>t.every(t=>e.includes(t)),t.isArray=a,t.isBoolean=l,t.isCharacter=t=>/^[\w]$/.test(t),t.isDate=t=>"date"==i(t),t.isDef=u,t.isDigit=tt,t.isEmpty=_,t.isFalse=t=>!J(t),t.isFloat=h,t.isFunction=c,t.isInteger=p,t.isLetter=et,t.isMap=t=>"map"==i(t),t.isNotEmpty=t=>!_(t),t.isNull=t=>null===t,t.isNumber=o,t.isObject=v,t.isPlainObject=m,t.isRegExp=t=>"regexp"==i(t),t.isScalar=t=>-1!=d.indexOf(i(t)),t.isSet=t=>"set"==i(t),t.isSpecialChar=st,t.isString=g,t.isSymbol=t=>"symbol"==typeof t,t.isTrue=J,t.isUndefined=f,t.isValidDate=q,t.lastDayDate=H,t.lerp=(t,s,r)=>t+(s-t)*e(r,0,1),t.loop=(t,e)=>{let s=!1;const r=async()=>{s&&(await t(),setTimeout(r,e))};return{start(){s||(s=!0,r())},stop(){s=!1}}},t.lowerCamelCase=z,t.map=w,t.mask=ht,t.maskMoney=(t,e,s)=>(s++,e=parseInt((e||"0").replace(/\D/g,"")).toString(),ct(t,e.length<s?("0".repeat(s)+e).slice(-1*s):e)),t.maskReverse=ct,t.maskTest=(t,e)=>t.length==ht(t,e).length,t.merge=mt,t.msToString=t=>{const e=[];return K.forEach(s=>{const r=$[s],n=(t-t%r)/r;n&&(t-=n*r,e.push(n.toString()+s))}),e.join(" ")},t.noop=B,t.parseMs=F,t.parseSize=t=>{if(o(t))return t+"px";const e=(t=>/(-?(?:\d+)?\.?\d+) *(px|%|cm|mm|in|pt|pc|en|ex|ch|rem|vw|vh|vmin|vmax)*/g.exec(t))(t);return e?parseFloat(e[1])+(e[2]||"px"):"0px"},t.random=s,t.randomCase=t=>t.split("").map(t=>Math.random()<.5?t.toUpperCase():t.toLowerCase()).join(""),t.randomElement=t=>t.length?t[s(0,t.length-1)]:null,t.rangeArray=(t,e,s=1)=>Array.from({length:(e-t)/s+1},(e,r)=>t+r*s),t.rgbToHex=C,t.rgbToHsl=(t,e,s)=>{const[r,n,i]=((...t)=>t.map(t=>t/255))(t,e,s),a=Math.max(r,n,i),l=Math.min(r,n,i),u=a-l,o=(l+a)/2;return[60*R(u,a,r,n,i),A(u,o),o]},t.shadeColor=M,t.shuffleArray=r,t.shuffleString=rt,t.sleep=t=>new Promise(e=>setTimeout(e,t)),t.stringReverse=it,t.tintColor=D,t.toArray=t=>a(t)?t:u(t)?[t]:[],t.toBool=S,t.type=i,t.uniqueArray=t=>t.filter((t,e,s)=>s.indexOf(t)===e),t.uniqueID=j,t.upperCamelCase=at,t.uuidv1=()=>{const t=1e4*(Date.now()+122192928e5),e=(4294967295&t)>>>0,r=(t/4294967296&65535)>>>0,n=(t/281474976710656&4095)>>>0,i=s(0,e),a=(t,e)=>t.toString(16).padStart(e,"0");return[a(e,8),a(r,4),a(4096|n,4),a(i>>8&63|128,2)+a(255&i,2),j(12)].join("-")},t.uuidv1ToTimestamp=t=>{const e=t.replace(/-/g,""),s=parseInt(e.slice(0,8),16),r=parseInt(e.slice(8,12),16),n=(4095&parseInt(e.slice(12,16),16))*Math.pow(2,48)+r*Math.pow(2,32)+s;return Math.floor((n-122192928e9)/1e4)},t.uuidv4=()=>{const t=[];t.push(...Array(16).fill(0).map(()=>s(0,255))),t[6]=15&t[6]|64;const e=t.map(t=>t.toString(16).padStart(2,"0")).join("");return[e.slice(0,8),e.slice(8,12),e.slice(12,16),e.slice(16,20),e.slice(20)].join("-")},t.uuidv7=()=>{const t=Date.now(),e=[];e[0]=t/2**40&255,e[1]=t/2**32&255,e[2]=t>>>24&255,e[3]=t>>>16&255,e[4]=t>>>8&255,e[5]=255&t,e.push(...Array(10).fill(0).map(()=>s(0,255))),e[6]=15&e[6]|112,e[8]=63&e[8]|128;const r=e.map(t=>t.toString(16).padStart(2,"0")).join("");return[r.slice(0,8),r.slice(8,12),r.slice(12,16),r.slice(16,20),r.slice(20)].join("-")},t.uuidv7ToTimestamp=t=>parseInt(t.replace(/-/g,"").slice(0,12),16),t.uuidv8=t=>{const e=Date.now(),r=[];r[0]=e/2**40&255,r[1]=e/2**32&255,r[2]=e>>>24&255,r[3]=e>>>16&255,r[4]=e>>>8&255,r[5]=255&e,r.push(...Array(8).fill(0).map(()=>s(0,255))),r[6]=15&r[6]|128,r[8]=63&r[8]|128;const n=r.map(t=>t.toString(16).padStart(2,"0")).join("");return[n.slice(0,8),n.slice(8,12),n.slice(12,16),k.hex(t??"").slice(4),n.slice(16)].join("-")},t}({});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@andrewcaires/utils.js",
3
- "version": "0.4.14",
3
+ "version": "0.4.15",
4
4
  "description": "JavaScript utility library for web and nodejs development",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs.js",
@@ -47,12 +47,12 @@
47
47
  "@rollup/plugin-commonjs": "^28.0.6",
48
48
  "@rollup/plugin-terser": "^0.4.4",
49
49
  "@rollup/plugin-typescript": "^12.1.4",
50
- "@types/node": "^24.3.0",
51
- "eslint": "^9.34.0",
52
- "rollup": "^4.48.1",
50
+ "@types/node": "^24.5.2",
51
+ "eslint": "^9.35.0",
52
+ "rollup": "^4.50.2",
53
53
  "rollup-plugin-dts": "^6.2.3",
54
54
  "tslib": "^2.8.1",
55
55
  "tsx": "^4.20.5",
56
- "typescript-eslint": "^8.41.0"
56
+ "typescript-eslint": "^8.44.0"
57
57
  }
58
58
  }