@andrewcaires/utils.js 0.4.26 → 0.4.28

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.26
2
+ * @andrewcaires/utils.js v0.4.28
3
3
  * JavaScript utility library for web and nodejs development
4
4
  * (c) 2026 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 a=t=>"array"==n(t),i=t=>"boolean"==n(t),o=t=>"function"==typeof t,l=t=>"null"!=n(t),u=t=>"number"==n(t),h=t=>u(t)&&!!(t%1),c=t=>u(t)&&!(t%1),p=t=>"object"==n(t),x=t=>p(t)&&t.constructor===Object,v=["boolean","number","string"],m=t=>"string"==typeof t,g=t=>void 0===t,d=[1,"1",!0,"true"],f=t=>-1!=d.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),C=(t,e,s)=>"#"+T(t)+T(e)+T(s),I=(e,s)=>{const r=b(e);s=t(s,0,1);const[n,a,i]=r.map(t=>Math.round(t*s));return C(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 C(n,a,i)},O={50:.95,100:.9,200:.75,300:.6,400:.3,500:0,600:-.1,700:-.25,800:-.4,900:-.55,950:-.71},D=(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 j=(t=64)=>Array(Math.ceil(t/2)).fill(0).map(()=>e(0,255).toString(16).padStart(2,"0")).join("").slice(0,t),k=t=>("0"+t.toString()).slice(-2),N={"%y":(t,e)=>k(e?t.getUTCFullYear():t.getFullYear()),"%Y":(t,e)=>(e?t.getUTCFullYear():t.getFullYear()).toString(),"%m":(t,e)=>k((e?t.getUTCMonth():t.getMonth())+1),"%d":(t,e)=>k(e?t.getUTCDate():t.getDate()),"%H":(t,e)=>k(e?t.getUTCHours():t.getHours()),"%M":(t,e)=>k(e?t.getUTCMinutes():t.getMinutes()),"%S":(t,e)=>k(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,P=24*Y,U={ms:1,s:1e3,m:6e4,h:Y,d:P,w:7*P,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])*U[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 g(a)||g(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,xt=(t,...e)=>{if(!e.length)return t;const s=e.shift();if(x(t)&&x(s))for(const e in s)x(s[e])?(t[e]||(t={...t,[e]:{}}),t[e]=xt(t[e],s[e])):t={...t,[e]:s[e]};return xt(t,...e)};class vt{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}}vt.locales={};class mt{}var gt,dt,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 Ct{constructor(t){this[gt]="",this[dt]="",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=this.fn(t);return this.unshift(({value:t,context:s})=>{const r=l(t),n=e({value:t,context:s});return{break:!l(n)&&!r,value:r?t:n}})}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 o(t)?t:()=>t}from(t){return this[mt.SOURCE]=t,this}invalid(t,e){return t=`[${this[mt.TYPE]}]${t}`,{error:this[mt.ERROR]?this[mt.ERROR]:this[mt.NAME]?this[mt.NAME]+":"+t:t,message:e}}model(){return this.toString()}parse(){return this.unshift(({value:t})=>({value:t}))}push(t){return this.rules.push(t),this}required(t){return this[mt.REQUIRED]=!0,this.unshift(({value:e})=>l(e)?{value:e}:this.invalid(".required",t))}test(t){return!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.break)return{value:s.value};if(s.error?.length)return{error:s.error,...s.message?{message:s.message}:{}}}return{value:s.value}}async validateAsync(t,e){let s=this.validate(t,e);if(s.error)return{error:s.error,...s.message?{message:s.message}:{}};for(let t=0;t<this.custom.length;t++){if(s=await this.custom[t]({value:s.value}),s.break)return{value:s.value,...s.message?{message:s.message}:{}};if(s.error)return{error:s.error,...s.message?{message:s.message}:{}}}return{value:s.value}}}gt=mt.NAME,dt=mt.DESCRIPTION,ft=mt.EXAMPLE,mt.SOURCE,yt=mt.ERROR,St=mt.TYPE,Et=mt.REQUIRED;class It extends Ct{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 Ct{constructor(t){super("boolean"),this.push(({value:e})=>i(e)?{value:e}:this.invalid("",t))}parse(){return this.unshift(({value:t})=>({value:l(t)?f(t):t}))}}class Ot extends Ct{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 Dt extends Ct{constructor(t){super("enum"),this[bt]=[],this.push(({value:e})=>l(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 Ct{constructor(t){super("number"),this.push(({value:e})=>u(e)?{value:e}:this.invalid("",t))}between(t,e,s){return this.min(t,s),this.max(e,s)}float(t){return this.push(({value:e})=>h(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:l(t)?parseFloat(t.toString()):t}))}}class At extends Ct{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:o,message:u,value:h}=i.validate(t[i[mt.NAME]],n);!e&&u&&(e=u),o&&r.push(o),l(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 jt extends Ct{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):l(t)?t.toString():t}))}required(t){return this[mt.REQUIRED]=!0,this.push(({value:e})=>e.length?{value:e}:this.invalid(".required",t))}regex(t,e){return this.push(({value:s})=>t.test(s)?{value:s}:this.invalid(".regex",e))}replace(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>({value:t.replace(s({value:t,context:r}),e)}))}trim(){return this.push(({value:t})=>({value:t.trim()}))}upperCase(){return this.push(({value:t})=>({value:t.toUpperCase()}))}upperCamelCase(){return this.push(({value:t})=>({value:at(t)}))}}class kt{static array(t,e){return new It(e).items(t)}static boolean(t){return new Mt(t)}static date(t){return new Ot(t)}static enum(t,e){return new Dt(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&&l(s[t])?s[t]:e}static string(t){return new jt(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.Translate=vt,exports.Validation=kt,exports.ValidationBase=Ct,exports.ValidationKeys=mt,exports.allowed=ct,exports.cache=()=>{const t=new Map;return e=>(t.has(e)||t.set(e,{}),t.get(e)??{})},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??O,e=>0==e?t:e>0?M(t,e):I(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.getConstructor=t=>o(t)?t:t.constructor,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.isConstructor=t=>o(t)&&t.prototype.constructor===t,exports.isDate=t=>"date"==n(t),exports.isDef=l,exports.isDigit=G,exports.isEmpty=K,exports.isExtending=(t,e)=>{if(t===e)return!1;let s=Object.getPrototypeOf(t);for(;s;){if(s===e)return!0;s=Object.getPrototypeOf(s)}return!1},exports.isFalse=t=>!Q(t),exports.isFloat=h,exports.isFunction=o,exports.isInteger=c,exports.isLetter=tt,exports.isMap=t=>"map"==n(t),exports.isNotEmpty=t=>!K(t),exports.isNull=t=>null===t,exports.isNumber=u,exports.isObject=p,exports.isPlainObject=x,exports.isRegExp=t=>"regexp"==n(t),exports.isScalar=t=>-1!=v.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=g,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=xt,exports.msToString=t=>{const e=[];return X.forEach(s=>{const r=U[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(u(t))return t+"px";const e=(t=>/(-?(?:\d+)?\.?\d+) *(px|%|cm|mm|in|pt|pc|en|ex|ch|rem|vw|vh|vmin|vmax)*/g.exec(t))(t);return e?parseFloat(e[1])+(e[2]||"px"):"0px"},exports.random=e,exports.randomCase=t=>t.split("").map(t=>Math.random()<.5?t.toUpperCase():t.toLowerCase()).join(""),exports.randomElement=t=>t.length?t[e(0,t.length-1)]:null,exports.rangeArray=(t,e,s=1)=>Array.from({length:(e-t)/s+1},(e,r)=>t+r*s),exports.rgbToHex=C,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*D(l,i,r,n,a),R(l,u),u]},exports.shadeColor=I,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:l(t)?[t]:[],exports.toBool=f,exports.type=n,exports.uniqueArray=t=>t.filter((t,e,s)=>s.indexOf(t)===e),exports.uniqueID=j,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),j(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=>"function"==typeof t,l=t=>"date"==n(t),u=t=>"null"!=n(t),h=t=>"number"==n(t),c=t=>h(t)&&!!(t%1),p=t=>h(t)&&!(t%1),g=t=>"object"==n(t),m=t=>g(t)&&t.constructor===Object,v=t=>"regexp"==n(t),x=["boolean","number","string"],d=t=>"string"==typeof t,f=t=>void 0===t,S=[1,"1",!0,"true"],y=t=>-1!=S.indexOf(t),E=(t,e,s)=>{for(let r=0;r<t.length&&!1!==e.call(s,t[r],r,t);r++);return t},w=(t,e,s)=>{for(const r in t)if(!1===e.call(s,t[r],r,t))break;return t},b=(t,e,s)=>Object.fromEntries(Object.entries(t).map(([r,n])=>[r,e.call(s,n,r,t)])),M=t=>parseInt(t??"0",16)||0,T=t=>t.replace(/^#/,"").match(/.{1,2}/g)?.map(M)||[],C=t=>("0"+t.toString(16)).slice(-2),I=(t,e,s)=>"#"+C(t)+C(e)+C(s),A=(e,s)=>{const r=T(e);s=t(s,0,1);const[n,a,i]=r.map(t=>Math.round(t*s));return I(n,a,i)},R=(e,s)=>{const r=T(e);s=t(s,0,1);const[n,a,i]=r.map(t=>Math.round(t+(255-t)*s));return I(n,a,i)},O={50:.95,100:.9,200:.75,300:.6,400:.3,500:0,600:-.1,700:-.25,800:-.4,900:-.55,950:-.71},D=(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,j=(t,e)=>0===t?0:t/(1-Math.abs(2*e-1));const N=(t=64)=>Array(Math.ceil(t/2)).fill(0).map(()=>e(0,255).toString(16).padStart(2,"0")).join("").slice(0,t),k=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")},L=t=>("0"+t.toString()).slice(-2),Y={"%y":(t,e)=>L(e?t.getUTCFullYear():t.getFullYear()),"%Y":(t,e)=>(e?t.getUTCFullYear():t.getFullYear()).toString(),"%m":(t,e)=>L((e?t.getUTCMonth():t.getMonth())+1),"%d":(t,e)=>L(e?t.getUTCDate():t.getDate()),"%H":(t,e)=>L(e?t.getUTCHours():t.getHours()),"%M":(t,e)=>L(e?t.getUTCMinutes():t.getMinutes()),"%S":(t,e)=>L(e?t.getUTCSeconds():t.getSeconds())},P=(t,e,s)=>(e=e??new Date,t.replace(/%[yYmdHMS]/g,t=>Y[t]?Y[t](e,s):t.slice(1))),U=36e5,$=24*U,F={ms:1,s:1e3,m:6e4,h:U,d:$,w:7*$,y:315576e5},q=t=>{if(h(t))return 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])*F[s[2]]||0;return r},H=t=>{const e=new Date(t);return e.getTime()==e.getTime()&&t==e.toISOString().slice(0,10)},X=t=>new Date(t.getFullYear(),t.getMonth()+1,0,t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()),K=(t,e)=>/^([\d]{4})-([\d]{2})-([\d]{2})$/.test(t)?H(t)?new Date(`${t} ${e}`):null:/^([\d]{4})-([\d]{2})$/.test(t)&&H(t=`${t}-01`)?new Date(`${t} ${e}`):null,_=["y","d","h","m","s","ms"];const Q=t=>0==(t?.length??0),z=["",0,"0",null,!1,void 0],B=t=>-1==z.indexOf(t),J=()=>{},V=async(t,e,s,r=!0)=>{const n=[];if(await Promise.allSettled(t.map((a,i)=>e.call(s,a,i,t)?.catch(r?t=>{n.push(t)}:J))),r&&n.length)throw new AggregateError(n,"Errors occurred in forEachAsync")},Z=async(t,e,s,r=!0)=>{const n=[];for(let a=0;a<t.length;a++)await e.call(s,t[a],a,t).catch(r?t=>{n.push(t)}:J);if(r&&n.length)throw new AggregateError(n,"Errors occurred in forEachSeries")};const W=(t,e,s)=>e(t.toLowerCase().replace(/\W+/g," ")).replace(/\s/g,s??""),G=(t,e)=>W(t,t=>t.replace(/\s(\w)/g,t=>t.toUpperCase()),e),tt=G,et=/&(amp|apos|lt|gt|nbsp|quot);/g,st={amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",quot:'"'},rt=t=>/^[\d]$/.test(t),nt=t=>/^[A-Za-z]$/.test(t),at=t=>/^[^\w]$/.test(t),it=t=>s(t.split("")).join("");class ot{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 ot).chars()}lower(){return this.hasLower=!0,this}static lower(){return(new ot).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=it(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 ot).numbers()}space(){return this.hasSpace=!0,this}static space(){return(new ot).space()}symbols(){return this.hasSymbols=!0,this}static symbols(){return(new ot).symbols()}upper(){return this.hasUpper=!0,this}static upper(){return(new ot).upper()}}const lt=t=>t.split("").reverse().join(""),ut=(t,e)=>W(t,t=>t.replace(/(\w)(\w*)/g,(t,e,s)=>e.toUpperCase()+s),e),ht=(t,e)=>e(t.value)?t.value:(t=>(t.maskIndex--,""))(t),ct={"#":t=>t.value,0:t=>ht(t,rt),9:t=>ht(t,rt),A:t=>ht(t,nt),Z:t=>ht(t,nt),L:t=>ht(t,nt).toLowerCase(),U:t=>ht(t,nt).toUpperCase(),S:t=>ht(t,at)},pt=t=>{t.maskIndex++,t.textIndex++;const{mask:e,maskIndex:s,text:r,textIndex:n}=t;t.key=e[s],t.value=r[n];const{key:a,value:i}=t;return f(a)||f(i)?"":(t=>ct[t.key]?ct[t.key](t):(t.key!=t.value&&t.textIndex--,t.key))(t)+pt(t)},gt=(t,e)=>pt({mask:t,maskIndex:-1,text:e,textIndex:-1,key:"",value:""}),mt=(t,e)=>lt(gt(lt(t),lt(e))),vt=(t,e=new WeakMap)=>{if(!u(t))return t;if(l(t))return new Date(t.getTime());if(v(t))return new RegExp(t.source,t.flags);if(e.has(t))return e.get(t);if(a(t)){const s=[];return e.set(t,s),s.push(...t.map(t=>vt(t,e))),s}if(g(t)){const s={};return e.set(t,s),Object.assign(s,b(t,t=>vt(t,e))),s}return t},xt=(t,...e)=>m(t)?(e.forEach(e=>{m(e)&&Object.entries(e).forEach(([e,s])=>{t[e]=m(s)?xt(t[e]??{},s):s})}),t):t;class dt{static getLocale(){return this.locale}static options(t={}){t.locale&&this.setLocale(t.locale),t.locales&&w(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 ft{}var St,yt,Et,wt,bt,Mt,Tt,Ct,It;ft.DESCRIPTION=Symbol("DESCRIPTION"),ft.ERROR=Symbol("ERROR"),ft.EXAMPLE=Symbol("EXAMPLE"),ft.INDEXES=Symbol("INDEXES"),ft.KEYS=Symbol("KEYS"),ft.LIST=Symbol("LIST"),ft.NAME=Symbol("NAME"),ft.REQUIRED=Symbol("REQUIRED"),ft.SOURCE=Symbol("SOURCE"),ft.TYPE=Symbol("TYPE");class At{constructor(t){this[St]="",this[yt]="",this[Et]=null,this[wt]="",this[bt]="any",this[Mt]=!1,this.rules=[],this.custom=[],this[ft.TYPE]=t}description(t){return this[ft.DESCRIPTION]=t,this}example(t){return this[ft.EXAMPLE]=t,this}empty(t){const e=this.fn(t);return this.unshift(({value:t,context:s})=>{const r=u(t),n=e({value:t,context:s});return{break:!u(n)&&!r,value:r?t:n}})}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 d(t)&&(this[ft.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 o(t)?t:()=>t}from(t){return this[ft.SOURCE]=t,this}invalid(t,e){return t=`[${this[ft.TYPE]}]${t}`,{error:this[ft.ERROR]?this[ft.ERROR]:this[ft.NAME]?this[ft.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[ft.REQUIRED]=!0,this.unshift(({value:e})=>u(e)?{value:e}:this.invalid(".required",t))}test(t){return!d(this.validate(t).error)}async testAsync(t){return!d((await this.validateAsync(t)).error)}toString(){return this[ft.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.break)return{value:s.value};if(s.error?.length)return{error:s.error,...s.message?{message:s.message}:{}}}return{value:s.value}}async validateAsync(t,e){let s=this.validate(t,e);if(s.error)return{error:s.error,...s.message?{message:s.message}:{}};for(let t=0;t<this.custom.length;t++){if(s=await this.custom[t]({value:s.value}),s.break)return{value:s.value,...s.message?{message:s.message}:{}};if(s.error)return{error:s.error,...s.message?{message:s.message}:{}}}return{value:s.value}}}St=ft.NAME,yt=ft.DESCRIPTION,Et=ft.EXAMPLE,ft.SOURCE,wt=ft.ERROR,bt=ft.TYPE,Mt=ft.REQUIRED;class Rt extends At{constructor(){super("any")}}class Ot extends At{constructor(t){super("array"),this[Tt]=[],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[ft.INDEXES].push(s),s?this.push(({value:t})=>{const r=[];s[ft.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[ft.INDEXES].length?this[ft.INDEXES].map(t=>t.model()):this[ft.TYPE]}toString(){return this[ft.INDEXES].length?JSON.stringify(this.model(),null,4):this[ft.TYPE]}}Tt=ft.INDEXES;class Dt extends At{constructor(t){super("boolean"),this.push(({value:e})=>i(e)?{value:e}:this.invalid("",t))}parse(){return this.unshift(({value:t})=>({value:u(t)?y(t):t}))}}class jt extends At{constructor(t){super("date"),this.push(({value:e})=>d(e)&&H(e)||!isNaN(new Date(e).getTime())?{value:e}:this.invalid("",t))}format(t){const e=t;return this.push(({value:t})=>({value:P(e,new Date(t))}))}parse(){return this.unshift(({value:t})=>({value:new Date(t)}))}}class Nt extends At{constructor(t){super("enum"),this[Ct]=[],this.push(({value:e})=>u(e)?{value:e}:this.invalid(`('${this[ft.LIST].join("', '")}')`,t))}list(t,e){const s=t;return s&&this[ft.LIST].push(...s),s?this.push(({value:t})=>-1!=this[ft.LIST].indexOf(t)?{value:t}:this.invalid(`('${this[ft.LIST].join("', '")}')`,e)):this}toString(){return`${this[ft.TYPE]}('${this[ft.LIST].join("', '")}')`}}Ct=ft.LIST;class kt extends At{constructor(t){super("number"),this.push(({value:e})=>h(e)?{value:e}:this.invalid("",t))}between(t,e,s){return this.min(t,s),this.max(e,s)}float(t){return this.push(({value:e})=>c(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 Lt extends At{constructor(t){super("object"),this[It]={},this.push(({value:e})=>g(e)?{value:e}:this.invalid("",t))}keys(t,e){const s=t;return s&&(this[ft.KEYS]={...this[ft.KEYS],...s}),s?this.push(({value:t})=>{const r=[],n={};return Object.keys(s).forEach(a=>{const i=s[a];i[ft.NAME]=i[ft.SOURCE]??a;const{error:o,message:l,value:h}=i.validate(t[i[ft.NAME]],n);!e&&l&&(e=l),o&&r.push(o),u(h)&&(n[a]=h)}),r.length?this.invalid("{ "+r.join(", ")+" }",e):{value:n}}):this}model(){const t={},e=Object.keys(this[ft.KEYS]);return e.length&&e.forEach(e=>t[e]=this[ft.KEYS][e].model()),e.length?t:this[ft.TYPE]}parse(t){return this.unshift(({value:e})=>{if(!g(e))try{e=JSON.parse(e)}catch(e){return this.invalid("",t)}return{value:e}})}toString(){return Object.keys(this[ft.KEYS]).length?JSON.stringify(this.model(),null,4):this[ft.TYPE]}}It=ft.KEYS;class Yt extends At{constructor(t){super("string"),this.push(({value:e})=>d(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:G(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:gt(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:g(t)?JSON.stringify(t):u(t)?t.toString():t}))}required(t){return this[ft.REQUIRED]=!0,this.push(({value:e})=>e.length?{value:e}:this.invalid(".required",t))}regex(t,e){return this.push(({value:s})=>t.test(s)?{value:s}:this.invalid(".regex",e))}replace(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>({value:t.replace(s({value:t,context:r}),e)}))}trim(){return this.push(({value:t})=>({value:t.trim()}))}upperCase(){return this.push(({value:t})=>({value:t.toUpperCase()}))}upperCamelCase(){return this.push(({value:t})=>({value:ut(t)}))}}class Pt{static any(){return new Rt}static array(t,e){return new Ot(e).items(t)}static boolean(t){return new Dt(t)}static date(t){return new jt(t)}static enum(t,e){return new Nt(e).list(t)}static number(t){return new kt(t)}static object(t,e){return new Lt(e).keys(t)}static ref(t,e){return({context:s})=>s&&u(s[t])?s[t]:e}static string(t){return new Yt(t)}test(t,...e){return!d(Pt.validate(t,...e).error)}async testAsync(t,...e){return!d((await Pt.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}clear(){this.events.clear()}count(t){return this.events.get(t)?.size??0}on(t,e){let s=this.events.get(t);return s||(s=new Set,this.events.set(t,s)),s.add(e),{dispose:()=>this.off(t,e)}}once(t,e){const s=this.on(t,t=>{s.dispose(),e(t)});return s}off(t,e){const s=this.events.get(t);s&&(e?(s.delete(e),s.size||this.events.delete(t)):this.events.delete(t))}emit(t,e){const s=this.events.get(t);s&&[...s].forEach(t=>t(e))}async emitAsync(t,e){const s=this.events.get(t);s&&await V([...s],t=>t(e))}async emitSeries(t,e){const s=this.events.get(t);s&&await Z([...s],t=>t(e))}},exports.Hash=class{constructor(t){this.dictionary="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",this.hash=t??"",this.seed=this.hashSeed(),this.dic=this.shuffleString(this.dictionary),this.map=Object.fromEntries([...this.dic].map((t,e)=>[t,e]))}encrypt(t){return this.transform(t,!1)}decrypt(t){return this.transform(t,!0)}transform(t,e){const s=this.dic.length,r=[];for(let n=0;n<t.length;n++){const a=t[n],i=this.map[a];if(void 0===i){r[n]=a;continue}const o=this.hash[n%this.hash.length],l=this.map[o];if(void 0===l){r[n]=a;continue}const u=e?(i-l+s)%s:(i+l)%s;r[n]=this.dic[u]}return r.join("")}hashSeed(){let t=2166136261;for(let e=0;e<this.hash.length;e++)t^=this.hash.charCodeAt(e),t=Math.imul(t,16777619);return t>>>0}seededRandom(t){t=(t|=0)+1831565813|0;let e=Math.imul(t^t>>>15,1|t);return e=e+Math.imul(e^e>>>7,61|e)^e,((e^e>>>14)>>>0)/4294967296}shuffleString(t){const e=t.split(""),s=this.seededRandom(this.seed);for(let t=e.length-1;t>0;t--){const r=Math.floor(s*(t+1));[e[t],e[r]]=[e[r],e[t]]}return e.join("")}},exports.RandomString=ot,exports.Translate=dt,exports.Validation=Pt,exports.ValidationBase=At,exports.ValidationKeys=ft,exports.allowed=(t,e)=>{const s={};for(const r of e)r in t&&(s[r]=t[r]);return s},exports.cache=()=>{const t=new Map;return e=>(t.has(e)||t.set(e,{}),t.get(e)??{})},exports.camelCase=tt,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=vt,exports.colorPalette=(t,e)=>b(e??O,e=>0==e?t:e>0?R(t,e):A(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=P,exports.dateInterval=(t,e,s)=>{const r=new Date(t);s=s??q("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??P("%Y-%m"),r=K(s,"00:00:00");if(!r||!H(r.toISOString().slice(0,10)))return[null,null];const n=e||s;let a=K(n,"23:59:59");return a&&H(a.toISOString().slice(0,10))?(7==n.length&&(a=X(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(et,(t,e)=>st[e]).replace(/&#(\d+);/gi,(t,e)=>String.fromCharCode(parseInt(e,10))),exports.denied=(t,e)=>{const s={},r=new Set(e);for(const e in t)r.has(e)||(s[e]=t[e]);return s},exports.each=(t,e,s)=>a(t)?E(t,e,s):g(t)?w(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=V,exports.forEachIndex=E,exports.forEachKey=w,exports.forEachPage=async t=>{let e=!0;const s=()=>e=!0;let r=1;for(;e;)e=!1,await(t(r,s)?.catch(J)),r+=1},exports.forEachSeries=Z,exports.forLoop=(t,e,s)=>{for(let r=1;r<=t&&!1!==e.call(s,r,t);r++);return t},exports.getConstructor=t=>o(t)?t:t.constructor,exports.hexToRgb=T,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.isConstructor=t=>o(t)&&t.prototype.constructor===t,exports.isDate=l,exports.isDef=u,exports.isDigit=rt,exports.isEmpty=Q,exports.isExtending=(t,e)=>{if(t===e)return!1;let s=Object.getPrototypeOf(t);for(;s;){if(s===e)return!0;s=Object.getPrototypeOf(s)}return!1},exports.isFalse=t=>!B(t),exports.isFloat=c,exports.isFunction=o,exports.isInteger=p,exports.isLetter=nt,exports.isMap=t=>"map"==n(t),exports.isNotEmpty=t=>!Q(t),exports.isNull=t=>null===t,exports.isNumber=h,exports.isObject=g,exports.isPlainObject=m,exports.isRegExp=v,exports.isScalar=t=>-1!=x.indexOf(n(t)),exports.isSet=t=>"set"==n(t),exports.isSpecialChar=at,exports.isString=d,exports.isSymbol=t=>"symbol"==typeof t,exports.isTrue=B,exports.isUndefined=f,exports.isValidDate=H,exports.lastDayDate=X,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=G,exports.map=b,exports.mask=gt,exports.maskMoney=(t,e,s)=>(s++,e=parseInt((e||"0").replace(/\D/g,"")).toString(),mt(t,e.length<s?("0".repeat(s)+e).slice(-1*s):e)),exports.maskReverse=mt,exports.maskTest=(t,e)=>t.length==gt(t,e).length,exports.merge=xt,exports.msToString=t=>{const e=[];return _.forEach(s=>{const r=F[s],n=(t-t%r)/r;n&&(t-=n*r,e.push(n.toString()+s))}),e.join(" ")},exports.noop=J,exports.parseMs=q,exports.parseSize=t=>{if(h(t))return t+"px";const e=(t=>/(-?(?:\d+)?\.?\d+) *(px|%|cm|mm|in|pt|pc|en|ex|ch|rem|vw|vh|vmin|vmax)*/g.exec(t))(t);return e?parseFloat(e[1])+(e[2]||"px"):"0px"},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*D(l,i,r,n,a),j(l,u),u]},exports.shadeColor=A,exports.shuffleArray=s,exports.shuffleString=it,exports.sleep=t=>new Promise(e=>setTimeout(e,q(t))),exports.stringReverse=lt,exports.tintColor=R,exports.toArray=t=>a(t)?t:u(t)?[t]:[],exports.toBool=y,exports.type=n,exports.uniqueArray=t=>t.filter((t,e,s)=>s.indexOf(t)===e),exports.uniqueID=N,exports.upperCamelCase=ut,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),N(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),k(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.26
2
+ * @andrewcaires/utils.js v0.4.28
3
3
  * JavaScript utility library for web and nodejs development
4
4
  * (c) 2026 Andrew Caires
5
5
  * @license: MIT
@@ -40,7 +40,7 @@ type TypeObjectNumber = TypeObject<number>;
40
40
  type TypeObjectNullable<T, K = void> = {
41
41
  [P in keyof T]?: P extends K ? T[P] : TypeNullable<T[P]>;
42
42
  };
43
- type typeObjectSatisfies<T, K = void> = {
43
+ type TypeObjectSatisfies<T, K = void> = {
44
44
  [P in keyof T]?: P extends K ? T[P] : TypeSatisfies<T[P]>;
45
45
  };
46
46
  type TypeObjectString = TypeObject<string>;
@@ -132,15 +132,18 @@ declare const shadeColor: (color: string, intensity: number) => string;
132
132
  declare const tintColor: (color: string, intensity: number) => string;
133
133
 
134
134
  declare class Hash {
135
- private static readonly dictionary;
136
- private key;
137
- constructor(key: string);
135
+ private readonly dic;
136
+ private readonly map;
137
+ private readonly hash;
138
+ private readonly seed;
139
+ private readonly dictionary;
140
+ constructor(hash: string);
138
141
  encrypt(text: string): string;
139
142
  decrypt(text: string): string;
140
- private index;
141
- private result;
142
- private shuffle;
143
- static hex(str: string): string;
143
+ private transform;
144
+ private hashSeed;
145
+ private seededRandom;
146
+ private shuffleString;
144
147
  }
145
148
 
146
149
  declare const uniqueID: (length?: number) => string;
@@ -171,7 +174,7 @@ declare const lastDayDate: (date: Date) => Date;
171
174
 
172
175
  declare const msToString: (ms: number) => string;
173
176
 
174
- declare const parseMs: (str: string) => number;
177
+ declare const parseMs: (value: string | number) => number;
175
178
 
176
179
  interface IDebounceCallbacks {
177
180
  cancel: TypeAnyFunction;
@@ -180,23 +183,24 @@ interface IDebounceCallbacks {
180
183
 
181
184
  declare const debounce: (callback: TypeAnyFunction, ms: number) => IDebounceCallbacks;
182
185
 
183
- type EventCallback = (_data?: any) => void;
186
+ type EventCallback<T, K extends keyof T> = (_arg: T[K]) => void;
184
187
 
185
188
  interface IEventDisposable {
186
189
  dispose: () => void;
187
190
  }
188
191
 
189
- declare class EventEmitter {
190
- private events;
191
- constructor();
192
- on(event: string, callback: EventCallback): IEventDisposable;
193
- once(event: string, callback: EventCallback): IEventDisposable;
194
- off(event: string, callback?: EventCallback): void;
195
- emit(event: string, data?: any): void;
192
+ declare class EventEmitter<T extends TypeAnyObject = TypeAnyObject> {
193
+ private readonly events;
194
+ clear(): void;
195
+ count<K extends keyof T>(event: K): number;
196
+ on<K extends keyof T>(event: K, callback: EventCallback<T, K>): IEventDisposable;
197
+ once<K extends keyof T>(event: K, callback: EventCallback<T, K>): IEventDisposable;
198
+ off<K extends keyof T>(event: K, callback?: EventCallback<T, K>): void;
199
+ emit<K extends keyof T>(event: K, data?: T[K]): void;
200
+ emitAsync<K extends keyof T>(event: K, data?: T[K]): Promise<void>;
201
+ emitSeries<K extends keyof T>(event: K, data?: T[K]): Promise<void>;
196
202
  }
197
203
 
198
- type EventList = Array<EventCallback>;
199
-
200
204
  interface ILoopCallbacks {
201
205
  start: TypeAnyFunction;
202
206
  stop: TypeAnyFunction;
@@ -244,11 +248,11 @@ declare const lerp: (value1: number, value2: number, amount: number) => number;
244
248
 
245
249
  declare const random: (min: number, max: number) => number;
246
250
 
247
- declare const allowed: (allowed: Array<string>, target: TypeAnyObject) => TypeAnyObject;
251
+ declare const allowed: <T extends TypeAnyObject, K extends Array<keyof T>>(target: T, keys: K) => Pick<T, K[number]>;
248
252
 
249
- declare const clone: <T>(value: T) => T;
253
+ declare const clone: <T>(target: T, cache?: WeakMap<WeakKey, any>) => T;
250
254
 
251
- declare const denied: (denied: Array<string>, target: TypeAnyObject) => TypeAnyObject;
255
+ declare const denied: <T extends TypeAnyObject, K extends Array<keyof T>>(target: T, keys: K) => Omit<T, K[number]>;
252
256
 
253
257
  declare const merge: <T = TypeAnyObject>(target: TypeAnyObject, ...sources: Array<TypeAnyObject>) => T;
254
258
 
@@ -261,17 +265,17 @@ declare class AsyncQueue {
261
265
  private run;
262
266
  }
263
267
 
264
- type ForEachCallback<T> = TypeCallback<T, number, Array<T>, void | Promise<void>>;
268
+ type ForEachCallback<T> = TypeCallback<T, number, Array<T>, Promise<any>>;
265
269
 
266
- declare const forEachAsync: <T>(array: Array<T>, callback: ForEachCallback<T>, thisArg?: any) => Promise<void>;
270
+ declare const forEachAsync: <T>(array: Array<T>, callback: ForEachCallback<T>, thisArg?: any, throwOnError?: boolean) => Promise<void>;
267
271
 
268
- type forEachPageCallback = (index: number, next: TypeAnyFunction) => void | Promise<void>;
272
+ type forEachPageCallback = (_index: number, _next: TypeAnyFunction) => void | Promise<void>;
269
273
 
270
274
  declare const forEachPage: (callback: forEachPageCallback) => Promise<void>;
271
275
 
272
- declare const forEachSeries: <T>(array: Array<T>, callback: ForEachCallback<T>, thisArg?: any) => Promise<void>;
276
+ declare const forEachSeries: <T>(array: Array<T>, callback: ForEachCallback<T>, thisArg?: any, throwOnError?: boolean) => Promise<void>;
273
277
 
274
- declare const sleep: (ms: number) => Promise<void>;
278
+ declare const sleep: (ms: string | number) => Promise<void>;
275
279
 
276
280
  declare const camelCase: (str: string, space?: string) => string;
277
281
 
@@ -379,7 +383,7 @@ declare class ValidationBase<T = any> {
379
383
  constructor(type: string);
380
384
  description(value: string): this;
381
385
  example(value: T): this;
382
- empty(value?: T | TypeAnyFunction<T>): this;
386
+ empty(value?: T | null | TypeAnyFunction<T | null>): this;
383
387
  equal(value: T | ValidationFunction<T>, message?: string): this;
384
388
  error(value?: string): this;
385
389
  filter(...values: Array<T>): this;
@@ -411,6 +415,10 @@ interface IValidationInput<T = any> extends IValidationOutput<T> {
411
415
  value: T;
412
416
  }
413
417
 
418
+ declare class ValidationAny extends ValidationBase<any> {
419
+ constructor();
420
+ }
421
+
414
422
  declare class ValidationArray extends ValidationBase<Array<any>> {
415
423
  private [ValidationKeys.INDEXES];
416
424
  constructor(message?: string);
@@ -480,6 +488,7 @@ declare class ValidationString extends ValidationBase<string> {
480
488
  }
481
489
 
482
490
  declare class Validation {
491
+ static any(): ValidationAny;
483
492
  static array(value?: ValidationBase, message?: string): ValidationArray;
484
493
  static boolean(message?: string): ValidationBoolean;
485
494
  static date(message?: string): ValidationDate;
@@ -497,4 +506,4 @@ declare class Validation {
497
506
  type ValidationCallbackAsync<T = any> = (_value: IValidationInput<T>) => Promise<IValidationOutput<T>>;
498
507
 
499
508
  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, getConstructor, hexToRgb, hslToRgb, inArray, includesArray, isArray, isBoolean, isCharacter, isConstructor, isDate, isDef, isDigit, isEmpty, isExtending, 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 };
500
- 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 };
509
+ export type { AsyncQueueTask, CacheCallback, EachCallback, EachValue, EventCallback, 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, TypeObjectSatisfies, TypeObjectString, TypeSatisfies, TypeScalar, TypeUndefined, ValidationCallback, ValidationCallbackAsync, ValidationFunction, forEachPageCallback };
package/dist/index.esm.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /*!
2
- * @andrewcaires/utils.js v0.4.26
2
+ * @andrewcaires/utils.js v0.4.28
3
3
  * JavaScript utility library for web and nodejs development
4
4
  * (c) 2026 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=>"function"==typeof t,d=t=>m(t)&&t.prototype.constructor===t,f=t=>"date"==p(t),S=t=>"null"!=p(t),y=t=>"number"==p(t),x=t=>y(t)&&!!(t%1),E=t=>y(t)&&!(t%1),w=t=>"map"==p(t),b=t=>null===t,I=t=>"object"==p(t),M=t=>I(t)&&t.constructor===Object,O=t=>"regexp"==p(t),C=["boolean","number","string"],T=t=>-1!=C.indexOf(p(t)),R=t=>"set"==p(t),D=t=>"string"==typeof t,j=t=>"symbol"==typeof t,A=t=>void 0===t,k=t=>v(t)?t:S(t)?[t]:[],N=t=>t.filter((t,e,s)=>s.indexOf(t)===e),Y=[1,"1",!0,"true"],U=t=>-1!=Y.indexOf(t),L=()=>{const t=new Map;return e=>(t.has(e)||t.set(e,{}),t.get(e)??{})},P=t=>m(t)?t:t.constructor,$=(t,e)=>{if(t===e)return!1;let s=Object.getPrototypeOf(t);for(;s;){if(s===e)return!0;s=Object.getPrototypeOf(s)}return!1},q=(t,e,s)=>{for(let r=0;r<t.length&&!1!==e.call(s,t[r],r,t);r++);return t},F=(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},X=(t,e,s)=>v(t)?q(t,e,s):I(t)?F(t,e,s):t,_=(t,e,s)=>{for(let r=1;r<=t&&!1!==e.call(s,r,t);r++);return t},K=(t,e,s)=>Object.fromEntries(Object.entries(t).map(([r,n])=>[r,e.call(s,n,r,t)])),H=t=>parseInt(t??"0",16)||0,Q=t=>t.replace(/^#/,"").match(/.{1,2}/g)?.map(H)||[],J=t=>("0"+t.toString(16)).slice(-2),Z=(t,e,s)=>"#"+J(t)+J(e)+J(s),z=(t,e)=>{const s=Q(t);e=i(e,0,1);const[r,n,a]=s.map(t=>Math.round(t*e));return Z(r,n,a)},B=(t,e)=>{const s=Q(t);e=i(e,0,1);const[r,n,a]=s.map(t=>Math.round(t+(255-t)*e));return Z(r,n,a)},W={50:.95,100:.9,200:.75,300:.6,400:.3,500:0,600:-.1,700:-.25,800:-.4,900:-.55,950:-.71},G=(t,e)=>K(e??W,e=>0==e?t:e>0?B(t,e):z(t,1- -1*e)),V=(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))]},tt=(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,et=(t,e)=>0===t?0:t/(1-Math.abs(2*e-1)),st=(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*tt(u,a,r,n,i),et(u,h),h]};class rt{constructor(t){this.key=this.shuffle(rt.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[rt.dictionary.indexOf(t[s]),rt.dictionary.indexOf(e[s%e.length])]}result(t,e,s){return rt.dictionary[(s?t-e+rt.dictionary.length:t+e)%rt.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")}}rt.dictionary="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";const nt=(t=64)=>Array(Math.ceil(t/2)).fill(0).map(()=>l(0,255).toString(16).padStart(2,"0")).join("").slice(0,t),it=()=>{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),nt(12)].join("-")},at=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)},lt=()=>{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("-")},ut=()=>{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("-")},ht=t=>parseInt(t.replace(/-/g,"").slice(0,12),16),ot=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),rt.hex(t??"").slice(4),r.slice(16)].join("-")},ct=t=>("0"+t.toString()).slice(-2),pt={"%y":(t,e)=>ct(e?t.getUTCFullYear():t.getFullYear()),"%Y":(t,e)=>(e?t.getUTCFullYear():t.getFullYear()).toString(),"%m":(t,e)=>ct((e?t.getUTCMonth():t.getMonth())+1),"%d":(t,e)=>ct(e?t.getUTCDate():t.getDate()),"%H":(t,e)=>ct(e?t.getUTCHours():t.getHours()),"%M":(t,e)=>ct(e?t.getUTCMinutes():t.getMinutes()),"%S":(t,e)=>ct(e?t.getUTCSeconds():t.getSeconds())},vt=(t,e,s)=>(e=e??new Date,t.replace(/%[yYmdHMS]/g,t=>pt[t]?pt[t](e,s):t.slice(1))),gt=36e5,mt=24*gt,dt={ms:1,s:1e3,m:6e4,h:gt,d:mt,w:7*mt,y:315576e5},ft=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])*dt[s[2]]||0;return r},St=(t,e,s)=>{const r=new Date(t);s=s??ft("1d");const n=[];for(;r<e;)r.setTime(r.getTime()+s),n.push(new Date(r));return n},yt=t=>{const e=new Date(t);return e.getTime()==e.getTime()&&t==e.toISOString().slice(0,10)},xt=t=>new Date(t.getFullYear(),t.getMonth()+1,0,t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()),Et=(t,e)=>/^([\d]{4})-([\d]{2})-([\d]{2})$/.test(t)?yt(t)?new Date(`${t} ${e}`):null:/^([\d]{4})-([\d]{2})$/.test(t)&&yt(t=`${t}-01`)?new Date(`${t} ${e}`):null,wt=(t,e)=>{const s=t??vt("%Y-%m"),r=Et(s,"00:00:00");if(!r||!yt(r.toISOString().slice(0,10)))return[null,null];const n=e||s;let i=Et(n,"23:59:59");return i&&yt(i.toISOString().slice(0,10))?(7==n.length&&(i=xt(i)),r>i?[null,null]:[r,i]):[r,null]},bt=t=>new Date(t.getFullYear(),t.getMonth(),1,t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()),It=["y","d","h","m","s","ms"],Mt=t=>{const e=[];return It.forEach(s=>{const r=dt[s],n=(t-t%r)/r;n&&(t-=n*r,e.push(n.toString()+s))}),e.join(" ")},Ot=(t,e)=>{let s;const r=()=>{s&&clearTimeout(s)};return{cancel:r,run(...n){r(),s=setTimeout(()=>t(...n),e)}}};class Ct{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 Tt=(t,e)=>{let s=!1;const r=async()=>{s&&(await t(),setTimeout(r,e))};return{start(){s||(s=!0,r())},stop(){s=!1}}},Rt=t=>0==(t?.length??0),Dt=["",0,"0",null,!1,void 0],jt=t=>-1==Dt.indexOf(t),At=t=>!jt(t),kt=t=>!Rt(t),Nt=()=>{},Yt=(t,e,s)=>e(t.toLowerCase().replace(/\W+/g," ")).replace(/\s/g,s??""),Ut=(t,e)=>Yt(t,t=>t.replace(/\s(\w)/g,t=>t.toUpperCase()),e),Lt=Ut,Pt=(t,e)=>{if(t.length>e){const s=t.substring(0,e).split(" ");return s.pop(),s.join(" ")+"..."}return t},$t=/&(amp|apos|lt|gt|nbsp|quot);/g,qt={amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",quot:'"'},Ft=t=>t.replace($t,(t,e)=>qt[e]).replace(/&#(\d+);/gi,(t,e)=>String.fromCharCode(parseInt(e,10))),Xt=t=>t.replace(/[^0-9A-Za-z ]/g,t=>"&#"+t.charCodeAt(0)+";"),_t=t=>/^[\w]$/.test(t),Kt=t=>/^[\d]$/.test(t),Ht=t=>/^[A-Za-z]$/.test(t),Qt=t=>/^[^\w]$/.test(t),Jt=t=>{if(y(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"},Zt=t=>t.split("").map(t=>Math.random()<.5?t.toUpperCase():t.toLowerCase()).join(""),zt=t=>o(t.split("")).join("");class Bt{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 Bt).chars()}lower(){return this.hasLower=!0,this}static lower(){return(new Bt).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=zt(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 Bt).numbers()}space(){return this.hasSpace=!0,this}static space(){return(new Bt).space()}symbols(){return this.hasSymbols=!0,this}static symbols(){return(new Bt).symbols()}upper(){return this.hasUpper=!0,this}static upper(){return(new Bt).upper()}}const Wt=t=>t.split("").reverse().join(""),Gt=(t,e)=>Yt(t,t=>t.replace(/(\w)(\w*)/g,(t,e,s)=>e.toUpperCase()+s),e),Vt=(t,e)=>e(t.value)?t.value:(t=>(t.maskIndex--,""))(t),te={"#":t=>t.value,0:t=>Vt(t,Kt),9:t=>Vt(t,Kt),A:t=>Vt(t,Ht),Z:t=>Vt(t,Ht),L:t=>Vt(t,Ht).toLowerCase(),U:t=>Vt(t,Ht).toUpperCase(),S:t=>Vt(t,Qt)},ee=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=>te[t.key]?te[t.key](t):(t.key!=t.value&&t.textIndex--,t.key))(t)+ee(t)},se=(t,e)=>ee({mask:t,maskIndex:-1,text:e,textIndex:-1,key:"",value:""}),re=(t,e)=>Wt(se(Wt(t),Wt(e))),ne=(t,e,s)=>(s++,e=parseInt((e||"0").replace(/\D/g,"")).toString(),re(t,e.length<s?("0".repeat(s)+e).slice(-1*s):e)),ie=(t,e)=>t.length==se(t,e).length,ae=(t,e)=>t.reduce((t,s)=>({...t,[s]:e[s]}),{}),le=t=>t instanceof Date?new Date(t.getTime()):v(t)?t.map(t=>le(t)):I(t)?K(t,t=>le(t)):t,ue=(t,e)=>ae(Object.keys(e).filter(e=>-1==t.indexOf(e)),e),he=(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]=he(t[e],s[e])):t={...t,[e]:s[e]};return he(t,...e)};class oe{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 ce=async(t,e,s)=>{await Promise.allSettled(t.map((r,n)=>e.call(s,r,n,t)?.catch(Nt))).catch(Nt)},pe=async t=>{let e=!0;const s=()=>e=!0;let r=1;for(;e;)e=!1,await(t(r,s)?.catch(Nt)),r+=1},ve=async(t,e,s)=>{for(let r=0;r<t.length;r++)await(e.call(s,t[r],r,t)?.catch(Nt))},ge=t=>new Promise(e=>setTimeout(e,t));class me{static getLocale(){return this.locale}static options(t={}){t.locale&&this.setLocale(t.locale),t.locales&&F(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}}me.locales={};class de{}var fe,Se,ye,xe,Ee,we,be,Ie,Me;de.DESCRIPTION=Symbol("DESCRIPTION"),de.ERROR=Symbol("ERROR"),de.EXAMPLE=Symbol("EXAMPLE"),de.INDEXES=Symbol("INDEXES"),de.KEYS=Symbol("KEYS"),de.LIST=Symbol("LIST"),de.NAME=Symbol("NAME"),de.REQUIRED=Symbol("REQUIRED"),de.SOURCE=Symbol("SOURCE"),de.TYPE=Symbol("TYPE");class Oe{constructor(t){this[fe]="",this[Se]="",this[ye]=null,this[xe]="",this[Ee]="any",this[we]=!1,this.rules=[],this.custom=[],this[de.TYPE]=t}description(t){return this[de.DESCRIPTION]=t,this}example(t){return this[de.EXAMPLE]=t,this}empty(t){const e=this.fn(t);return this.unshift(({value:t,context:s})=>{const r=S(t),n=e({value:t,context:s});return{break:!S(n)&&!r,value:r?t:n}})}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 D(t)&&(this[de.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 m(t)?t:()=>t}from(t){return this[de.SOURCE]=t,this}invalid(t,e){return t=`[${this[de.TYPE]}]${t}`,{error:this[de.ERROR]?this[de.ERROR]:this[de.NAME]?this[de.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[de.REQUIRED]=!0,this.unshift(({value:e})=>S(e)?{value:e}:this.invalid(".required",t))}test(t){return!D(this.validate(t).error)}async testAsync(t){return!D((await this.validateAsync(t)).error)}toString(){return this[de.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.break)return{value:s.value};if(s.error?.length)return{error:s.error,...s.message?{message:s.message}:{}}}return{value:s.value}}async validateAsync(t,e){let s=this.validate(t,e);if(s.error)return{error:s.error,...s.message?{message:s.message}:{}};for(let t=0;t<this.custom.length;t++){if(s=await this.custom[t]({value:s.value}),s.break)return{value:s.value,...s.message?{message:s.message}:{}};if(s.error)return{error:s.error,...s.message?{message:s.message}:{}}}return{value:s.value}}}fe=de.NAME,Se=de.DESCRIPTION,ye=de.EXAMPLE,de.SOURCE,xe=de.ERROR,Ee=de.TYPE,we=de.REQUIRED;class Ce extends Oe{constructor(t){super("array"),this[be]=[],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[de.INDEXES].push(s),s?this.push(({value:t})=>{const r=[];s[de.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[de.INDEXES].length?this[de.INDEXES].map(t=>t.model()):this[de.TYPE]}toString(){return this[de.INDEXES].length?JSON.stringify(this.model(),null,4):this[de.TYPE]}}be=de.INDEXES;class Te extends Oe{constructor(t){super("boolean"),this.push(({value:e})=>g(e)?{value:e}:this.invalid("",t))}parse(){return this.unshift(({value:t})=>({value:S(t)?U(t):t}))}}class Re extends Oe{constructor(t){super("date"),this.push(({value:e})=>D(e)&&yt(e)||!isNaN(new Date(e).getTime())?{value:e}:this.invalid("",t))}format(t){const e=t;return this.push(({value:t})=>({value:vt(e,new Date(t))}))}parse(){return this.unshift(({value:t})=>({value:new Date(t)}))}}class De extends Oe{constructor(t){super("enum"),this[Ie]=[],this.push(({value:e})=>S(e)?{value:e}:this.invalid(`('${this[de.LIST].join("', '")}')`,t))}list(t,e){const s=t;return s&&this[de.LIST].push(...s),s?this.push(({value:t})=>-1!=this[de.LIST].indexOf(t)?{value:t}:this.invalid(`('${this[de.LIST].join("', '")}')`,e)):this}toString(){return`${this[de.TYPE]}('${this[de.LIST].join("', '")}')`}}Ie=de.LIST;class je extends Oe{constructor(t){super("number"),this.push(({value:e})=>y(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})=>x(e)?{value:e}:this.invalid(".float",t))}integer(t){return this.push(({value:e})=>E(e)?{value:e}:this.invalid(".integer",t))}max(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t<=n?{value:t}:this.invalid(`.max(${n})`,e)})}min(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t>=n?{value:t}:this.invalid(`.min(${n})`,e)})}parse(){return this.unshift(({value:t})=>({value:S(t)?parseFloat(t.toString()):t}))}}class Ae extends Oe{constructor(t){super("object"),this[Me]={},this.push(({value:e})=>I(e)?{value:e}:this.invalid("",t))}keys(t,e){const s=t;return s&&(this[de.KEYS]={...this[de.KEYS],...s}),s?this.push(({value:t})=>{const r=[],n={};return Object.keys(s).forEach(i=>{const a=s[i];a[de.NAME]=a[de.SOURCE]??i;const{error:l,message:u,value:h}=a.validate(t[a[de.NAME]],n);!e&&u&&(e=u),l&&r.push(l),S(h)&&(n[i]=h)}),r.length?this.invalid("{ "+r.join(", ")+" }",e):{value:n}}):this}model(){const t={},e=Object.keys(this[de.KEYS]);return e.length&&e.forEach(e=>t[e]=this[de.KEYS][e].model()),e.length?t:this[de.TYPE]}parse(t){return this.unshift(({value:e})=>{if(!I(e))try{e=JSON.parse(e)}catch(e){return this.invalid("",t)}return{value:e}})}toString(){return Object.keys(this[de.KEYS]).length?JSON.stringify(this.model(),null,4):this[de.TYPE]}}Me=de.KEYS;class ke extends Oe{constructor(t){super("string"),this.push(({value:e})=>D(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:Ut(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:se(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:I(t)?JSON.stringify(t):S(t)?t.toString():t}))}required(t){return this[de.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:Gt(t)}))}}class Ne{static array(t,e){return new Ce(e).items(t)}static boolean(t){return new Te(t)}static date(t){return new Re(t)}static enum(t,e){return new De(e).list(t)}static number(t){return new je(t)}static object(t,e){return new Ae(e).keys(t)}static ref(t,e){return({context:s})=>s&&S(s[t])?s[t]:e}static string(t){return new ke(t)}test(t,...e){return!D(Ne.validate(t,...e).error)}async testAsync(t,...e){return!D((await Ne.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{oe as AsyncQueue,Ct as EventEmitter,rt as Hash,Bt as RandomString,me as Translate,Ne as Validation,Oe as ValidationBase,de as ValidationKeys,ae as allowed,L as cache,Lt as camelCase,t as chunkArray,i as clamp,le as clone,G as colorPalette,e as compareArray,s as countArray,Pt as cutText,vt as dateFormat,St as dateInterval,wt as dateRange,Ot as debounce,Ft as decodeHTML,ue as denied,X as each,Xt as encodeHTML,bt as firstDayDate,ce as forEachAsync,q as forEachIndex,F as forEachKey,pe as forEachPage,ve as forEachSeries,_ as forLoop,P as getConstructor,Q as hexToRgb,V as hslToRgb,r as inArray,n as includesArray,v as isArray,g as isBoolean,_t as isCharacter,d as isConstructor,f as isDate,S as isDef,Kt as isDigit,Rt as isEmpty,$ as isExtending,At as isFalse,x as isFloat,m as isFunction,E as isInteger,Ht as isLetter,w as isMap,kt as isNotEmpty,b as isNull,y as isNumber,I as isObject,M as isPlainObject,O as isRegExp,T as isScalar,R as isSet,Qt as isSpecialChar,D as isString,j as isSymbol,jt as isTrue,A as isUndefined,yt as isValidDate,xt as lastDayDate,a as lerp,Tt as loop,Ut as lowerCamelCase,K as map,se as mask,ne as maskMoney,re as maskReverse,ie as maskTest,he as merge,Mt as msToString,Nt as noop,ft as parseMs,Jt as parseSize,l as random,Zt as randomCase,u as randomElement,h as rangeArray,Z as rgbToHex,st as rgbToHsl,z as shadeColor,o as shuffleArray,zt as shuffleString,ge as sleep,Wt as stringReverse,B as tintColor,k as toArray,U as toBool,p as type,N as uniqueArray,nt as uniqueID,Gt as upperCamelCase,it as uuidv1,at as uuidv1ToTimestamp,lt as uuidv4,ut as uuidv7,ht as uuidv7ToTimestamp,ot 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=>"function"==typeof t,d=t=>m(t)&&t.prototype.constructor===t,f=t=>"date"==p(t),S=t=>"null"!=p(t),E=t=>"number"==p(t),y=t=>E(t)&&!!(t%1),w=t=>E(t)&&!(t%1),x=t=>"map"==p(t),b=t=>null===t,M=t=>"object"==p(t),I=t=>M(t)&&t.constructor===Object,O=t=>"regexp"==p(t),C=["boolean","number","string"],R=t=>-1!=C.indexOf(p(t)),T=t=>"set"==p(t),A=t=>"string"==typeof t,j=t=>"symbol"==typeof t,D=t=>void 0===t,N=t=>v(t)?t:S(t)?[t]:[],Y=t=>t.filter((t,e,s)=>s.indexOf(t)===e),k=[1,"1",!0,"true"],U=t=>-1!=k.indexOf(t),L=()=>{const t=new Map;return e=>(t.has(e)||t.set(e,{}),t.get(e)??{})},P=t=>m(t)?t:t.constructor,$=(t,e)=>{if(t===e)return!1;let s=Object.getPrototypeOf(t);for(;s;){if(s===e)return!0;s=Object.getPrototypeOf(s)}return!1},q=(t,e,s)=>{for(let r=0;r<t.length&&!1!==e.call(s,t[r],r,t);r++);return t},F=(t,e,s)=>{for(const r in t)if(!1===e.call(s,t[r],r,t))break;return t},X=(t,e,s)=>v(t)?q(t,e,s):M(t)?F(t,e,s):t,_=(t,e,s)=>{for(let r=1;r<=t&&!1!==e.call(s,r,t);r++);return t},K=(t,e,s)=>Object.fromEntries(Object.entries(t).map(([r,n])=>[r,e.call(s,n,r,t)])),H=t=>parseInt(t??"0",16)||0,Q=t=>t.replace(/^#/,"").match(/.{1,2}/g)?.map(H)||[],z=t=>("0"+t.toString(16)).slice(-2),J=(t,e,s)=>"#"+z(t)+z(e)+z(s),Z=(t,e)=>{const s=Q(t);e=i(e,0,1);const[r,n,a]=s.map(t=>Math.round(t*e));return J(r,n,a)},W=(t,e)=>{const s=Q(t);e=i(e,0,1);const[r,n,a]=s.map(t=>Math.round(t+(255-t)*e));return J(r,n,a)},B={50:.95,100:.9,200:.75,300:.6,400:.3,500:0,600:-.1,700:-.25,800:-.4,900:-.55,950:-.71},G=(t,e)=>K(e??B,e=>0==e?t:e>0?W(t,e):Z(t,1- -1*e)),V=(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))]},tt=(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,et=(t,e)=>0===t?0:t/(1-Math.abs(2*e-1)),st=(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*tt(u,a,r,n,i),et(u,h),h]};class rt{constructor(t){this.dictionary="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",this.hash=t??"",this.seed=this.hashSeed(),this.dic=this.shuffleString(this.dictionary),this.map=Object.fromEntries([...this.dic].map((t,e)=>[t,e]))}encrypt(t){return this.transform(t,!1)}decrypt(t){return this.transform(t,!0)}transform(t,e){const s=this.dic.length,r=[];for(let n=0;n<t.length;n++){const i=t[n],a=this.map[i];if(void 0===a){r[n]=i;continue}const l=this.hash[n%this.hash.length],u=this.map[l];if(void 0===u){r[n]=i;continue}const h=e?(a-u+s)%s:(a+u)%s;r[n]=this.dic[h]}return r.join("")}hashSeed(){let t=2166136261;for(let e=0;e<this.hash.length;e++)t^=this.hash.charCodeAt(e),t=Math.imul(t,16777619);return t>>>0}seededRandom(t){t=(t|=0)+1831565813|0;let e=Math.imul(t^t>>>15,1|t);return e=e+Math.imul(e^e>>>7,61|e)^e,((e^e>>>14)>>>0)/4294967296}shuffleString(t){const e=t.split(""),s=this.seededRandom(this.seed);for(let t=e.length-1;t>0;t--){const r=Math.floor(s*(t+1));[e[t],e[r]]=[e[r],e[t]]}return e.join("")}}const nt=(t=64)=>Array(Math.ceil(t/2)).fill(0).map(()=>l(0,255).toString(16).padStart(2,"0")).join("").slice(0,t),it=()=>{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),nt(12)].join("-")},at=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)},lt=()=>{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("-")},ut=()=>{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("-")},ht=t=>parseInt(t.replace(/-/g,"").slice(0,12),16),ot=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")},ct=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),ot(t??"").slice(4),r.slice(16)].join("-")},pt=t=>("0"+t.toString()).slice(-2),vt={"%y":(t,e)=>pt(e?t.getUTCFullYear():t.getFullYear()),"%Y":(t,e)=>(e?t.getUTCFullYear():t.getFullYear()).toString(),"%m":(t,e)=>pt((e?t.getUTCMonth():t.getMonth())+1),"%d":(t,e)=>pt(e?t.getUTCDate():t.getDate()),"%H":(t,e)=>pt(e?t.getUTCHours():t.getHours()),"%M":(t,e)=>pt(e?t.getUTCMinutes():t.getMinutes()),"%S":(t,e)=>pt(e?t.getUTCSeconds():t.getSeconds())},gt=(t,e,s)=>(e=e??new Date,t.replace(/%[yYmdHMS]/g,t=>vt[t]?vt[t](e,s):t.slice(1))),mt=36e5,dt=24*mt,ft={ms:1,s:1e3,m:6e4,h:mt,d:dt,w:7*dt,y:315576e5},St=t=>{if(E(t))return 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])*ft[s[2]]||0;return r},Et=(t,e,s)=>{const r=new Date(t);s=s??St("1d");const n=[];for(;r<e;)r.setTime(r.getTime()+s),n.push(new Date(r));return n},yt=t=>{const e=new Date(t);return e.getTime()==e.getTime()&&t==e.toISOString().slice(0,10)},wt=t=>new Date(t.getFullYear(),t.getMonth()+1,0,t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()),xt=(t,e)=>/^([\d]{4})-([\d]{2})-([\d]{2})$/.test(t)?yt(t)?new Date(`${t} ${e}`):null:/^([\d]{4})-([\d]{2})$/.test(t)&&yt(t=`${t}-01`)?new Date(`${t} ${e}`):null,bt=(t,e)=>{const s=t??gt("%Y-%m"),r=xt(s,"00:00:00");if(!r||!yt(r.toISOString().slice(0,10)))return[null,null];const n=e||s;let i=xt(n,"23:59:59");return i&&yt(i.toISOString().slice(0,10))?(7==n.length&&(i=wt(i)),r>i?[null,null]:[r,i]):[r,null]},Mt=t=>new Date(t.getFullYear(),t.getMonth(),1,t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()),It=["y","d","h","m","s","ms"],Ot=t=>{const e=[];return It.forEach(s=>{const r=ft[s],n=(t-t%r)/r;n&&(t-=n*r,e.push(n.toString()+s))}),e.join(" ")},Ct=(t,e)=>{let s;const r=()=>{s&&clearTimeout(s)};return{cancel:r,run(...n){r(),s=setTimeout(()=>t(...n),e)}}};class Rt{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 Tt=t=>0==(t?.length??0),At=["",0,"0",null,!1,void 0],jt=t=>-1==At.indexOf(t),Dt=t=>!jt(t),Nt=t=>!Tt(t),Yt=()=>{},kt=async(t,e,s,r=!0)=>{const n=[];if(await Promise.allSettled(t.map((i,a)=>e.call(s,i,a,t)?.catch(r?t=>{n.push(t)}:Yt))),r&&n.length)throw new AggregateError(n,"Errors occurred in forEachAsync")},Ut=async t=>{let e=!0;const s=()=>e=!0;let r=1;for(;e;)e=!1,await(t(r,s)?.catch(Yt)),r+=1},Lt=async(t,e,s,r=!0)=>{const n=[];for(let i=0;i<t.length;i++)await e.call(s,t[i],i,t).catch(r?t=>{n.push(t)}:Yt);if(r&&n.length)throw new AggregateError(n,"Errors occurred in forEachSeries")},Pt=t=>new Promise(e=>setTimeout(e,St(t)));class $t{constructor(){this.events=new Map}clear(){this.events.clear()}count(t){return this.events.get(t)?.size??0}on(t,e){let s=this.events.get(t);return s||(s=new Set,this.events.set(t,s)),s.add(e),{dispose:()=>this.off(t,e)}}once(t,e){const s=this.on(t,t=>{s.dispose(),e(t)});return s}off(t,e){const s=this.events.get(t);s&&(e?(s.delete(e),s.size||this.events.delete(t)):this.events.delete(t))}emit(t,e){const s=this.events.get(t);s&&[...s].forEach(t=>t(e))}async emitAsync(t,e){const s=this.events.get(t);s&&await kt([...s],t=>t(e))}async emitSeries(t,e){const s=this.events.get(t);s&&await Lt([...s],t=>t(e))}}const qt=(t,e)=>{let s=!1;const r=async()=>{s&&(await t(),setTimeout(r,e))};return{start(){s||(s=!0,r())},stop(){s=!1}}},Ft=(t,e,s)=>e(t.toLowerCase().replace(/\W+/g," ")).replace(/\s/g,s??""),Xt=(t,e)=>Ft(t,t=>t.replace(/\s(\w)/g,t=>t.toUpperCase()),e),_t=Xt,Kt=(t,e)=>{if(t.length>e){const s=t.substring(0,e).split(" ");return s.pop(),s.join(" ")+"..."}return t},Ht=/&(amp|apos|lt|gt|nbsp|quot);/g,Qt={amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",quot:'"'},zt=t=>t.replace(Ht,(t,e)=>Qt[e]).replace(/&#(\d+);/gi,(t,e)=>String.fromCharCode(parseInt(e,10))),Jt=t=>t.replace(/[^0-9A-Za-z ]/g,t=>"&#"+t.charCodeAt(0)+";"),Zt=t=>/^[\w]$/.test(t),Wt=t=>/^[\d]$/.test(t),Bt=t=>/^[A-Za-z]$/.test(t),Gt=t=>/^[^\w]$/.test(t),Vt=t=>{if(E(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"},te=t=>t.split("").map(t=>Math.random()<.5?t.toUpperCase():t.toLowerCase()).join(""),ee=t=>o(t.split("")).join("");class se{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 se).chars()}lower(){return this.hasLower=!0,this}static lower(){return(new se).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=ee(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 se).numbers()}space(){return this.hasSpace=!0,this}static space(){return(new se).space()}symbols(){return this.hasSymbols=!0,this}static symbols(){return(new se).symbols()}upper(){return this.hasUpper=!0,this}static upper(){return(new se).upper()}}const re=t=>t.split("").reverse().join(""),ne=(t,e)=>Ft(t,t=>t.replace(/(\w)(\w*)/g,(t,e,s)=>e.toUpperCase()+s),e),ie=(t,e)=>e(t.value)?t.value:(t=>(t.maskIndex--,""))(t),ae={"#":t=>t.value,0:t=>ie(t,Wt),9:t=>ie(t,Wt),A:t=>ie(t,Bt),Z:t=>ie(t,Bt),L:t=>ie(t,Bt).toLowerCase(),U:t=>ie(t,Bt).toUpperCase(),S:t=>ie(t,Gt)},le=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=>ae[t.key]?ae[t.key](t):(t.key!=t.value&&t.textIndex--,t.key))(t)+le(t)},ue=(t,e)=>le({mask:t,maskIndex:-1,text:e,textIndex:-1,key:"",value:""}),he=(t,e)=>re(ue(re(t),re(e))),oe=(t,e,s)=>(s++,e=parseInt((e||"0").replace(/\D/g,"")).toString(),he(t,e.length<s?("0".repeat(s)+e).slice(-1*s):e)),ce=(t,e)=>t.length==ue(t,e).length,pe=(t,e)=>{const s={};for(const r of e)r in t&&(s[r]=t[r]);return s},ve=(t,e=new WeakMap)=>{if(!S(t))return t;if(f(t))return new Date(t.getTime());if(O(t))return new RegExp(t.source,t.flags);if(e.has(t))return e.get(t);if(v(t)){const s=[];return e.set(t,s),s.push(...t.map(t=>ve(t,e))),s}if(M(t)){const s={};return e.set(t,s),Object.assign(s,K(t,t=>ve(t,e))),s}return t},ge=(t,e)=>{const s={},r=new Set(e);for(const e in t)r.has(e)||(s[e]=t[e]);return s},me=(t,...e)=>I(t)?(e.forEach(e=>{I(e)&&Object.entries(e).forEach(([e,s])=>{t[e]=I(s)?me(t[e]??{},s):s})}),t):t;class de{static getLocale(){return this.locale}static options(t={}){t.locale&&this.setLocale(t.locale),t.locales&&F(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}}de.locales={};class fe{}var Se,Ee,ye,we,xe,be,Me,Ie,Oe;fe.DESCRIPTION=Symbol("DESCRIPTION"),fe.ERROR=Symbol("ERROR"),fe.EXAMPLE=Symbol("EXAMPLE"),fe.INDEXES=Symbol("INDEXES"),fe.KEYS=Symbol("KEYS"),fe.LIST=Symbol("LIST"),fe.NAME=Symbol("NAME"),fe.REQUIRED=Symbol("REQUIRED"),fe.SOURCE=Symbol("SOURCE"),fe.TYPE=Symbol("TYPE");class Ce{constructor(t){this[Se]="",this[Ee]="",this[ye]=null,this[we]="",this[xe]="any",this[be]=!1,this.rules=[],this.custom=[],this[fe.TYPE]=t}description(t){return this[fe.DESCRIPTION]=t,this}example(t){return this[fe.EXAMPLE]=t,this}empty(t){const e=this.fn(t);return this.unshift(({value:t,context:s})=>{const r=S(t),n=e({value:t,context:s});return{break:!S(n)&&!r,value:r?t:n}})}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 A(t)&&(this[fe.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 m(t)?t:()=>t}from(t){return this[fe.SOURCE]=t,this}invalid(t,e){return t=`[${this[fe.TYPE]}]${t}`,{error:this[fe.ERROR]?this[fe.ERROR]:this[fe.NAME]?this[fe.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[fe.REQUIRED]=!0,this.unshift(({value:e})=>S(e)?{value:e}:this.invalid(".required",t))}test(t){return!A(this.validate(t).error)}async testAsync(t){return!A((await this.validateAsync(t)).error)}toString(){return this[fe.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.break)return{value:s.value};if(s.error?.length)return{error:s.error,...s.message?{message:s.message}:{}}}return{value:s.value}}async validateAsync(t,e){let s=this.validate(t,e);if(s.error)return{error:s.error,...s.message?{message:s.message}:{}};for(let t=0;t<this.custom.length;t++){if(s=await this.custom[t]({value:s.value}),s.break)return{value:s.value,...s.message?{message:s.message}:{}};if(s.error)return{error:s.error,...s.message?{message:s.message}:{}}}return{value:s.value}}}Se=fe.NAME,Ee=fe.DESCRIPTION,ye=fe.EXAMPLE,fe.SOURCE,we=fe.ERROR,xe=fe.TYPE,be=fe.REQUIRED;class Re extends Ce{constructor(){super("any")}}class Te extends Ce{constructor(t){super("array"),this[Me]=[],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[fe.INDEXES].push(s),s?this.push(({value:t})=>{const r=[];s[fe.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[fe.INDEXES].length?this[fe.INDEXES].map(t=>t.model()):this[fe.TYPE]}toString(){return this[fe.INDEXES].length?JSON.stringify(this.model(),null,4):this[fe.TYPE]}}Me=fe.INDEXES;class Ae extends Ce{constructor(t){super("boolean"),this.push(({value:e})=>g(e)?{value:e}:this.invalid("",t))}parse(){return this.unshift(({value:t})=>({value:S(t)?U(t):t}))}}class je extends Ce{constructor(t){super("date"),this.push(({value:e})=>A(e)&&yt(e)||!isNaN(new Date(e).getTime())?{value:e}:this.invalid("",t))}format(t){const e=t;return this.push(({value:t})=>({value:gt(e,new Date(t))}))}parse(){return this.unshift(({value:t})=>({value:new Date(t)}))}}class De extends Ce{constructor(t){super("enum"),this[Ie]=[],this.push(({value:e})=>S(e)?{value:e}:this.invalid(`('${this[fe.LIST].join("', '")}')`,t))}list(t,e){const s=t;return s&&this[fe.LIST].push(...s),s?this.push(({value:t})=>-1!=this[fe.LIST].indexOf(t)?{value:t}:this.invalid(`('${this[fe.LIST].join("', '")}')`,e)):this}toString(){return`${this[fe.TYPE]}('${this[fe.LIST].join("', '")}')`}}Ie=fe.LIST;class Ne extends Ce{constructor(t){super("number"),this.push(({value:e})=>E(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})=>y(e)?{value:e}:this.invalid(".float",t))}integer(t){return this.push(({value:e})=>w(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:S(t)?parseFloat(t.toString()):t}))}}class Ye extends Ce{constructor(t){super("object"),this[Oe]={},this.push(({value:e})=>M(e)?{value:e}:this.invalid("",t))}keys(t,e){const s=t;return s&&(this[fe.KEYS]={...this[fe.KEYS],...s}),s?this.push(({value:t})=>{const r=[],n={};return Object.keys(s).forEach(i=>{const a=s[i];a[fe.NAME]=a[fe.SOURCE]??i;const{error:l,message:u,value:h}=a.validate(t[a[fe.NAME]],n);!e&&u&&(e=u),l&&r.push(l),S(h)&&(n[i]=h)}),r.length?this.invalid("{ "+r.join(", ")+" }",e):{value:n}}):this}model(){const t={},e=Object.keys(this[fe.KEYS]);return e.length&&e.forEach(e=>t[e]=this[fe.KEYS][e].model()),e.length?t:this[fe.TYPE]}parse(t){return this.unshift(({value:e})=>{if(!M(e))try{e=JSON.parse(e)}catch(e){return this.invalid("",t)}return{value:e}})}toString(){return Object.keys(this[fe.KEYS]).length?JSON.stringify(this.model(),null,4):this[fe.TYPE]}}Oe=fe.KEYS;class ke extends Ce{constructor(t){super("string"),this.push(({value:e})=>A(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:Xt(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:ue(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:M(t)?JSON.stringify(t):S(t)?t.toString():t}))}required(t){return this[fe.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:ne(t)}))}}class Ue{static any(){return new Re}static array(t,e){return new Te(e).items(t)}static boolean(t){return new Ae(t)}static date(t){return new je(t)}static enum(t,e){return new De(e).list(t)}static number(t){return new Ne(t)}static object(t,e){return new Ye(e).keys(t)}static ref(t,e){return({context:s})=>s&&S(s[t])?s[t]:e}static string(t){return new ke(t)}test(t,...e){return!A(Ue.validate(t,...e).error)}async testAsync(t,...e){return!A((await Ue.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{Rt as AsyncQueue,$t as EventEmitter,rt as Hash,se as RandomString,de as Translate,Ue as Validation,Ce as ValidationBase,fe as ValidationKeys,pe as allowed,L as cache,_t as camelCase,t as chunkArray,i as clamp,ve as clone,G as colorPalette,e as compareArray,s as countArray,Kt as cutText,gt as dateFormat,Et as dateInterval,bt as dateRange,Ct as debounce,zt as decodeHTML,ge as denied,X as each,Jt as encodeHTML,Mt as firstDayDate,kt as forEachAsync,q as forEachIndex,F as forEachKey,Ut as forEachPage,Lt as forEachSeries,_ as forLoop,P as getConstructor,Q as hexToRgb,V as hslToRgb,r as inArray,n as includesArray,v as isArray,g as isBoolean,Zt as isCharacter,d as isConstructor,f as isDate,S as isDef,Wt as isDigit,Tt as isEmpty,$ as isExtending,Dt as isFalse,y as isFloat,m as isFunction,w as isInteger,Bt as isLetter,x as isMap,Nt as isNotEmpty,b as isNull,E as isNumber,M as isObject,I as isPlainObject,O as isRegExp,R as isScalar,T as isSet,Gt as isSpecialChar,A as isString,j as isSymbol,jt as isTrue,D as isUndefined,yt as isValidDate,wt as lastDayDate,a as lerp,qt as loop,Xt as lowerCamelCase,K as map,ue as mask,oe as maskMoney,he as maskReverse,ce as maskTest,me as merge,Ot as msToString,Yt as noop,St as parseMs,Vt as parseSize,l as random,te as randomCase,u as randomElement,h as rangeArray,J as rgbToHex,st as rgbToHsl,Z as shadeColor,o as shuffleArray,ee as shuffleString,Pt as sleep,re as stringReverse,W as tintColor,N as toArray,U as toBool,p as type,Y as uniqueArray,nt as uniqueID,ne as upperCamelCase,it as uuidv1,at as uuidv1ToTimestamp,lt as uuidv4,ut as uuidv7,ht as uuidv7ToTimestamp,ct as uuidv8};
package/dist/index.min.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /*!
2
- * @andrewcaires/utils.js v0.4.26
2
+ * @andrewcaires/utils.js v0.4.28
3
3
  * JavaScript utility library for web and nodejs development
4
4
  * (c) 2026 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={},a=t=>null==t?"null":n[n.toString.call(t)]||"object";["Array","AsyncFunction","Boolean","Date","Function","Map","Number","Object","RegExp","Set","String"].forEach(t=>n["[object "+t+"]"]=t.toLowerCase());const i=t=>"array"==a(t),l=t=>"boolean"==a(t),u=t=>"function"==typeof t,o=t=>"null"!=a(t),h=t=>"number"==a(t),c=t=>h(t)&&!!(t%1),p=t=>h(t)&&!(t%1),v=t=>"object"==a(t),m=t=>v(t)&&t.constructor===Object,g=["boolean","number","string"],d=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 a=0;a<n.length&&(r=n[a],!1!==e.call(s,t[r],r,t));a++);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)||[],C=t=>("0"+t.toString(16)).slice(-2),I=(t,e,s)=>"#"+C(t)+C(e)+C(s),M=(t,s)=>{const r=T(t);s=e(s,0,1);const[n,a,i]=r.map(t=>Math.round(t*s));return I(n,a,i)},O=(t,s)=>{const r=T(t);s=e(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},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 j{constructor(t){this.key=this.shuffle(j.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[j.dictionary.indexOf(t[s]),j.dictionary.indexOf(e[s%e.length])]}result(t,e,s){return j.dictionary[(s?t-e+j.dictionary.length:t+e)%j.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")}}j.dictionary="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";const k=(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 at=t=>t.split("").reverse().join(""),it=(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:a,value:i}=t;return f(a)||f(i)?"":(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)=>at(ht(at(t),at(e))),pt=(t,e)=>t.reduce((t,s)=>({...t,[s]:e[s]}),{}),vt=t=>t instanceof Date?new Date(t.getTime()):i(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 gt{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}}gt.locales={};class dt{}var ft,yt,St,Et,xt,wt,bt,Tt,Ct;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[ft]="",this[yt]="",this[St]=null,this[Et]="",this[xt]="any",this[wt]=!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=this.fn(t);return this.unshift(({value:t,context:s})=>{const r=o(t),n=e({value:t,context:s});return{break:!o(n)&&!r,value:r?t:n}})}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 d(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 u(t)?t:()=>t}from(t){return this[dt.SOURCE]=t,this}invalid(t,e){return t=`[${this[dt.TYPE]}]${t}`,{error:this[dt.ERROR]?this[dt.ERROR]:this[dt.NAME]?this[dt.NAME]+":"+t:t,message:e}}model(){return this.toString()}parse(){return this.unshift(({value:t})=>({value:t}))}push(t){return this.rules.push(t),this}required(t){return this[dt.REQUIRED]=!0,this.unshift(({value:e})=>o(e)?{value:e}:this.invalid(".required",t))}test(t){return!d(this.validate(t).error)}async testAsync(t){return!d((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.break)return{value:s.value};if(s.error?.length)return{error:s.error,...s.message?{message:s.message}:{}}}return{value:s.value}}async validateAsync(t,e){let s=this.validate(t,e);if(s.error)return{error:s.error,...s.message?{message:s.message}:{}};for(let t=0;t<this.custom.length;t++){if(s=await this.custom[t]({value:s.value}),s.break)return{value:s.value,...s.message?{message:s.message}:{}};if(s.error)return{error:s.error,...s.message?{message:s.message}:{}}}return{value:s.value}}}ft=dt.NAME,yt=dt.DESCRIPTION,St=dt.EXAMPLE,dt.SOURCE,Et=dt.ERROR,xt=dt.TYPE,wt=dt.REQUIRED;class Mt extends It{constructor(t){super("array"),this[bt]=[],this.push(({value:e})=>i(e)?{value:e}:this.invalid("",t))}between(t,e,s){return this.min(t,s),this.max(e,s)}items(t,e){const s=t;return s&&this[dt.INDEXES].push(s),s?this.push(({value:t})=>{const r=[];s[dt.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[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]}}bt=dt.INDEXES;class Ot extends It{constructor(t){super("boolean"),this.push(({value:e})=>l(e)?{value:e}:this.invalid("",t))}parse(){return this.unshift(({value:t})=>({value:o(t)?S(t):t}))}}class Dt extends It{constructor(t){super("date"),this.push(({value:e})=>d(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 It{constructor(t){super("enum"),this[Tt]=[],this.push(({value:e})=>o(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("', '")}')`}}Tt=dt.LIST;class At extends It{constructor(t){super("number"),this.push(({value:e})=>h(e)?{value:e}:this.invalid("",t))}between(t,e,s){return this.min(t,s),this.max(e,s)}float(t){return this.push(({value:e})=>c(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:o(t)?parseFloat(t.toString()):t}))}}class jt extends It{constructor(t){super("object"),this[Ct]={},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(a=>{const i=s[a];i[dt.NAME]=i[dt.SOURCE]??a;const{error:l,message:u,value:h}=i.validate(t[i[dt.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[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]}}Ct=dt.KEYS;class kt extends It{constructor(t){super("string"),this.push(({value:e})=>d(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):o(t)?t.toString():t}))}required(t){return this[dt.REQUIRED]=!0,this.push(({value:e})=>e.length?{value:e}:this.invalid(".required",t))}regex(t,e){return this.push(({value:s})=>t.test(s)?{value:s}:this.invalid(".regex",e))}replace(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>({value:t.replace(s({value:t,context:r}),e)}))}trim(){return this.push(({value:t})=>({value:t.trim()}))}upperCase(){return this.push(({value:t})=>({value:t.toUpperCase()}))}upperCamelCase(){return this.push(({value:t})=>({value:it(t)}))}}class Nt{static array(t,e){return new Mt(e).items(t)}static boolean(t){return new Ot(t)}static date(t){return new Dt(t)}static enum(t,e){return new Rt(e).list(t)}static number(t){return new At(t)}static object(t,e){return new jt(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!d(Nt.validate(t,...e).error)}async testAsync(t,...e){return!d((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=j,t.RandomString=nt,t.Translate=gt,t.Validation=Nt,t.ValidationBase=It,t.ValidationKeys=dt,t.allowed=pt,t.cache=()=>{const t=new Map;return e=>(t.has(e)||t.set(e,{}),t.get(e)??{})},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??D,e=>0==e?t:e>0?O(t,e):M(t,1- -1*e)),t.compareArray=(t,e)=>t.length===e.length&&t.every((t,s)=>t===e[s]),t.countArray=t=>{const e={};return t.forEach(t=>{const s=t.toString();e[s]=(e[s]||0)+1}),e},t.cutText=(t,e)=>{if(t.length>e){const s=t.substring(0,e).split(" ");return s.pop(),s.join(" ")+"..."}return t},t.dateFormat=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 a=X(n,"23:59:59");return a&&q(a.toISOString().slice(0,10))?(7==n.length&&(a=H(a)),r>a?[null,null]:[r,a]):[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)=>i(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.getConstructor=t=>u(t)?t:t.constructor,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 a=[0,0,0];t<=1?a=[r,n,0]:t<=2?a=[n,r,0]:t<=3?a=[0,r,n]:t<=4?a=[0,n,r]:t<=5?a=[n,0,r]:t<=6&&(a=[r,0,n]);const i=s-.5*r;return[Math.round(255*(a[0]+i)),Math.round(255*(a[1]+i)),Math.round(255*(a[2]+i))]},t.inArray=(t,e)=>-1!=e.indexOf(t),t.includesArray=(t,e)=>t.every(t=>e.includes(t)),t.isArray=i,t.isBoolean=l,t.isCharacter=t=>/^[\w]$/.test(t),t.isConstructor=t=>u(t)&&t.prototype.constructor===t,t.isDate=t=>"date"==a(t),t.isDef=o,t.isDigit=tt,t.isEmpty=_,t.isExtending=(t,e)=>{if(t===e)return!1;let s=Object.getPrototypeOf(t);for(;s;){if(s===e)return!0;s=Object.getPrototypeOf(s)}return!1},t.isFalse=t=>!J(t),t.isFloat=c,t.isFunction=u,t.isInteger=p,t.isLetter=et,t.isMap=t=>"map"==a(t),t.isNotEmpty=t=>!_(t),t.isNull=t=>null===t,t.isNumber=h,t.isObject=v,t.isPlainObject=m,t.isRegExp=t=>"regexp"==a(t),t.isScalar=t=>-1!=g.indexOf(a(t)),t.isSet=t=>"set"==a(t),t.isSpecialChar=st,t.isString=d,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(h(t))return t+"px";const e=(t=>/(-?(?:\d+)?\.?\d+) *(px|%|cm|mm|in|pt|pc|en|ex|ch|rem|vw|vh|vmin|vmax)*/g.exec(t))(t);return e?parseFloat(e[1])+(e[2]||"px"):"0px"},t.random=s,t.randomCase=t=>t.split("").map(t=>Math.random()<.5?t.toUpperCase():t.toLowerCase()).join(""),t.randomElement=t=>t.length?t[s(0,t.length-1)]:null,t.rangeArray=(t,e,s=1)=>Array.from({length:(e-t)/s+1},(e,r)=>t+r*s),t.rgbToHex=I,t.rgbToHsl=(t,e,s)=>{const[r,n,a]=((...t)=>t.map(t=>t/255))(t,e,s),i=Math.max(r,n,a),l=Math.min(r,n,a),u=i-l,o=(l+i)/2;return[60*R(u,i,r,n,a),A(u,o),o]},t.shadeColor=M,t.shuffleArray=r,t.shuffleString=rt,t.sleep=t=>new Promise(e=>setTimeout(e,t)),t.stringReverse=at,t.tintColor=O,t.toArray=t=>i(t)?t:o(t)?[t]:[],t.toBool=S,t.type=a,t.uniqueArray=t=>t.filter((t,e,s)=>s.indexOf(t)===e),t.uniqueID=k,t.upperCamelCase=it,t.uuidv1=()=>{const t=1e4*(Date.now()+122192928e5),e=(4294967295&t)>>>0,r=(t/4294967296&65535)>>>0,n=(t/281474976710656&4095)>>>0,a=s(0,e),i=(t,e)=>t.toString(16).padStart(e,"0");return[i(e,8),i(r,4),i(4096|n,4),i(a>>8&63|128,2)+i(255&a,2),k(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),j.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={},a=t=>null==t?"null":n[n.toString.call(t)]||"object";["Array","AsyncFunction","Boolean","Date","Function","Map","Number","Object","RegExp","Set","String"].forEach(t=>n["[object "+t+"]"]=t.toLowerCase());const i=t=>"array"==a(t),l=t=>"boolean"==a(t),u=t=>"function"==typeof t,o=t=>"date"==a(t),h=t=>"null"!=a(t),c=t=>"number"==a(t),p=t=>c(t)&&!!(t%1),v=t=>c(t)&&!(t%1),g=t=>"object"==a(t),m=t=>g(t)&&t.constructor===Object,d=t=>"regexp"==a(t),f=["boolean","number","string"],S=t=>"string"==typeof t,y=t=>void 0===t,E=[1,"1",!0,"true"],w=t=>-1!=E.indexOf(t),x=(t,e,s)=>{for(let r=0;r<t.length&&!1!==e.call(s,t[r],r,t);r++);return t},b=(t,e,s)=>{for(const r in t)if(!1===e.call(s,t[r],r,t))break;return t},M=(t,e,s)=>Object.fromEntries(Object.entries(t).map(([r,n])=>[r,e.call(s,n,r,t)])),T=t=>parseInt(t??"0",16)||0,C=t=>t.replace(/^#/,"").match(/.{1,2}/g)?.map(T)||[],I=t=>("0"+t.toString(16)).slice(-2),A=(t,e,s)=>"#"+I(t)+I(e)+I(s),R=(t,s)=>{const r=C(t);s=e(s,0,1);const[n,a,i]=r.map(t=>Math.round(t*s));return A(n,a,i)},O=(t,s)=>{const r=C(t);s=e(s,0,1);const[n,a,i]=r.map(t=>Math.round(t+(255-t)*s));return A(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},j=(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,N=(t,e)=>0===t?0:t/(1-Math.abs(2*e-1));const k=(t=64)=>Array(Math.ceil(t/2)).fill(0).map(()=>s(0,255).toString(16).padStart(2,"0")).join("").slice(0,t),L=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")},U=t=>("0"+t.toString()).slice(-2),Y={"%y":(t,e)=>U(e?t.getUTCFullYear():t.getFullYear()),"%Y":(t,e)=>(e?t.getUTCFullYear():t.getFullYear()).toString(),"%m":(t,e)=>U((e?t.getUTCMonth():t.getMonth())+1),"%d":(t,e)=>U(e?t.getUTCDate():t.getDate()),"%H":(t,e)=>U(e?t.getUTCHours():t.getHours()),"%M":(t,e)=>U(e?t.getUTCMinutes():t.getMinutes()),"%S":(t,e)=>U(e?t.getUTCSeconds():t.getSeconds())},P=(t,e,s)=>(e=e??new Date,t.replace(/%[yYmdHMS]/g,t=>Y[t]?Y[t](e,s):t.slice(1))),$=36e5,F=24*$,q={ms:1,s:1e3,m:6e4,h:$,d:F,w:7*F,y:315576e5},H=t=>{if(c(t))return 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])*q[s[2]]||0;return r},X=t=>{const e=new Date(t);return e.getTime()==e.getTime()&&t==e.toISOString().slice(0,10)},K=t=>new Date(t.getFullYear(),t.getMonth()+1,0,t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()),_=(t,e)=>/^([\d]{4})-([\d]{2})-([\d]{2})$/.test(t)?X(t)?new Date(`${t} ${e}`):null:/^([\d]{4})-([\d]{2})$/.test(t)&&X(t=`${t}-01`)?new Date(`${t} ${e}`):null,Q=["y","d","h","m","s","ms"];const z=t=>0==(t?.length??0),J=["",0,"0",null,!1,void 0],B=t=>-1==J.indexOf(t),V=()=>{},Z=async(t,e,s,r=!0)=>{const n=[];if(await Promise.allSettled(t.map((a,i)=>e.call(s,a,i,t)?.catch(r?t=>{n.push(t)}:V))),r&&n.length)throw new AggregateError(n,"Errors occurred in forEachAsync")},W=async(t,e,s,r=!0)=>{const n=[];for(let a=0;a<t.length;a++)await e.call(s,t[a],a,t).catch(r?t=>{n.push(t)}:V);if(r&&n.length)throw new AggregateError(n,"Errors occurred in forEachSeries")};const G=(t,e,s)=>e(t.toLowerCase().replace(/\W+/g," ")).replace(/\s/g,s??""),tt=(t,e)=>G(t,t=>t.replace(/\s(\w)/g,t=>t.toUpperCase()),e),et=tt,st=/&(amp|apos|lt|gt|nbsp|quot);/g,rt={amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",quot:'"'},nt=t=>/^[\d]$/.test(t),at=t=>/^[A-Za-z]$/.test(t),it=t=>/^[^\w]$/.test(t),lt=t=>r(t.split("")).join("");class ut{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 ut).chars()}lower(){return this.hasLower=!0,this}static lower(){return(new ut).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=lt(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 ut).numbers()}space(){return this.hasSpace=!0,this}static space(){return(new ut).space()}symbols(){return this.hasSymbols=!0,this}static symbols(){return(new ut).symbols()}upper(){return this.hasUpper=!0,this}static upper(){return(new ut).upper()}}const ot=t=>t.split("").reverse().join(""),ht=(t,e)=>G(t,t=>t.replace(/(\w)(\w*)/g,(t,e,s)=>e.toUpperCase()+s),e),ct=(t,e)=>e(t.value)?t.value:(t=>(t.maskIndex--,""))(t),pt={"#":t=>t.value,0:t=>ct(t,nt),9:t=>ct(t,nt),A:t=>ct(t,at),Z:t=>ct(t,at),L:t=>ct(t,at).toLowerCase(),U:t=>ct(t,at).toUpperCase(),S:t=>ct(t,it)},vt=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 y(a)||y(i)?"":(t=>pt[t.key]?pt[t.key](t):(t.key!=t.value&&t.textIndex--,t.key))(t)+vt(t)},gt=(t,e)=>vt({mask:t,maskIndex:-1,text:e,textIndex:-1,key:"",value:""}),mt=(t,e)=>ot(gt(ot(t),ot(e))),dt=(t,e=new WeakMap)=>{if(!h(t))return t;if(o(t))return new Date(t.getTime());if(d(t))return new RegExp(t.source,t.flags);if(e.has(t))return e.get(t);if(i(t)){const s=[];return e.set(t,s),s.push(...t.map(t=>dt(t,e))),s}if(g(t)){const s={};return e.set(t,s),Object.assign(s,M(t,t=>dt(t,e))),s}return t},ft=(t,...e)=>m(t)?(e.forEach(e=>{m(e)&&Object.entries(e).forEach(([e,s])=>{t[e]=m(s)?ft(t[e]??{},s):s})}),t):t;class St{static getLocale(){return this.locale}static options(t={}){t.locale&&this.setLocale(t.locale),t.locales&&b(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}}St.locales={};class yt{}var Et,wt,xt,bt,Mt,Tt,Ct,It,At;yt.DESCRIPTION=Symbol("DESCRIPTION"),yt.ERROR=Symbol("ERROR"),yt.EXAMPLE=Symbol("EXAMPLE"),yt.INDEXES=Symbol("INDEXES"),yt.KEYS=Symbol("KEYS"),yt.LIST=Symbol("LIST"),yt.NAME=Symbol("NAME"),yt.REQUIRED=Symbol("REQUIRED"),yt.SOURCE=Symbol("SOURCE"),yt.TYPE=Symbol("TYPE");class Rt{constructor(t){this[Et]="",this[wt]="",this[xt]=null,this[bt]="",this[Mt]="any",this[Tt]=!1,this.rules=[],this.custom=[],this[yt.TYPE]=t}description(t){return this[yt.DESCRIPTION]=t,this}example(t){return this[yt.EXAMPLE]=t,this}empty(t){const e=this.fn(t);return this.unshift(({value:t,context:s})=>{const r=h(t),n=e({value:t,context:s});return{break:!h(n)&&!r,value:r?t:n}})}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 S(t)&&(this[yt.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 u(t)?t:()=>t}from(t){return this[yt.SOURCE]=t,this}invalid(t,e){return t=`[${this[yt.TYPE]}]${t}`,{error:this[yt.ERROR]?this[yt.ERROR]:this[yt.NAME]?this[yt.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[yt.REQUIRED]=!0,this.unshift(({value:e})=>h(e)?{value:e}:this.invalid(".required",t))}test(t){return!S(this.validate(t).error)}async testAsync(t){return!S((await this.validateAsync(t)).error)}toString(){return this[yt.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.break)return{value:s.value};if(s.error?.length)return{error:s.error,...s.message?{message:s.message}:{}}}return{value:s.value}}async validateAsync(t,e){let s=this.validate(t,e);if(s.error)return{error:s.error,...s.message?{message:s.message}:{}};for(let t=0;t<this.custom.length;t++){if(s=await this.custom[t]({value:s.value}),s.break)return{value:s.value,...s.message?{message:s.message}:{}};if(s.error)return{error:s.error,...s.message?{message:s.message}:{}}}return{value:s.value}}}Et=yt.NAME,wt=yt.DESCRIPTION,xt=yt.EXAMPLE,yt.SOURCE,bt=yt.ERROR,Mt=yt.TYPE,Tt=yt.REQUIRED;class Ot extends Rt{constructor(){super("any")}}class Dt extends Rt{constructor(t){super("array"),this[Ct]=[],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[yt.INDEXES].push(s),s?this.push(({value:t})=>{const r=[];s[yt.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[yt.INDEXES].length?this[yt.INDEXES].map(t=>t.model()):this[yt.TYPE]}toString(){return this[yt.INDEXES].length?JSON.stringify(this.model(),null,4):this[yt.TYPE]}}Ct=yt.INDEXES;class jt extends Rt{constructor(t){super("boolean"),this.push(({value:e})=>l(e)?{value:e}:this.invalid("",t))}parse(){return this.unshift(({value:t})=>({value:h(t)?w(t):t}))}}class Nt extends Rt{constructor(t){super("date"),this.push(({value:e})=>S(e)&&X(e)||!isNaN(new Date(e).getTime())?{value:e}:this.invalid("",t))}format(t){const e=t;return this.push(({value:t})=>({value:P(e,new Date(t))}))}parse(){return this.unshift(({value:t})=>({value:new Date(t)}))}}class kt extends Rt{constructor(t){super("enum"),this[It]=[],this.push(({value:e})=>h(e)?{value:e}:this.invalid(`('${this[yt.LIST].join("', '")}')`,t))}list(t,e){const s=t;return s&&this[yt.LIST].push(...s),s?this.push(({value:t})=>-1!=this[yt.LIST].indexOf(t)?{value:t}:this.invalid(`('${this[yt.LIST].join("', '")}')`,e)):this}toString(){return`${this[yt.TYPE]}('${this[yt.LIST].join("', '")}')`}}It=yt.LIST;class Lt extends Rt{constructor(t){super("number"),this.push(({value:e})=>c(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})=>p(e)?{value:e}:this.invalid(".float",t))}integer(t){return this.push(({value:e})=>v(e)?{value:e}:this.invalid(".integer",t))}max(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t<=n?{value:t}:this.invalid(`.max(${n})`,e)})}min(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t>=n?{value:t}:this.invalid(`.min(${n})`,e)})}parse(){return this.unshift(({value:t})=>({value:h(t)?parseFloat(t.toString()):t}))}}class Ut extends Rt{constructor(t){super("object"),this[At]={},this.push(({value:e})=>g(e)?{value:e}:this.invalid("",t))}keys(t,e){const s=t;return s&&(this[yt.KEYS]={...this[yt.KEYS],...s}),s?this.push(({value:t})=>{const r=[],n={};return Object.keys(s).forEach(a=>{const i=s[a];i[yt.NAME]=i[yt.SOURCE]??a;const{error:l,message:u,value:o}=i.validate(t[i[yt.NAME]],n);!e&&u&&(e=u),l&&r.push(l),h(o)&&(n[a]=o)}),r.length?this.invalid("{ "+r.join(", ")+" }",e):{value:n}}):this}model(){const t={},e=Object.keys(this[yt.KEYS]);return e.length&&e.forEach(e=>t[e]=this[yt.KEYS][e].model()),e.length?t:this[yt.TYPE]}parse(t){return this.unshift(({value:e})=>{if(!g(e))try{e=JSON.parse(e)}catch(e){return this.invalid("",t)}return{value:e}})}toString(){return Object.keys(this[yt.KEYS]).length?JSON.stringify(this.model(),null,4):this[yt.TYPE]}}At=yt.KEYS;class Yt extends Rt{constructor(t){super("string"),this.push(({value:e})=>S(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:tt(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:gt(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:g(t)?JSON.stringify(t):h(t)?t.toString():t}))}required(t){return this[yt.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:ht(t)}))}}class Pt{static any(){return new Ot}static array(t,e){return new Dt(e).items(t)}static boolean(t){return new jt(t)}static date(t){return new Nt(t)}static enum(t,e){return new kt(e).list(t)}static number(t){return new Lt(t)}static object(t,e){return new Ut(e).keys(t)}static ref(t,e){return({context:s})=>s&&h(s[t])?s[t]:e}static string(t){return new Yt(t)}test(t,...e){return!S(Pt.validate(t,...e).error)}async testAsync(t,...e){return!S((await Pt.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}clear(){this.events.clear()}count(t){return this.events.get(t)?.size??0}on(t,e){let s=this.events.get(t);return s||(s=new Set,this.events.set(t,s)),s.add(e),{dispose:()=>this.off(t,e)}}once(t,e){const s=this.on(t,t=>{s.dispose(),e(t)});return s}off(t,e){const s=this.events.get(t);s&&(e?(s.delete(e),s.size||this.events.delete(t)):this.events.delete(t))}emit(t,e){const s=this.events.get(t);s&&[...s].forEach(t=>t(e))}async emitAsync(t,e){const s=this.events.get(t);s&&await Z([...s],t=>t(e))}async emitSeries(t,e){const s=this.events.get(t);s&&await W([...s],t=>t(e))}},t.Hash=class{constructor(t){this.dictionary="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",this.hash=t??"",this.seed=this.hashSeed(),this.dic=this.shuffleString(this.dictionary),this.map=Object.fromEntries([...this.dic].map((t,e)=>[t,e]))}encrypt(t){return this.transform(t,!1)}decrypt(t){return this.transform(t,!0)}transform(t,e){const s=this.dic.length,r=[];for(let n=0;n<t.length;n++){const a=t[n],i=this.map[a];if(void 0===i){r[n]=a;continue}const l=this.hash[n%this.hash.length],u=this.map[l];if(void 0===u){r[n]=a;continue}const o=e?(i-u+s)%s:(i+u)%s;r[n]=this.dic[o]}return r.join("")}hashSeed(){let t=2166136261;for(let e=0;e<this.hash.length;e++)t^=this.hash.charCodeAt(e),t=Math.imul(t,16777619);return t>>>0}seededRandom(t){t=(t|=0)+1831565813|0;let e=Math.imul(t^t>>>15,1|t);return e=e+Math.imul(e^e>>>7,61|e)^e,((e^e>>>14)>>>0)/4294967296}shuffleString(t){const e=t.split(""),s=this.seededRandom(this.seed);for(let t=e.length-1;t>0;t--){const r=Math.floor(s*(t+1));[e[t],e[r]]=[e[r],e[t]]}return e.join("")}},t.RandomString=ut,t.Translate=St,t.Validation=Pt,t.ValidationBase=Rt,t.ValidationKeys=yt,t.allowed=(t,e)=>{const s={};for(const r of e)r in t&&(s[r]=t[r]);return s},t.cache=()=>{const t=new Map;return e=>(t.has(e)||t.set(e,{}),t.get(e)??{})},t.camelCase=et,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=dt,t.colorPalette=(t,e)=>M(e??D,e=>0==e?t:e>0?O(t,e):R(t,1- -1*e)),t.compareArray=(t,e)=>t.length===e.length&&t.every((t,s)=>t===e[s]),t.countArray=t=>{const e={};return t.forEach(t=>{const s=t.toString();e[s]=(e[s]||0)+1}),e},t.cutText=(t,e)=>{if(t.length>e){const s=t.substring(0,e).split(" ");return s.pop(),s.join(" ")+"..."}return t},t.dateFormat=P,t.dateInterval=(t,e,s)=>{const r=new Date(t);s=s??H("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??P("%Y-%m"),r=_(s,"00:00:00");if(!r||!X(r.toISOString().slice(0,10)))return[null,null];const n=e||s;let a=_(n,"23:59:59");return a&&X(a.toISOString().slice(0,10))?(7==n.length&&(a=K(a)),r>a?[null,null]:[r,a]):[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(st,(t,e)=>rt[e]).replace(/&#(\d+);/gi,(t,e)=>String.fromCharCode(parseInt(e,10))),t.denied=(t,e)=>{const s={},r=new Set(e);for(const e in t)r.has(e)||(s[e]=t[e]);return s},t.each=(t,e,s)=>i(t)?x(t,e,s):g(t)?b(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=Z,t.forEachIndex=x,t.forEachKey=b,t.forEachPage=async t=>{let e=!0;const s=()=>e=!0;let r=1;for(;e;)e=!1,await(t(r,s)?.catch(V)),r+=1},t.forEachSeries=W,t.forLoop=(t,e,s)=>{for(let r=1;r<=t&&!1!==e.call(s,r,t);r++);return t},t.getConstructor=t=>u(t)?t:t.constructor,t.hexToRgb=C,t.hslToRgb=(t,e,s)=>{t/=60;const r=(1-Math.abs(2*s-1))*e,n=r*(1-Math.abs(t%2-1));let a=[0,0,0];t<=1?a=[r,n,0]:t<=2?a=[n,r,0]:t<=3?a=[0,r,n]:t<=4?a=[0,n,r]:t<=5?a=[n,0,r]:t<=6&&(a=[r,0,n]);const i=s-.5*r;return[Math.round(255*(a[0]+i)),Math.round(255*(a[1]+i)),Math.round(255*(a[2]+i))]},t.inArray=(t,e)=>-1!=e.indexOf(t),t.includesArray=(t,e)=>t.every(t=>e.includes(t)),t.isArray=i,t.isBoolean=l,t.isCharacter=t=>/^[\w]$/.test(t),t.isConstructor=t=>u(t)&&t.prototype.constructor===t,t.isDate=o,t.isDef=h,t.isDigit=nt,t.isEmpty=z,t.isExtending=(t,e)=>{if(t===e)return!1;let s=Object.getPrototypeOf(t);for(;s;){if(s===e)return!0;s=Object.getPrototypeOf(s)}return!1},t.isFalse=t=>!B(t),t.isFloat=p,t.isFunction=u,t.isInteger=v,t.isLetter=at,t.isMap=t=>"map"==a(t),t.isNotEmpty=t=>!z(t),t.isNull=t=>null===t,t.isNumber=c,t.isObject=g,t.isPlainObject=m,t.isRegExp=d,t.isScalar=t=>-1!=f.indexOf(a(t)),t.isSet=t=>"set"==a(t),t.isSpecialChar=it,t.isString=S,t.isSymbol=t=>"symbol"==typeof t,t.isTrue=B,t.isUndefined=y,t.isValidDate=X,t.lastDayDate=K,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=tt,t.map=M,t.mask=gt,t.maskMoney=(t,e,s)=>(s++,e=parseInt((e||"0").replace(/\D/g,"")).toString(),mt(t,e.length<s?("0".repeat(s)+e).slice(-1*s):e)),t.maskReverse=mt,t.maskTest=(t,e)=>t.length==gt(t,e).length,t.merge=ft,t.msToString=t=>{const e=[];return Q.forEach(s=>{const r=q[s],n=(t-t%r)/r;n&&(t-=n*r,e.push(n.toString()+s))}),e.join(" ")},t.noop=V,t.parseMs=H,t.parseSize=t=>{if(c(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=A,t.rgbToHsl=(t,e,s)=>{const[r,n,a]=((...t)=>t.map(t=>t/255))(t,e,s),i=Math.max(r,n,a),l=Math.min(r,n,a),u=i-l,o=(l+i)/2;return[60*j(u,i,r,n,a),N(u,o),o]},t.shadeColor=R,t.shuffleArray=r,t.shuffleString=lt,t.sleep=t=>new Promise(e=>setTimeout(e,H(t))),t.stringReverse=ot,t.tintColor=O,t.toArray=t=>i(t)?t:h(t)?[t]:[],t.toBool=w,t.type=a,t.uniqueArray=t=>t.filter((t,e,s)=>s.indexOf(t)===e),t.uniqueID=k,t.upperCamelCase=ht,t.uuidv1=()=>{const t=1e4*(Date.now()+122192928e5),e=(4294967295&t)>>>0,r=(t/4294967296&65535)>>>0,n=(t/281474976710656&4095)>>>0,a=s(0,e),i=(t,e)=>t.toString(16).padStart(e,"0");return[i(e,8),i(r,4),i(4096|n,4),i(a>>8&63|128,2)+i(255&a,2),k(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),L(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.26",
3
+ "version": "0.4.28",
4
4
  "description": "JavaScript utility library for web and nodejs development",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs.js",
@@ -47,12 +47,12 @@
47
47
  "@rollup/plugin-commonjs": "^29.0.0",
48
48
  "@rollup/plugin-terser": "^0.4.4",
49
49
  "@rollup/plugin-typescript": "^12.3.0",
50
- "@types/node": "^25.0.9",
50
+ "@types/node": "^25.2.0",
51
51
  "eslint": "^9.39.2",
52
- "rollup": "^4.55.2",
52
+ "rollup": "^4.57.1",
53
53
  "rollup-plugin-dts": "^6.3.0",
54
54
  "tslib": "^2.8.1",
55
55
  "tsx": "^4.21.0",
56
- "typescript-eslint": "^8.53.1"
56
+ "typescript-eslint": "^8.54.0"
57
57
  }
58
58
  }