@andrewcaires/utils.js 0.4.14 → 0.4.16

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.16
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 a=t=>"array"==n(t),i=t=>"boolean"==n(t),o=t=>"null"!=n(t),l=t=>"number"==n(t),u=t=>l(t)&&!!(t%1),h=t=>"function"==typeof t,c=t=>l(t)&&!(t%1),p=t=>"object"==n(t),v=t=>p(t)&&t.constructor===Object,x=["boolean","number","string"],m=t=>"string"==typeof t,d=t=>void 0===t,g=[1,"1",!0,"true"],f=t=>-1!=g.indexOf(t),y=(t,e,s)=>{for(let r=0;r<t.length&&!1!==e.call(s,t[r],r,t);r++);return t},S=(t,e,s)=>{let r="";const n=Object.keys(t);for(let a=0;a<n.length&&(r=n[a],!1!==e.call(s,t[r],r,t));a++);return t},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,a,i]=r.map(t=>Math.round(t*s));return I(n,a,i)},M=(e,s)=>{const r=b(e);s=t(s,0,1);const[n,a,i]=r.map(t=>Math.round(t+(255-t)*s));return I(n,a,i)},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[a,i]=this.index(t,e,n);r+=-1===a||-1===i?t[n]:this.result(a,i,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())},L=(t,e,s)=>(e=e??new Date,t.replace(/%[yYmdHMS]/g,t=>N[t]?N[t](e,s):t.slice(1))),Y=36e5,U=24*Y,P={ms:1,s:1e3,m:6e4,h:Y,d:U,w:7*U,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(""),at=(t,e)=>J(t,t=>t.replace(/(\w)(\w*)/g,(t,e,s)=>e.toUpperCase()+s),e),it=(t,e)=>e(t.value)?t.value:(t=>(t.maskIndex--,""))(t),ot={"#":t=>t.value,0:t=>it(t,G),9:t=>it(t,G),A:t=>it(t,tt),Z:t=>it(t,tt),L:t=>it(t,tt).toLowerCase(),U:t=>it(t,tt).toUpperCase(),S:t=>it(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:a,value:i}=t;return d(a)||d(i)?"":(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()):a(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{static getLocale(){return this.locale}static options(t={}){t.locale&&this.setLocale(t.locale),t.locales&&S(t.locales,(t,e)=>{this.locales={...this.locales,[e]:{...this.locales[e]??{},...t}}})}static setLocale(t){return this.locale!=t&&(this.locale=t,!0)}static to(t,e,s){return this.message(t,s).replace(/{[\w]+}/g,t=>(t=t.substring(1,t.length-1),e?e[t]?.toString()??`%${t}%`:`%${t}%`))}static current(t){return t||(t=this.locale),t&&this.locales?this.locales[t]??{}:{}}static message(t,e){return this.current(e)[t]??t}}xt.locales={};class mt{}var dt,gt,ft,yt,St,Et,wt,bt,Tt;mt.DESCRIPTION=Symbol("DESCRIPTION"),mt.ERROR=Symbol("ERROR"),mt.EXAMPLE=Symbol("EXAMPLE"),mt.INDEXES=Symbol("INDEXES"),mt.KEYS=Symbol("KEYS"),mt.LIST=Symbol("LIST"),mt.NAME=Symbol("NAME"),mt.REQUIRED=Symbol("REQUIRED"),mt.SOURCE=Symbol("SOURCE"),mt.TYPE=Symbol("TYPE");class It{constructor(t){this[dt]="",this[gt]="",this[ft]=null,this[yt]="",this[St]="any",this[Et]=!1,this.rules=[],this.custom=[],this[mt.TYPE]=t}description(t){return this[mt.DESCRIPTION]=t,this}example(t){return this[mt.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[mt.ERROR]=t),this}filter(...t){const e=t;return this.unshift(({value:t})=>{const s=-1==e.indexOf(t);return{break:!s,value:s?t:void 0}})}fn(t){return h(t)?t:()=>t}from(t){return this[mt.SOURCE]=t,this}invalid(t,e){return t=`[${this[mt.TYPE]}]${t}`,{error:this[mt.ERROR]?this[mt.ERROR]:this[mt.NAME]?this[mt.NAME]+":"+t:t,message:e}}model(){return this.toString()}parse(){return this.unshift(({value:t})=>({value:t}))}push(t){return this.rules.push(t),this}required(t){return this[mt.REQUIRED]=!0,this.unshift(({value:e})=>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[mt.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}}}dt=mt.NAME,gt=mt.DESCRIPTION,ft=mt.EXAMPLE,mt.SOURCE,yt=mt.ERROR,St=mt.TYPE,Et=mt.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[mt.INDEXES].push(s),s?this.push(({value:t})=>{const r=[];s[mt.NAME]="";for(let n=0;n<t.length;n++){const{error:a,value:i}=s.validate(t[n],t);if(a)return this.invalid("< "+a+"["+n+"] >",e);r[n]=i}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[mt.INDEXES].length?this[mt.INDEXES].map(t=>t.model()):this[mt.TYPE]}toString(){return this[mt.INDEXES].length?JSON.stringify(this.model(),null,4):this[mt.TYPE]}}wt=mt.INDEXES;class Mt extends It{constructor(t){super("boolean"),this.push(({value:e})=>i(e)?{value:e}:this.invalid("",t))}parse(){return this.unshift(({value:t})=>({value:o(t)?f(t):t}))}}class Dt extends It{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:L(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})=>o(e)?{value:e}:this.invalid(`('${this[mt.LIST].join("', '")}')`,t))}list(t,e){const s=t;return s&&this[mt.LIST].push(...s),s?this.push(({value:t})=>-1!=this[mt.LIST].indexOf(t)?{value:t}:this.invalid(`('${this[mt.LIST].join("', '")}')`,e)):this}toString(){return`${this[mt.TYPE]}('${this[mt.LIST].join("', '")}')`}}bt=mt.LIST;class Rt extends It{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 At extends It{constructor(t){super("object"),this[Tt]={},this.push(({value:e})=>p(e)?{value:e}:this.invalid("",t))}keys(t,e){const s=t;return s&&(this[mt.KEYS]={...this[mt.KEYS],...s}),s?this.push(({value:t})=>{const r=[],n={};return Object.keys(s).forEach(a=>{const i=s[a];i[mt.NAME]=i[mt.SOURCE]??a;const{error:l,message:u,value:h}=i.validate(t[i[mt.NAME]],n);!e&&u&&(e=u),l&&r.push(l),o(h)&&(n[a]=h)}),r.length?this.invalid("{ "+r.join(", ")+" }",e):{value:n}}):this}model(){const t={},e=Object.keys(this[mt.KEYS]);return e.length&&e.forEach(e=>t[e]=this[mt.KEYS][e].model()),e.length?t:this[mt.TYPE]}parse(t){return this.unshift(({value:e})=>{if(!p(e))try{e=JSON.parse(e)}catch(e){return this.invalid("",t)}return{value:e}})}toString(){return Object.keys(this[mt.KEYS]).length?JSON.stringify(this.model(),null,4):this[mt.TYPE]}}Tt=mt.KEYS;class kt extends It{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[mt.REQUIRED]=!0,this.push(({value:e})=>e.length?{value:e}:this.invalid(".required",t))}regex(t,e){return this.push(({value:s})=>t.test(s)?{value:s}:this.invalid(".regex",e))}replace(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>({value:t.replace(s({value:t,context:r}),e)}))}trim(){return this.push(({value:t})=>({value:t.trim()}))}upperCase(){return this.push(({value:t})=>({value:t.toUpperCase()}))}upperCamelCase(){return this.push(({value:t})=>({value: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&&o(s[t])?s[t]:e}static string(t){return new kt(t)}test(t,...e){return!m(jt.validate(t,...e).error)}async testAsync(t,...e){return!m((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}}}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.Translate=xt,exports.Validation=jt,exports.ValidationBase=It,exports.ValidationKeys=mt,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=L,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??L("%Y-%m"),r=H(s,"00:00:00");if(!r||!F(r.toISOString().slice(0,10)))return[null,null];const n=e||s;let a=H(n,"23:59:59");return a&&F(a.toISOString().slice(0,10))?(7==n.length&&(a=q(a)),r>a?[null,null]:[r,a]):[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)=>a(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 a=[0,0,0];t<=1?a=[r,n,0]:t<=2?a=[n,r,0]:t<=3?a=[0,r,n]:t<=4?a=[0,n,r]:t<=5?a=[n,0,r]:t<=6&&(a=[r,0,n]);const i=s-.5*r;return[Math.round(255*(a[0]+i)),Math.round(255*(a[1]+i)),Math.round(255*(a[2]+i))]},exports.inArray=(t,e)=>-1!=e.indexOf(t),exports.includesArray=(t,e)=>t.every(t=>e.includes(t)),exports.isArray=a,exports.isBoolean=i,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,a]=((...t)=>t.map(t=>t/255))(t,e,s),i=Math.max(r,n,a),o=Math.min(r,n,a),l=i-o,u=(o+i)/2;return[60*O(l,i,r,n,a),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=>a(t)?t:o(t)?[t]:[],exports.toBool=f,exports.type=n,exports.uniqueArray=t=>t.filter((t,e,s)=>s.indexOf(t)===e),exports.uniqueID=k,exports.upperCamelCase=at,exports.uuidv1=()=>{const t=1e4*(Date.now()+122192928e5),s=(4294967295&t)>>>0,r=(t/4294967296&65535)>>>0,n=(t/281474976710656&4095)>>>0,a=e(0,s),i=(t,e)=>t.toString(16).padStart(e,"0");return[i(s,8),i(r,4),i(4096|n,4),i(a>>8&63|128,2)+i(255&a,2),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.16
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
 
@@ -317,6 +321,26 @@ declare const stringReverse: (str: string) => string;
317
321
 
318
322
  declare const upperCamelCase: (str: string, space?: string) => string;
319
323
 
324
+ interface TranslateOptions {
325
+ locale?: string;
326
+ locales?: TypeObject<TypeObjectString>;
327
+ }
328
+
329
+ type TranslateParameters = TypeObject<TypeScalar>;
330
+
331
+ declare class Translate {
332
+ private static locale?;
333
+ private static locales;
334
+ static getLocale(): string | undefined;
335
+ static options(options?: TranslateOptions): void;
336
+ static setLocale(value: string): boolean;
337
+ static to(message: string, options?: TranslateParameters, locale?: string): string;
338
+ private static current;
339
+ private static message;
340
+ }
341
+
342
+ type TranslateLocales = TypeObject<TypeObjectString>;
343
+
320
344
  type ValidationCallback<T = any> = (value: IValidationInput<T>) => IValidationOutput<T>;
321
345
 
322
346
  declare class ValidationKeys {
@@ -332,6 +356,8 @@ declare class ValidationKeys {
332
356
  static readonly TYPE: unique symbol;
333
357
  }
334
358
 
359
+ type ValidationFunction<T> = (value: IValidationInput) => T;
360
+
335
361
  declare class ValidationBase<T = any> {
336
362
  [ValidationKeys.NAME]: string;
337
363
  [ValidationKeys.DESCRIPTION]: string;
@@ -345,14 +371,14 @@ declare class ValidationBase<T = any> {
345
371
  constructor(type: string);
346
372
  description(value: string): this;
347
373
  example(value: T): this;
348
- empty(value?: T | TypeCallbackFunction<T>): this;
349
- equal(value: T | IValidationFunction<T>, message?: string): this;
374
+ empty(value?: T | TypeAnyFunction<T>): this;
375
+ equal(value: T | ValidationFunction<T>, message?: string): this;
350
376
  error(value?: string): this;
351
377
  filter(...values: Array<T>): this;
352
- protected fn<T = any>(value: T | TypeCallbackFunction<T>): TypeCallbackFunction<T>;
378
+ protected fn<T = any>(value: T | TypeAnyFunction<T>): TypeAnyFunction<T>;
353
379
  from(value: string): this;
354
380
  protected invalid(error: string, message?: string): IValidationOutput<T>;
355
- model(): string | TypeObjectAny | Array<string | TypeObjectAny>;
381
+ model(): string | TypeAnyObject | Array<string | TypeAnyObject>;
356
382
  parse(): this;
357
383
  push(callback: ValidationCallback<T>): this;
358
384
  required(message?: string): this;
@@ -377,8 +403,6 @@ interface IValidationInput<T = any> extends IValidationOutput<T> {
377
403
  value: T;
378
404
  }
379
405
 
380
- type IValidationFunction<T> = (value: IValidationInput) => T;
381
-
382
406
  declare class ValidationArray extends ValidationBase<Array<any>> {
383
407
  private [ValidationKeys.INDEXES];
384
408
  constructor(message?: string);
@@ -387,7 +411,7 @@ declare class ValidationArray extends ValidationBase<Array<any>> {
387
411
  length(value: number, message?: string): this;
388
412
  max(value: number, message?: string): this;
389
413
  min(value: number, message?: string): this;
390
- model(): string | TypeObjectAny | Array<string | TypeObjectAny>;
414
+ model(): string | TypeAnyObject | Array<string | TypeAnyObject>;
391
415
  toString(): string;
392
416
  }
393
417
 
@@ -411,37 +435,37 @@ declare class ValidationEnum extends ValidationBase<string> {
411
435
 
412
436
  declare class ValidationNumber extends ValidationBase<number> {
413
437
  constructor(message?: string);
414
- between(min: number | TypeCallbackFunction, max: number | TypeCallbackFunction, message?: string): this;
438
+ between(min: number | TypeAnyFunction, max: number | TypeAnyFunction, message?: string): this;
415
439
  float(message?: string): this;
416
440
  integer(message?: string): this;
417
- max(value: number | TypeCallbackFunction, message?: string): this;
418
- min(value: number | TypeCallbackFunction, message?: string): this;
441
+ max(value: number | TypeAnyFunction, message?: string): this;
442
+ min(value: number | TypeAnyFunction, message?: string): this;
419
443
  parse(): this;
420
444
  }
421
445
 
422
- declare class ValidationObject extends ValidationBase<TypeObjectAny> {
446
+ declare class ValidationObject extends ValidationBase<TypeAnyObject> {
423
447
  private [ValidationKeys.KEYS];
424
448
  constructor(message?: string);
425
449
  keys(value?: TypeObject<ValidationBase>, message?: string): this;
426
- model(): string | TypeObjectAny | Array<string | TypeObjectAny>;
450
+ model(): string | TypeAnyObject | Array<string | TypeAnyObject>;
427
451
  parse(message?: string): this;
428
452
  toString(): string;
429
453
  }
430
454
 
431
455
  declare class ValidationString extends ValidationBase<string> {
432
456
  constructor(message?: string);
433
- between<T extends number>(min: T | IValidationFunction<T>, max: number | IValidationFunction<T>, message?: string): this;
457
+ between<T extends number>(min: T | ValidationFunction<T>, max: number | ValidationFunction<T>, message?: string): this;
434
458
  email(message?: string): this;
435
- length<T extends number>(value: T | IValidationFunction<T>, message?: string): this;
459
+ length<T extends number>(value: T | ValidationFunction<T>, message?: string): this;
436
460
  lowerCase(): this;
437
461
  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;
462
+ max<T extends number>(value: T | ValidationFunction<T>, message?: string): this;
463
+ mask<T extends string>(value: T | ValidationFunction<T>): this;
464
+ min<T extends number>(value: T | ValidationFunction<T>, message?: string): this;
441
465
  parse(): this;
442
466
  required(message?: string): this;
443
467
  regex(regex: RegExp, message?: string): this;
444
- replace<T extends string>(value: T | RegExp | IValidationFunction<T>, text: string): this;
468
+ replace<T extends string>(value: T | RegExp | ValidationFunction<T>, text: string): this;
445
469
  trim(): this;
446
470
  upperCase(): this;
447
471
  upperCamelCase(): this;
@@ -454,7 +478,7 @@ declare class Validation {
454
478
  static enum(value?: Array<any>, message?: string): ValidationEnum;
455
479
  static number(message?: string): ValidationNumber;
456
480
  static object(value?: TypeObject<ValidationBase>, message?: string): ValidationObject;
457
- static ref(ref: string | number, value?: any): TypeCallbackFunction;
481
+ static ref(ref: string | number, value?: any): TypeAnyFunction;
458
482
  static string(message?: string): ValidationString;
459
483
  test(value?: any, ...rules: Array<ValidationBase>): boolean;
460
484
  testAsync(value?: any, ...rules: Array<ValidationBase>): Promise<boolean>;
@@ -464,5 +488,5 @@ declare class Validation {
464
488
 
465
489
  type ValidationCallbackAsync<T = any> = (value: IValidationInput<T>) => Promise<IValidationOutput<T>>;
466
490
 
467
- 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 };
491
+ export { AsyncQueue, EventEmitter, Hash, RandomString, Translate, 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 };
492
+ export type { AsyncQueueTask, CacheCallback, EachCallback, EachValue, EventCallback, EventList, ForEachCallback, IDebounceCallbacks, IEventDisposable, ILoopCallbacks, IValidationInput, IValidationOutput, TranslateLocales, TranslateOptions, TranslateParameters, 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.16
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]}},L=(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},P=(t,e,s)=>v(t)?L(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,Lt={amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",quot:'"'},$t=t=>t.replace(Ut,(t,e)=>Lt[e]).replace(/&#(\d+);/gi,(t,e)=>String.fromCharCode(parseInt(e,10))),Pt=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{static getLocale(){return this.locale}static options(t={}){t.locale&&this.setLocale(t.locale),t.locales&&$(t.locales,(t,e)=>{this.locales={...this.locales,[e]:{...this.locales[e]??{},...t}}})}static setLocale(t){return this.locale!=t&&(this.locale=t,!0)}static to(t,e,s){return this.message(t,s).replace(/{[\w]+}/g,t=>(t=t.substring(1,t.length-1),e?e[t]?.toString()??`%${t}%`:`%${t}%`))}static current(t){return t||(t=this.locale),t&&this.locales?this.locales[t]??{}:{}}static message(t,e){return this.current(e)[t]??t}}pe.locales={};class ve{}var ge,me,de,fe,Se,ye,xe,Ee,we;ve.DESCRIPTION=Symbol("DESCRIPTION"),ve.ERROR=Symbol("ERROR"),ve.EXAMPLE=Symbol("EXAMPLE"),ve.INDEXES=Symbol("INDEXES"),ve.KEYS=Symbol("KEYS"),ve.LIST=Symbol("LIST"),ve.NAME=Symbol("NAME"),ve.REQUIRED=Symbol("REQUIRED"),ve.SOURCE=Symbol("SOURCE"),ve.TYPE=Symbol("TYPE");class be{constructor(t){this[ge]="",this[me]="",this[de]=null,this[fe]="",this[Se]="any",this[ye]=!1,this.rules=[],this.custom=[],this[ve.TYPE]=t}description(t){return this[ve.DESCRIPTION]=t,this}example(t){return this[ve.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[ve.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[ve.SOURCE]=t,this}invalid(t,e){return t=`[${this[ve.TYPE]}]${t}`,{error:this[ve.ERROR]?this[ve.ERROR]:this[ve.NAME]?this[ve.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[ve.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[ve.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}}}ge=ve.NAME,me=ve.DESCRIPTION,de=ve.EXAMPLE,ve.SOURCE,fe=ve.ERROR,Se=ve.TYPE,ye=ve.REQUIRED;class Ie extends be{constructor(t){super("array"),this[xe]=[],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[ve.INDEXES].push(s),s?this.push(({value:t})=>{const r=[];s[ve.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[ve.INDEXES].length?this[ve.INDEXES].map(t=>t.model()):this[ve.TYPE]}toString(){return this[ve.INDEXES].length?JSON.stringify(this.model(),null,4):this[ve.TYPE]}}xe=ve.INDEXES;class Me extends be{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 Oe extends be{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 Ce extends be{constructor(t){super("enum"),this[Ee]=[],this.push(({value:e})=>d(e)?{value:e}:this.invalid(`('${this[ve.LIST].join("', '")}')`,t))}list(t,e){const s=t;return s&&this[ve.LIST].push(...s),s?this.push(({value:t})=>-1!=this[ve.LIST].indexOf(t)?{value:t}:this.invalid(`('${this[ve.LIST].join("', '")}')`,e)):this}toString(){return`${this[ve.TYPE]}('${this[ve.LIST].join("', '")}')`}}Ee=ve.LIST;class Te extends be{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 Re extends be{constructor(t){super("object"),this[we]={},this.push(({value:e})=>b(e)?{value:e}:this.invalid("",t))}keys(t,e){const s=t;return s&&(this[ve.KEYS]={...this[ve.KEYS],...s}),s?this.push(({value:t})=>{const r=[],n={};return Object.keys(s).forEach(i=>{const a=s[i];a[ve.NAME]=a[ve.SOURCE]??i;const{error:l,message:u,value:h}=a.validate(t[a[ve.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[ve.KEYS]);return e.length&&e.forEach(e=>t[e]=this[ve.KEYS][e].model()),e.length?t:this[ve.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[ve.KEYS]).length?JSON.stringify(this.model(),null,4):this[ve.TYPE]}}we=ve.KEYS;class De extends be{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[ve.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 Ae{static array(t,e){return new Ie(e).items(t)}static boolean(t){return new Me(t)}static date(t){return new Oe(t)}static enum(t,e){return new Ce(e).list(t)}static number(t){return new Te(t)}static object(t,e){return new Re(e).keys(t)}static ref(t,e){return({context:s})=>s&&d(s[t])?s[t]:e}static string(t){return new De(t)}test(t,...e){return!R(Ae.validate(t,...e).error)}async testAsync(t,...e){return!R((await Ae.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,pe as Translate,Ae as Validation,be as ValidationBase,ve 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,P as each,Pt as encodeHTML,xt as firstDayDate,ue as forEachAsync,L 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.16
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),L={"%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())},U=(t,e,s)=>(e=e??new Date,t.replace(/%[yYmdHMS]/g,t=>L[t]?L[t](e,s):t.slice(1))),Y=36e5,P=24*Y,$={ms:1,s:1e3,m:6e4,h:Y,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{static getLocale(){return this.locale}static options(t={}){t.locale&&this.setLocale(t.locale),t.locales&&x(t.locales,(t,e)=>{this.locales={...this.locales,[e]:{...this.locales[e]??{},...t}}})}static setLocale(t){return this.locale!=t&&(this.locale=t,!0)}static to(t,e,s){return this.message(t,s).replace(/{[\w]+}/g,t=>(t=t.substring(1,t.length-1),e?e[t]?.toString()??`%${t}%`:`%${t}%`))}static current(t){return t||(t=this.locale),t&&this.locales?this.locales[t]??{}:{}}static message(t,e){return this.current(e)[t]??t}}dt.locales={};class gt{}var ft,yt,St,Et,xt,wt,bt,Tt,It;gt.DESCRIPTION=Symbol("DESCRIPTION"),gt.ERROR=Symbol("ERROR"),gt.EXAMPLE=Symbol("EXAMPLE"),gt.INDEXES=Symbol("INDEXES"),gt.KEYS=Symbol("KEYS"),gt.LIST=Symbol("LIST"),gt.NAME=Symbol("NAME"),gt.REQUIRED=Symbol("REQUIRED"),gt.SOURCE=Symbol("SOURCE"),gt.TYPE=Symbol("TYPE");class Ct{constructor(t){this[ft]="",this[yt]="",this[St]=null,this[Et]="",this[xt]="any",this[wt]=!1,this.rules=[],this.custom=[],this[gt.TYPE]=t}description(t){return this[gt.DESCRIPTION]=t,this}example(t){return this[gt.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[gt.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[gt.SOURCE]=t,this}invalid(t,e){return t=`[${this[gt.TYPE]}]${t}`,{error:this[gt.ERROR]?this[gt.ERROR]:this[gt.NAME]?this[gt.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[gt.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[gt.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}}}ft=gt.NAME,yt=gt.DESCRIPTION,St=gt.EXAMPLE,gt.SOURCE,Et=gt.ERROR,xt=gt.TYPE,wt=gt.REQUIRED;class Mt extends Ct{constructor(t){super("array"),this[bt]=[],this.push(({value:e})=>a(e)?{value:e}:this.invalid("",t))}between(t,e,s){return this.min(t,s),this.max(e,s)}items(t,e){const s=t;return s&&this[gt.INDEXES].push(s),s?this.push(({value:t})=>{const r=[];s[gt.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[gt.INDEXES].length?this[gt.INDEXES].map(t=>t.model()):this[gt.TYPE]}toString(){return this[gt.INDEXES].length?JSON.stringify(this.model(),null,4):this[gt.TYPE]}}bt=gt.INDEXES;class Dt extends Ct{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 Ot extends Ct{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:U(e,new Date(t))}))}parse(){return this.unshift(({value:t})=>({value:new Date(t)}))}}class Rt extends Ct{constructor(t){super("enum"),this[Tt]=[],this.push(({value:e})=>u(e)?{value:e}:this.invalid(`('${this[gt.LIST].join("', '")}')`,t))}list(t,e){const s=t;return s&&this[gt.LIST].push(...s),s?this.push(({value:t})=>-1!=this[gt.LIST].indexOf(t)?{value:t}:this.invalid(`('${this[gt.LIST].join("', '")}')`,e)):this}toString(){return`${this[gt.TYPE]}('${this[gt.LIST].join("', '")}')`}}Tt=gt.LIST;class At extends Ct{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 kt extends Ct{constructor(t){super("object"),this[It]={},this.push(({value:e})=>v(e)?{value:e}:this.invalid("",t))}keys(t,e){const s=t;return s&&(this[gt.KEYS]={...this[gt.KEYS],...s}),s?this.push(({value:t})=>{const r=[],n={};return Object.keys(s).forEach(i=>{const a=s[i];a[gt.NAME]=a[gt.SOURCE]??i;const{error:l,message:o,value:h}=a.validate(t[a[gt.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[gt.KEYS]);return e.length&&e.forEach(e=>t[e]=this[gt.KEYS][e].model()),e.length?t:this[gt.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[gt.KEYS]).length?JSON.stringify(this.model(),null,4):this[gt.TYPE]}}It=gt.KEYS;class jt extends Ct{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[gt.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 Nt{static array(t,e){return new Mt(e).items(t)}static boolean(t){return new Dt(t)}static date(t){return new Ot(t)}static enum(t,e){return new Rt(e).list(t)}static number(t){return new At(t)}static object(t,e){return new kt(e).keys(t)}static ref(t,e){return({context:s})=>s&&u(s[t])?s[t]:e}static string(t){return new jt(t)}test(t,...e){return!g(Nt.validate(t,...e).error)}async testAsync(t,...e){return!g((await Nt.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.Translate=dt,t.Validation=Nt,t.ValidationBase=Ct,t.ValidationKeys=gt,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=U,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??U("%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.16",
4
4
  "description": "JavaScript utility library for web and nodejs development",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs.js",
@@ -44,15 +44,15 @@
44
44
  },
45
45
  "homepage": "https://github.com/andrewcaires/npm/tree/main/utils.js#readme",
46
46
  "devDependencies": {
47
- "@rollup/plugin-commonjs": "^28.0.6",
47
+ "@rollup/plugin-commonjs": "^28.0.8",
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.8.1",
51
+ "eslint": "^9.38.0",
52
+ "rollup": "^4.52.5",
53
53
  "rollup-plugin-dts": "^6.2.3",
54
54
  "tslib": "^2.8.1",
55
- "tsx": "^4.20.5",
56
- "typescript-eslint": "^8.41.0"
55
+ "tsx": "^4.20.6",
56
+ "typescript-eslint": "^8.46.1"
57
57
  }
58
58
  }