@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 +2 -2
- package/dist/index.d.ts +39 -30
- package/dist/index.esm.js +2 -2
- package/dist/index.min.js +2 -2
- package/package.json +4 -4
package/dist/index.cjs.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* @andrewcaires/utils.js v0.4.
|
|
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.
|
|
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
|
|
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
|
|
136
|
-
private
|
|
137
|
-
|
|
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
|
|
141
|
-
private
|
|
142
|
-
private
|
|
143
|
-
|
|
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: (
|
|
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 = (
|
|
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
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
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:
|
|
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>(
|
|
253
|
+
declare const clone: <T>(target: T, cache?: WeakMap<WeakKey, any>) => T;
|
|
250
254
|
|
|
251
|
-
declare const denied:
|
|
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>,
|
|
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 = (
|
|
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,
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
50
|
+
"@types/node": "^25.2.0",
|
|
51
51
|
"eslint": "^9.39.2",
|
|
52
|
-
"rollup": "^4.
|
|
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.
|
|
56
|
+
"typescript-eslint": "^8.54.0"
|
|
57
57
|
}
|
|
58
58
|
}
|