@andrewcaires/utils.js 0.4.12 → 0.4.13
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 +19 -4
- package/dist/index.esm.js +2 -2
- package/dist/index.min.js +2 -2
- package/package.json +3 -3
package/dist/index.cjs.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* @andrewcaires/utils.js v0.4.
|
|
2
|
+
* @andrewcaires/utils.js v0.4.13
|
|
3
3
|
* JavaScript utility library for web and nodejs development
|
|
4
4
|
* (c) 2025 Andrew Caires
|
|
5
5
|
* @license: MIT
|
|
6
6
|
*/
|
|
7
|
-
"use strict";const t=(t,e,s)=>Math.max(e,Math.min(s,t)),e=(t,e)=>Math.floor(Math.random()*(e-t+1)+t),s=t=>{for(let s=t.length-1;s>0;s--){const r=e(0,s);[t[s],t[r]]=[t[r],t[s]]}return t},r={},n=t=>null==t?"null":r[r.toString.call(t)]||"object";["Array","AsyncFunction","Boolean","Date","Function","Map","Number","Object","RegExp","Set","String"].forEach(t=>r["[object "+t+"]"]=t.toLowerCase());const a=t=>"array"==n(t),i=t=>"boolean"==n(t),o=t=>"null"!=n(t),l=t=>"number"==n(t),u=t=>l(t)&&!!(t%1),h=t=>"function"==typeof t,c=t=>l(t)&&!(t%1),p=t=>"object"==n(t),v=t=>p(t)&&t.constructor===Object,x=["boolean","number","string"],m=t=>"string"==typeof t,d=t=>void 0===t,g=[1,"1",!0,"true"],f=t=>-1!=g.indexOf(t),y=(t,e,s)=>{for(let r=0;r<t.length&&!1!==e.call(s,t[r],r,t);r++);return t},S=(t,e,s)=>{let r="";const n=Object.keys(t);for(let a=0;a<n.length&&(r=n[a],!1!==e.call(s,t[r],r,t));a++);return t},E=(t,e,s)=>Object.fromEntries(Object.entries(t).map(([r,n])=>[r,e.call(s,n,r,t)])),b=t=>parseInt(t??"0",16)||0,w=t=>t.replace(/^#/,"").match(/.{1,2}/g)?.map(b)||[],I=t=>("0"+t.toString(16)).slice(-2),M=(t,e,s)=>"#"+I(t)+I(e)+I(s),R=(e,s)=>{const r=w(e);s=t(s,0,1);const[n,a,i]=r.map(t=>Math.round(t*s));return M(n,a,i)},T=(e,s)=>{const r=w(e);s=t(s,0,1);const[n,a,i]=r.map(t=>Math.round(t+(255-t)*s));return M(n,a,i)},C={50:.95,100:.9,200:.75,300:.6,400:.3,500:0,600:-.1,700:-.25,800:-.4,900:-.55,950:-.71},O=(t,e,s,r,n)=>0===t?0:e===s?(r-n)/t%6:e===r?(n-s)/t+2:e===n?(s-r)/t+4:0,A=(t,e)=>0===t?0:t/(1-Math.abs(2*e-1));class D{constructor(t){this.key=this.shuffle(D.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[D.dictionary.indexOf(t[s]),D.dictionary.indexOf(e[s%e.length])]}result(t,e,s){return D.dictionary[(s?t-e+D.dictionary.length:t+e)%D.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}}D.dictionary="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";const k=(t=64)=>Array(Math.ceil(t/2)).fill(0).map(()=>e(0,255).toString(16).padStart(2,"0")).join("").slice(0,t),N=t=>("0"+t.toString()).slice(-2),j={"%y":t=>N(t.getFullYear()),"%Y":t=>t.getFullYear().toString(),"%m":t=>N(t.getMonth()+1),"%d":t=>N(t.getDate()),"%H":t=>N(t.getHours()),"%M":t=>N(t.getMinutes()),"%S":t=>N(t.getSeconds())},L=(t,e)=>(e=e??new Date,t.replace(/%[yYmdHMS]/g,t=>j[t]?j[t](e):t.slice(1))),Y=36e5,P=24*Y,U={ms:1,s:1e3,m:6e4,h:Y,d:P,w:7*P,y:315576e5},$=["y","d","h","m","s","ms"];const F=t=>0==(t?.length??0),X=["",0,"0",null,!1,void 0],q=t=>-1==X.indexOf(t),H=()=>{},K=(t,e,s)=>e(t.toLowerCase().replace(/\W+/g," ")).replace(/\s/g,s??""),_=(t,e)=>K(t,t=>t.replace(/\s(\w)/g,t=>t.toUpperCase()),e),Q=_,B=/&(amp|apos|lt|gt|nbsp|quot);/g,J={amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",quot:'"'},V=t=>/^[\d]$/.test(t),z=t=>/^[A-Za-z]$/.test(t),Z=t=>/^[^\w]$/.test(t),W=t=>s(t.split("")).join("");class G{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 G).chars()}lower(){return this.hasLower=!0,this}static lower(){return(new G).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=W(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 G).numbers()}space(){return this.hasSpace=!0,this}static space(){return(new G).space()}symbols(){return this.hasSymbols=!0,this}static symbols(){return(new G).symbols()}upper(){return this.hasUpper=!0,this}static upper(){return(new G).upper()}}const tt=t=>t.split("").reverse().join(""),et=(t,e)=>K(t,t=>t.replace(/(\w)(\w*)/g,(t,e,s)=>e.toUpperCase()+s),e),st=(t,e)=>e(t.value)?t.value:(t=>(t.maskIndex--,""))(t),rt={"#":t=>t.value,0:t=>st(t,V),9:t=>st(t,V),A:t=>st(t,z),Z:t=>st(t,z),L:t=>st(t,z).toLowerCase(),U:t=>st(t,z).toUpperCase(),S:t=>st(t,Z)},nt=t=>{t.maskIndex++,t.textIndex++;const{mask:e,maskIndex:s,text:r,textIndex:n}=t;t.key=e[s],t.value=r[n];const{key:a,value:i}=t;return d(a)||d(i)?"":(t=>rt[t.key]?rt[t.key](t):(t.key!=t.value&&t.textIndex--,t.key))(t)+nt(t)},at=(t,e)=>nt({mask:t,maskIndex:-1,text:e,textIndex:-1,key:"",value:""}),it=(t,e)=>tt(at(tt(t),tt(e))),ot=(t,e)=>t.reduce((t,s)=>({...t,[s]:e[s]}),{}),lt=(t,...e)=>{if(!e.length)return t;const s=e.shift();if(v(t)&&v(s))for(const e in s)v(s[e])?(t[e]||(t={...t,[e]:{}}),t[e]=lt(t[e],s[e])):t={...t,[e]:s[e]};return lt(t,...e)};class ut{}var ht,ct,pt,vt,xt,mt,dt,gt,ft;ut.DESCRIPTION=Symbol("DESCRIPTION"),ut.ERROR=Symbol("ERROR"),ut.EXAMPLE=Symbol("EXAMPLE"),ut.INDEXES=Symbol("INDEXES"),ut.KEYS=Symbol("KEYS"),ut.LIST=Symbol("LIST"),ut.NAME=Symbol("NAME"),ut.REQUIRED=Symbol("REQUIRED"),ut.SOURCE=Symbol("SOURCE"),ut.TYPE=Symbol("TYPE");class yt{constructor(t){this[ht]="",this[ct]="",this[pt]=null,this[vt]="",this[xt]="any",this[mt]=!1,this.rules=[],this.custom=[],this[ut.TYPE]=t}description(t){return this[ut.DESCRIPTION]=t,this}example(t){return this[ut.EXAMPLE]=t,this}empty(t){const e=t;return this.unshift(({value:t})=>{const s=o(t);return{break:!o(e)&&!s,value:s?t:h(e)?e():e}})}equal(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t==n?{value:t}:this.invalid(`.equal(${n})`,e)})}error(t){return m(t)&&(this[ut.ERROR]=t),this}filter(...t){const e=t;return this.unshift(({value:t})=>{const s=-1==e.indexOf(t);return{break:!s,value:s?t:void 0}})}fn(t){return h(t)?t:()=>t}from(t){return this[ut.SOURCE]=t,this}invalid(t,e){return t=`[${this[ut.TYPE]}]${t}`,{error:this[ut.ERROR]?this[ut.ERROR]:this[ut.NAME]?this[ut.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[ut.REQUIRED]=!0,this.unshift(({value:e})=>o(e)?{value:e}:this.invalid(".required",t))}test(t){return!m(this.validate(t).error)}async testAsync(t){return!m((await this.validateAsync(t)).error)}toString(){return this[ut.TYPE]}unshift(t){return this.rules.unshift(t),this}validate(t,e){if(this.custom.length)return this.invalid("[async]");let s={value:t};for(let t=0;t<this.rules.length;t++){if(s=this.rules[t]({value:s.value,context:e}),s.error?.length)return{error:s.error,...s.message?{message:s.message}:{}};if(s.break)return{value:s.value}}return{value:s.value}}async validateAsync(t,e){let s=this.validate(t,e);if(s.error)return{error:s.error};for(let t=0;t<this.custom.length;t++){if(s=await this.custom[t]({value:s.value}),s.error)return{error:s.error};if(s.break)return{value:s.value}}return{value:s.value}}}ht=ut.NAME,ct=ut.DESCRIPTION,pt=ut.EXAMPLE,ut.SOURCE,vt=ut.ERROR,xt=ut.TYPE,mt=ut.REQUIRED;class St extends yt{constructor(t){super("array"),this[dt]=[],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[ut.INDEXES].push(s),s?this.push(({value:t})=>{s[ut.NAME]="";for(let r=0;r<t.length;r++){const{error:n,value:a}=s.validate(t[r],t);if(n)return this.invalid("< "+n+"["+r+"] >",e);t[r]=a}return{value:t}}):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[ut.INDEXES].length?this[ut.INDEXES].map(t=>t.model()):this[ut.TYPE]}toString(){return this[ut.INDEXES].length?JSON.stringify(this.model(),null,4):this[ut.TYPE]}}dt=ut.INDEXES;class Et extends yt{constructor(t){super("boolean"),this.push(({value:e})=>i(e)?{value:e}:this.invalid("",t))}parse(){return this.unshift(({value:t})=>({value:o(t)?f(t):t}))}}class bt extends yt{constructor(t){super("date"),this.push(({value:e})=>m(e)&&e.length>=9&&!isNaN(new Date(e).getTime())?{value:e}:this.invalid("",t))}format(t){const e=t;return this.push(({value:t})=>({value:L(e,new Date(t))}))}parse(){return this.unshift(({value:t})=>({value:new Date(m(t)&&t.length<=10?`${t} 12:00`:t)}))}}class wt extends yt{constructor(t){super("enum"),this[gt]=[],this.push(({value:e})=>o(e)?{value:e}:this.invalid(`('${this[ut.LIST].join("', '")}')`,t))}list(t,e){const s=t;return s&&this[ut.LIST].push(...s),s?this.push(({value:t})=>-1!=this[ut.LIST].indexOf(t)?{value:t}:this.invalid(`('${this[ut.LIST].join("', '")}')`,e)):this}toString(){return`${this[ut.TYPE]}('${this[ut.LIST].join("', '")}')`}}gt=ut.LIST;class It extends yt{constructor(t){super("number"),this.push(({value:e})=>l(e)?{value:e}:this.invalid("",t))}between(t,e,s){return this.min(t,s),this.max(e,s)}float(t){return this.push(({value:e})=>u(e)?{value:e}:this.invalid(".float",t))}integer(t){return this.push(({value:e})=>c(e)?{value:e}:this.invalid(".integer",t))}max(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t<=n?{value:t}:this.invalid(`.max(${n})`,e)})}min(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t>=n?{value:t}:this.invalid(`.min(${n})`,e)})}parse(){return this.unshift(({value:t})=>({value:o(t)?parseFloat(t.toString()):t}))}}class Mt extends yt{constructor(t){super("object"),this[ft]={},this.push(({value:e})=>p(e)?{value:e}:this.invalid("",t))}keys(t,e){const s=t;return s&&(this[ut.KEYS]={...this[ut.KEYS],...s}),s?this.push(({value:t})=>{const r=[],n={};return Object.keys(s).forEach(a=>{const i=s[a];i[ut.NAME]=i[ut.SOURCE]??a;const{error:l,message:u,value:h}=i.validate(t[i[ut.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[ut.KEYS]);return e.length&&e.forEach(e=>t[e]=this[ut.KEYS][e].model()),e.length?t:this[ut.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[ut.KEYS]).length?JSON.stringify(this.model(),null,4):this[ut.TYPE]}}ft=ut.KEYS;class Rt extends yt{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:_(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:at(e({value:t,context:s}),t)}))}min(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t.length>=n?{value:t}:this.invalid(`.min(${n})`,e)})}parse(){return this.unshift(({value:t})=>({value:p(t)?JSON.stringify(t):o(t)?t.toString():t}))}required(t){return this[ut.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:et(t)}))}}class Tt{static array(t,e){return new St(e).items(t)}static boolean(t){return new Et(t)}static date(t){return new bt(t)}static enum(t,e){return new wt(e).list(t)}static number(t){return new It(t)}static object(t,e){return new Mt(e).keys(t)}static ref(t,e){return({context:s})=>s&&o(s[t])?s[t]:e}static string(t){return new Rt(t)}test(t,...e){return!m(Tt.validate(t,...e).error)}async testAsync(t,...e){return!m((await Tt.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.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=D,exports.RandomString=G,exports.Validation=Tt,exports.ValidationBase=yt,exports.ValidationKeys=ut,exports.allowed=ot,exports.cache=()=>{const t=[],e=[];return s=>{let r=t.indexOf(s);return-1==r&&(t.push(s),e.push({}),r=e.length-1),e[r]}},exports.camelCase=Q,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.colorPalette=(t,e)=>E(e??C,e=>0==e?t:e>0?T(t,e):R(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.dateRange=(t,e)=>{const s=new Date(t),r=[];for(;t<e;)s.setDate(s.getDate()+1),r.push(new Date(s));return r},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(B,(t,e)=>J[e]).replace(/&#(\d+);/gi,(t,e)=>String.fromCharCode(parseInt(e,10))),exports.denied=(t,e)=>ot(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()),exports.forEachAsync=async(t,e,s)=>{await Promise.allSettled(t.map((r,n)=>e.call(s,r,n,t)?.catch(H))).catch(H)},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(H)),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(H))},exports.forLoop=(t,e,s)=>{for(let r=1;r<=t&&!1!==e.call(s,r,t);r++);return t},exports.hexToRgb=w,exports.hslToRgb=(t,e,s)=>{t/=60;const r=(1-Math.abs(2*s-1))*e,n=r*(1-Math.abs(t%2-1));let a=[0,0,0];t<=1?a=[r,n,0]:t<=2?a=[n,r,0]:t<=3?a=[0,r,n]:t<=4?a=[0,n,r]:t<=5?a=[n,0,r]:t<=6&&(a=[r,0,n]);const i=s-.5*r;return[Math.round(255*(a[0]+i)),Math.round(255*(a[1]+i)),Math.round(255*(a[2]+i))]},exports.inArray=(t,e)=>-1!=e.indexOf(t),exports.includesArray=(t,e)=>t.every(t=>e.includes(t)),exports.isArray=a,exports.isBoolean=i,exports.isCharacter=t=>/^[\w]$/.test(t),exports.isDate=t=>"date"==n(t),exports.isDef=o,exports.isDigit=V,exports.isEmpty=F,exports.isFalse=t=>!q(t),exports.isFloat=u,exports.isFunction=h,exports.isInteger=c,exports.isLetter=z,exports.isMap=t=>"map"==n(t),exports.isNotEmpty=t=>!F(t),exports.isNull=t=>null===t,exports.isNumber=l,exports.isObject=p,exports.isPlainObject=v,exports.isRegExp=t=>"regexp"==n(t),exports.isScalar=t=>-1!=x.indexOf(n(t)),exports.isSet=t=>"set"==n(t),exports.isSpecialChar=Z,exports.isString=m,exports.isSymbol=t=>"symbol"==typeof t,exports.isTrue=q,exports.isUndefined=d,exports.isValidDate=t=>{const e=new Date(t);return e.getTime()==e.getTime()&&t==e.toISOString().slice(0,10)},exports.lastDayDate=t=>new Date(t.getFullYear(),t.getMonth()+1,0,t.getHours(),t.getMinutes(),t.getSeconds()),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=_,exports.map=E,exports.mask=at,exports.maskMoney=(t,e,s)=>(s++,e=parseInt((e||"0").replace(/\D/g,"")).toString(),it(t,e.length<s?("0".repeat(s)+e).slice(-1*s):e)),exports.maskReverse=it,exports.maskTest=(t,e)=>t.length==at(t,e).length,exports.merge=lt,exports.msToString=t=>{const e=[];return $.forEach(s=>{const r=U[s],n=(t-t%r)/r;n&&(t-=n*r,e.push(n.toString()+s))}),e.join(" ")},exports.noop=H,exports.parseMs=t=>{const e=/(-?(?:\d+)?\.?\d+) *(ms|s|m|h|d|w|y)/gm;let s,r=0;for(;null!==(s=e.exec(t));)s.index===e.lastIndex&&e.lastIndex++,r+=parseFloat(s[1])*U[s[2]]||0;return r},exports.parseSize=t=>{if(l(t))return t+"px";const e=(t=>/(-?(?:\d+)?\.?\d+) *(px|%|cm|mm|in|pt|pc|en|ex|ch|rem|vw|vh|vmin|vmax)*/g.exec(t))(t);return e?parseFloat(e[1])+(e[2]||"px"):"0px"},exports.random=e,exports.randomCase=t=>t.split("").map(t=>Math.random()<.5?t.toUpperCase():t.toLowerCase()).join(""),exports.randomElement=t=>t.length?t[e(0,t.length-1)]:null,exports.rangeArray=(t,e,s=1)=>Array.from({length:(e-t)/s+1},(e,r)=>t+r*s),exports.rgbToHex=M,exports.rgbToHsl=(t,e,s)=>{const[r,n,a]=((...t)=>t.map(t=>t/255))(t,e,s),i=Math.max(r,n,a),o=Math.min(r,n,a),l=i-o,u=(o+i)/2;return[60*O(l,i,r,n,a),A(l,u),u]},exports.shadeColor=R,exports.shuffleArray=s,exports.shuffleString=W,exports.sleep=t=>new Promise(e=>setTimeout(e,t)),exports.stringReverse=tt,exports.tintColor=T,exports.toArray=t=>a(t)?t:o(t)?[t]:[],exports.toBool=f,exports.type=n,exports.uniqueArray=t=>t.filter((t,e,s)=>s.indexOf(t)===e),exports.uniqueID=k,exports.upperCamelCase=et,exports.uuidv1=()=>{const t=1e4*(Date.now()+122192928e5),s=(4294967295&t)>>>0,r=(t/4294967296&65535)>>>0,n=(t/281474976710656&4095)>>>0,a=e(0,s),i=(t,e)=>t.toString(16).padStart(e,"0");return[i(s,8),i(r,4),i(4096|n,4),i(a>>8&63|128,2)+i(255&a,2),k(12)].join("-")},exports.uuidv1ToTimestamp=t=>{const e=t.replace(/-/g,""),s=parseInt(e.slice(0,8),16),r=parseInt(e.slice(8,12),16),n=(4095&parseInt(e.slice(12,16),16))*Math.pow(2,48)+r*Math.pow(2,32)+s;return Math.floor((n-122192928e9)/1e4)},exports.uuidv4=()=>{const t=[];t.push(...Array(16).fill(0).map(()=>e(0,255))),t[6]=15&t[6]|64;const s=t.map(t=>t.toString(16).padStart(2,"0")).join("");return[s.slice(0,8),s.slice(8,12),s.slice(12,16),s.slice(16,20),s.slice(20)].join("-")},exports.uuidv7=()=>{const t=Date.now(),s=[];s[0]=t/2**40&255,s[1]=t/2**32&255,s[2]=t>>>24&255,s[3]=t>>>16&255,s[4]=t>>>8&255,s[5]=255&t,s.push(...Array(10).fill(0).map(()=>e(0,255))),s[6]=15&s[6]|112,s[8]=63&s[8]|128;const r=s.map(t=>t.toString(16).padStart(2,"0")).join("");return[r.slice(0,8),r.slice(8,12),r.slice(12,16),r.slice(16,20),r.slice(20)].join("-")},exports.uuidv7ToTimestamp=t=>parseInt(t.replace(/-/g,"").slice(0,12),16);
|
|
7
|
+
"use strict";const t=(t,e,s)=>Math.max(e,Math.min(s,t)),e=(t,e)=>Math.floor(Math.random()*(e-t+1)+t),s=t=>{for(let s=t.length-1;s>0;s--){const r=e(0,s);[t[s],t[r]]=[t[r],t[s]]}return t},r={},n=t=>null==t?"null":r[r.toString.call(t)]||"object";["Array","AsyncFunction","Boolean","Date","Function","Map","Number","Object","RegExp","Set","String"].forEach(t=>r["[object "+t+"]"]=t.toLowerCase());const a=t=>"array"==n(t),i=t=>"boolean"==n(t),o=t=>"null"!=n(t),u=t=>"number"==n(t),l=t=>u(t)&&!!(t%1),h=t=>"function"==typeof t,c=t=>u(t)&&!(t%1),p=t=>"object"==n(t),v=t=>p(t)&&t.constructor===Object,x=["boolean","number","string"],m=t=>"string"==typeof t,d=t=>void 0===t,g=[1,"1",!0,"true"],f=t=>-1!=g.indexOf(t),y=(t,e,s)=>{for(let r=0;r<t.length&&!1!==e.call(s,t[r],r,t);r++);return t},S=(t,e,s)=>{let r="";const n=Object.keys(t);for(let a=0;a<n.length&&(r=n[a],!1!==e.call(s,t[r],r,t));a++);return t},E=(t,e,s)=>Object.fromEntries(Object.entries(t).map(([r,n])=>[r,e.call(s,n,r,t)])),b=t=>parseInt(t??"0",16)||0,w=t=>t.replace(/^#/,"").match(/.{1,2}/g)?.map(b)||[],T=t=>("0"+t.toString(16)).slice(-2),C=(t,e,s)=>"#"+T(t)+T(e)+T(s),I=(e,s)=>{const r=w(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=w(e);s=t(s,0,1);const[n,a,i]=r.map(t=>Math.round(t+(255-t)*s));return C(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 O{constructor(t){this.key=this.shuffle(O.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[O.dictionary.indexOf(t[s]),O.dictionary.indexOf(e[s%e.length])]}result(t,e,s){return O.dictionary[(s?t-e+O.dictionary.length:t+e)%O.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")}}O.dictionary="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";const k=(t=64)=>Array(Math.ceil(t/2)).fill(0).map(()=>e(0,255).toString(16).padStart(2,"0")).join("").slice(0,t),j=t=>("0"+t.toString()).slice(-2),N={"%y":(t,e)=>j(e?t.getUTCFullYear():t.getFullYear()),"%Y":(t,e)=>(e?t.getUTCFullYear():t.getFullYear()).toString(),"%m":(t,e)=>j((e?t.getUTCMonth():t.getMonth())+1),"%d":(t,e)=>j(e?t.getUTCDate():t.getDate()),"%H":(t,e)=>j(e?t.getUTCHours():t.getHours()),"%M":(t,e)=>j(e?t.getUTCMinutes():t.getMinutes()),"%S":(t,e)=>j(e?t.getUTCSeconds():t.getSeconds())},U=(t,e,s)=>(e=e??new Date,t.replace(/%[yYmdHMS]/g,t=>N[t]?N[t](e,s):t.slice(1))),Y=t=>{const e=new Date(t);return e.getTime()==e.getTime()&&t==e.toISOString().slice(0,10)},L=36e5,P=24*L,F={ms:1,s:1e3,m:6e4,h:L,d:P,w:7*P,y:315576e5},$=["y","d","h","m","s","ms"];const q=t=>0==(t?.length??0),H=["",0,"0",null,!1,void 0],X=t=>-1==H.indexOf(t),K=()=>{},_=(t,e,s)=>e(t.toLowerCase().replace(/\W+/g," ")).replace(/\s/g,s??""),Q=(t,e)=>_(t,t=>t.replace(/\s(\w)/g,t=>t.toUpperCase()),e),B=Q,J=/&(amp|apos|lt|gt|nbsp|quot);/g,V={amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",quot:'"'},z=t=>/^[\d]$/.test(t),Z=t=>/^[A-Za-z]$/.test(t),W=t=>/^[^\w]$/.test(t),G=t=>s(t.split("")).join("");class tt{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 tt).chars()}lower(){return this.hasLower=!0,this}static lower(){return(new tt).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=G(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 tt).numbers()}space(){return this.hasSpace=!0,this}static space(){return(new tt).space()}symbols(){return this.hasSymbols=!0,this}static symbols(){return(new tt).symbols()}upper(){return this.hasUpper=!0,this}static upper(){return(new tt).upper()}}const et=t=>t.split("").reverse().join(""),st=(t,e)=>_(t,t=>t.replace(/(\w)(\w*)/g,(t,e,s)=>e.toUpperCase()+s),e),rt=(t,e)=>e(t.value)?t.value:(t=>(t.maskIndex--,""))(t),nt={"#":t=>t.value,0:t=>rt(t,z),9:t=>rt(t,z),A:t=>rt(t,Z),Z:t=>rt(t,Z),L:t=>rt(t,Z).toLowerCase(),U:t=>rt(t,Z).toUpperCase(),S:t=>rt(t,W)},at=t=>{t.maskIndex++,t.textIndex++;const{mask:e,maskIndex:s,text:r,textIndex:n}=t;t.key=e[s],t.value=r[n];const{key:a,value:i}=t;return d(a)||d(i)?"":(t=>nt[t.key]?nt[t.key](t):(t.key!=t.value&&t.textIndex--,t.key))(t)+at(t)},it=(t,e)=>at({mask:t,maskIndex:-1,text:e,textIndex:-1,key:"",value:""}),ot=(t,e)=>et(it(et(t),et(e))),ut=(t,e)=>t.reduce((t,s)=>({...t,[s]:e[s]}),{}),lt=t=>t instanceof Date?new Date(t.getTime()):a(t)?t.map(t=>lt(t)):p(t)?E(t,t=>lt(t)):t,ht=(t,...e)=>{if(!e.length)return t;const s=e.shift();if(v(t)&&v(s))for(const e in s)v(s[e])?(t[e]||(t={...t,[e]:{}}),t[e]=ht(t[e],s[e])):t={...t,[e]:s[e]};return ht(t,...e)};class ct{}var pt,vt,xt,mt,dt,gt,ft,yt,St;ct.DESCRIPTION=Symbol("DESCRIPTION"),ct.ERROR=Symbol("ERROR"),ct.EXAMPLE=Symbol("EXAMPLE"),ct.INDEXES=Symbol("INDEXES"),ct.KEYS=Symbol("KEYS"),ct.LIST=Symbol("LIST"),ct.NAME=Symbol("NAME"),ct.REQUIRED=Symbol("REQUIRED"),ct.SOURCE=Symbol("SOURCE"),ct.TYPE=Symbol("TYPE");class Et{constructor(t){this[pt]="",this[vt]="",this[xt]=null,this[mt]="",this[dt]="any",this[gt]=!1,this.rules=[],this.custom=[],this[ct.TYPE]=t}description(t){return this[ct.DESCRIPTION]=t,this}example(t){return this[ct.EXAMPLE]=t,this}empty(t){const e=t;return this.unshift(({value:t})=>{const s=o(t);return{break:!o(e)&&!s,value:s?t:h(e)?e():e}})}equal(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t==n?{value:t}:this.invalid(`.equal(${n})`,e)})}error(t){return m(t)&&(this[ct.ERROR]=t),this}filter(...t){const e=t;return this.unshift(({value:t})=>{const s=-1==e.indexOf(t);return{break:!s,value:s?t:void 0}})}fn(t){return h(t)?t:()=>t}from(t){return this[ct.SOURCE]=t,this}invalid(t,e){return t=`[${this[ct.TYPE]}]${t}`,{error:this[ct.ERROR]?this[ct.ERROR]:this[ct.NAME]?this[ct.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[ct.REQUIRED]=!0,this.unshift(({value:e})=>o(e)?{value:e}:this.invalid(".required",t))}test(t){return!m(this.validate(t).error)}async testAsync(t){return!m((await this.validateAsync(t)).error)}toString(){return this[ct.TYPE]}unshift(t){return this.rules.unshift(t),this}validate(t,e){if(this.custom.length)return this.invalid("[async]");let s={value:t};for(let t=0;t<this.rules.length;t++){if(s=this.rules[t]({value:s.value,context:e}),s.error?.length)return{error:s.error,...s.message?{message:s.message}:{}};if(s.break)return{value:s.value}}return{value:s.value}}async validateAsync(t,e){let s=this.validate(t,e);if(s.error)return{error:s.error};for(let t=0;t<this.custom.length;t++){if(s=await this.custom[t]({value:s.value}),s.error)return{error:s.error};if(s.break)return{value:s.value}}return{value:s.value}}}pt=ct.NAME,vt=ct.DESCRIPTION,xt=ct.EXAMPLE,ct.SOURCE,mt=ct.ERROR,dt=ct.TYPE,gt=ct.REQUIRED;class bt extends Et{constructor(t){super("array"),this[ft]=[],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[ct.INDEXES].push(s),s?this.push(({value:t})=>{const r=[];s[ct.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[ct.INDEXES].length?this[ct.INDEXES].map(t=>t.model()):this[ct.TYPE]}toString(){return this[ct.INDEXES].length?JSON.stringify(this.model(),null,4):this[ct.TYPE]}}ft=ct.INDEXES;class wt extends Et{constructor(t){super("boolean"),this.push(({value:e})=>i(e)?{value:e}:this.invalid("",t))}parse(){return this.unshift(({value:t})=>({value:o(t)?f(t):t}))}}class Tt extends Et{constructor(t){super("date"),this.push(({value:e})=>m(e)&&Y(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 Ct extends Et{constructor(t){super("enum"),this[yt]=[],this.push(({value:e})=>o(e)?{value:e}:this.invalid(`('${this[ct.LIST].join("', '")}')`,t))}list(t,e){const s=t;return s&&this[ct.LIST].push(...s),s?this.push(({value:t})=>-1!=this[ct.LIST].indexOf(t)?{value:t}:this.invalid(`('${this[ct.LIST].join("', '")}')`,e)):this}toString(){return`${this[ct.TYPE]}('${this[ct.LIST].join("', '")}')`}}yt=ct.LIST;class It extends Et{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})=>l(e)?{value:e}:this.invalid(".float",t))}integer(t){return this.push(({value:e})=>c(e)?{value:e}:this.invalid(".integer",t))}max(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t<=n?{value:t}:this.invalid(`.max(${n})`,e)})}min(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t>=n?{value:t}:this.invalid(`.min(${n})`,e)})}parse(){return this.unshift(({value:t})=>({value:o(t)?parseFloat(t.toString()):t}))}}class Mt extends Et{constructor(t){super("object"),this[St]={},this.push(({value:e})=>p(e)?{value:e}:this.invalid("",t))}keys(t,e){const s=t;return s&&(this[ct.KEYS]={...this[ct.KEYS],...s}),s?this.push(({value:t})=>{const r=[],n={};return Object.keys(s).forEach(a=>{const i=s[a];i[ct.NAME]=i[ct.SOURCE]??a;const{error:u,message:l,value:h}=i.validate(t[i[ct.NAME]],n);!e&&l&&(e=l),u&&r.push(u),o(h)&&(n[a]=h)}),r.length?this.invalid("{ "+r.join(", ")+" }",e):{value:n}}):this}model(){const t={},e=Object.keys(this[ct.KEYS]);return e.length&&e.forEach(e=>t[e]=this[ct.KEYS][e].model()),e.length?t:this[ct.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[ct.KEYS]).length?JSON.stringify(this.model(),null,4):this[ct.TYPE]}}St=ct.KEYS;class Dt extends Et{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:Q(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:it(e({value:t,context:s}),t)}))}min(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t.length>=n?{value:t}:this.invalid(`.min(${n})`,e)})}parse(){return this.unshift(({value:t})=>({value:p(t)?JSON.stringify(t):o(t)?t.toString():t}))}required(t){return this[ct.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:st(t)}))}}class Rt{static array(t,e){return new bt(e).items(t)}static boolean(t){return new wt(t)}static date(t){return new Tt(t)}static enum(t,e){return new Ct(e).list(t)}static number(t){return new It(t)}static object(t,e){return new Mt(e).keys(t)}static ref(t,e){return({context:s})=>s&&o(s[t])?s[t]:e}static string(t){return new Dt(t)}test(t,...e){return!m(Rt.validate(t,...e).error)}async testAsync(t,...e){return!m((await Rt.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=O,exports.RandomString=tt,exports.Validation=Rt,exports.ValidationBase=Et,exports.ValidationKeys=ct,exports.allowed=ut,exports.cache=()=>{const t=[],e=[];return s=>{let r=t.indexOf(s);return-1==r&&(t.push(s),e.push({}),r=e.length-1),e[r]}},exports.camelCase=B,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=lt,exports.colorPalette=(t,e)=>E(e??D,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=U,exports.dateRange=(t,e)=>{const s=new Date(t),r=[];for(;t<e;)s.setDate(s.getDate()+1),r.push(new Date(s));return r},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(J,(t,e)=>V[e]).replace(/&#(\d+);/gi,(t,e)=>String.fromCharCode(parseInt(e,10))),exports.denied=(t,e)=>ut(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()),exports.forEachAsync=async(t,e,s)=>{await Promise.allSettled(t.map((r,n)=>e.call(s,r,n,t)?.catch(K))).catch(K)},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(K)),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(K))},exports.forLoop=(t,e,s)=>{for(let r=1;r<=t&&!1!==e.call(s,r,t);r++);return t},exports.hexToRgb=w,exports.hslToRgb=(t,e,s)=>{t/=60;const r=(1-Math.abs(2*s-1))*e,n=r*(1-Math.abs(t%2-1));let a=[0,0,0];t<=1?a=[r,n,0]:t<=2?a=[n,r,0]:t<=3?a=[0,r,n]:t<=4?a=[0,n,r]:t<=5?a=[n,0,r]:t<=6&&(a=[r,0,n]);const i=s-.5*r;return[Math.round(255*(a[0]+i)),Math.round(255*(a[1]+i)),Math.round(255*(a[2]+i))]},exports.inArray=(t,e)=>-1!=e.indexOf(t),exports.includesArray=(t,e)=>t.every(t=>e.includes(t)),exports.isArray=a,exports.isBoolean=i,exports.isCharacter=t=>/^[\w]$/.test(t),exports.isDate=t=>"date"==n(t),exports.isDef=o,exports.isDigit=z,exports.isEmpty=q,exports.isFalse=t=>!X(t),exports.isFloat=l,exports.isFunction=h,exports.isInteger=c,exports.isLetter=Z,exports.isMap=t=>"map"==n(t),exports.isNotEmpty=t=>!q(t),exports.isNull=t=>null===t,exports.isNumber=u,exports.isObject=p,exports.isPlainObject=v,exports.isRegExp=t=>"regexp"==n(t),exports.isScalar=t=>-1!=x.indexOf(n(t)),exports.isSet=t=>"set"==n(t),exports.isSpecialChar=W,exports.isString=m,exports.isSymbol=t=>"symbol"==typeof t,exports.isTrue=X,exports.isUndefined=d,exports.isValidDate=Y,exports.lastDayDate=t=>new Date(t.getFullYear(),t.getMonth()+1,0,t.getHours(),t.getMinutes(),t.getSeconds()),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=Q,exports.map=E,exports.mask=it,exports.maskMoney=(t,e,s)=>(s++,e=parseInt((e||"0").replace(/\D/g,"")).toString(),ot(t,e.length<s?("0".repeat(s)+e).slice(-1*s):e)),exports.maskReverse=ot,exports.maskTest=(t,e)=>t.length==it(t,e).length,exports.merge=ht,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=K,exports.parseMs=t=>{const e=/(-?(?:\d+)?\.?\d+) *(ms|s|m|h|d|w|y)/gm;let s,r=0;for(;null!==(s=e.exec(t));)s.index===e.lastIndex&&e.lastIndex++,r+=parseFloat(s[1])*F[s[2]]||0;return r},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),u=i-o,l=(o+i)/2;return[60*R(u,i,r,n,a),A(u,l),l]},exports.shadeColor=I,exports.shuffleArray=s,exports.shuffleString=G,exports.sleep=t=>new Promise(e=>setTimeout(e,t)),exports.stringReverse=et,exports.tintColor=M,exports.toArray=t=>a(t)?t:o(t)?[t]:[],exports.toBool=f,exports.type=n,exports.uniqueArray=t=>t.filter((t,e,s)=>s.indexOf(t)===e),exports.uniqueID=k,exports.upperCamelCase=st,exports.uuidv1=()=>{const t=1e4*(Date.now()+122192928e5),s=(4294967295&t)>>>0,r=(t/4294967296&65535)>>>0,n=(t/281474976710656&4095)>>>0,a=e(0,s),i=(t,e)=>t.toString(16).padStart(e,"0");return[i(s,8),i(r,4),i(4096|n,4),i(a>>8&63|128,2)+i(255&a,2),k(12)].join("-")},exports.uuidv1ToTimestamp=t=>{const e=t.replace(/-/g,""),s=parseInt(e.slice(0,8),16),r=parseInt(e.slice(8,12),16),n=(4095&parseInt(e.slice(12,16),16))*Math.pow(2,48)+r*Math.pow(2,32)+s;return Math.floor((n-122192928e9)/1e4)},exports.uuidv4=()=>{const t=[];t.push(...Array(16).fill(0).map(()=>e(0,255))),t[6]=15&t[6]|64;const s=t.map(t=>t.toString(16).padStart(2,"0")).join("");return[s.slice(0,8),s.slice(8,12),s.slice(12,16),s.slice(16,20),s.slice(20)].join("-")},exports.uuidv7=()=>{const t=Date.now(),s=[];s[0]=t/2**40&255,s[1]=t/2**32&255,s[2]=t>>>24&255,s[3]=t>>>16&255,s[4]=t>>>8&255,s[5]=255&t,s.push(...Array(10).fill(0).map(()=>e(0,255))),s[6]=15&s[6]|112,s[8]=63&s[8]|128;const r=s.map(t=>t.toString(16).padStart(2,"0")).join("");return[r.slice(0,8),r.slice(8,12),r.slice(12,16),r.slice(16,20),r.slice(20)].join("-")},exports.uuidv7ToTimestamp=t=>parseInt(t.replace(/-/g,"").slice(0,12),16),exports.uuidv8=t=>{const s=Date.now(),r=[];r[0]=s/2**40&255,r[1]=s/2**32&255,r[2]=s>>>24&255,r[3]=s>>>16&255,r[4]=s>>>8&255,r[5]=255&s,r.push(...Array(8).fill(0).map(()=>e(0,255))),r[6]=15&r[6]|128,r[8]=63&r[8]|128;const n=r.map(t=>t.toString(16).padStart(2,"0")).join("");return[n.slice(0,8),n.slice(8,12),n.slice(12,16),O.hex(t??"").slice(4),n.slice(16)].join("-")};
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* @andrewcaires/utils.js v0.4.
|
|
2
|
+
* @andrewcaires/utils.js v0.4.13
|
|
3
3
|
* JavaScript utility library for web and nodejs development
|
|
4
4
|
* (c) 2025 Andrew Caires
|
|
5
5
|
* @license: MIT
|
|
@@ -18,6 +18,7 @@ declare const isDef: <T = any>(test: any) => test is T;
|
|
|
18
18
|
|
|
19
19
|
declare const isFloat: (test: any) => test is number;
|
|
20
20
|
|
|
21
|
+
type TypeAnyFunction<T = any> = (...args: Array<any>) => T;
|
|
21
22
|
type TypeCallbackFunction<T = any> = (...args: Array<any>) => T;
|
|
22
23
|
type TypeArray<T> = Array<T>;
|
|
23
24
|
type TypeArrayAny = TypeArray<any>;
|
|
@@ -120,6 +121,7 @@ declare class Hash {
|
|
|
120
121
|
private index;
|
|
121
122
|
private result;
|
|
122
123
|
private shuffle;
|
|
124
|
+
static hex(str: string): string;
|
|
123
125
|
}
|
|
124
126
|
|
|
125
127
|
declare const uniqueID: (length?: number) => string;
|
|
@@ -134,7 +136,9 @@ declare const uuidv7: () => string;
|
|
|
134
136
|
|
|
135
137
|
declare const uuidv7ToTimestamp: (uuid: string) => number;
|
|
136
138
|
|
|
137
|
-
declare const
|
|
139
|
+
declare const uuidv8: (hash?: string) => string;
|
|
140
|
+
|
|
141
|
+
declare const dateFormat: (format: string, date?: Date, utc?: boolean) => string;
|
|
138
142
|
|
|
139
143
|
declare const dateRange: (start: Date, end: Date) => Array<Date>;
|
|
140
144
|
|
|
@@ -221,10 +225,21 @@ declare const random: (min: number, max: number) => number;
|
|
|
221
225
|
|
|
222
226
|
declare const allowed: (allowed: Array<string>, target: TypeObjectAny) => TypeObjectAny;
|
|
223
227
|
|
|
228
|
+
declare const clone: <T>(value: T) => T;
|
|
229
|
+
|
|
224
230
|
declare const denied: (denied: Array<string>, target: TypeObjectAny) => TypeObjectAny;
|
|
225
231
|
|
|
226
232
|
declare const merge: (target: TypeObjectAny, ...sources: Array<TypeObjectAny>) => TypeObjectAny;
|
|
227
233
|
|
|
234
|
+
type AsyncQueueTask<T = any> = () => Promise<T>;
|
|
235
|
+
|
|
236
|
+
declare class AsyncQueue {
|
|
237
|
+
private running;
|
|
238
|
+
private queue;
|
|
239
|
+
push<T>(task: AsyncQueueTask<T>): Promise<T>;
|
|
240
|
+
private run;
|
|
241
|
+
}
|
|
242
|
+
|
|
228
243
|
type ForEachCallback<T> = TypeCallback<T, number, Array<T>, void | Promise<void>>;
|
|
229
244
|
|
|
230
245
|
declare const forEachAsync: <T>(array: Array<T>, callback: ForEachCallback<T>, thisArg?: any) => Promise<void>;
|
|
@@ -440,5 +455,5 @@ declare class Validation {
|
|
|
440
455
|
|
|
441
456
|
type ValidationCallbackAsync<T = any> = (value: IValidationInput<T>) => Promise<IValidationOutput<T>>;
|
|
442
457
|
|
|
443
|
-
export { EventEmitter, Hash, RandomString, Validation, ValidationBase, ValidationKeys, allowed, cache, camelCase, chunkArray, clamp, colorPalette, compareArray, countArray, cutText, dateFormat, dateRange, debounce, decodeHTML, denied, each, encodeHTML, firstDayDate, forEachAsync, forEachIndex, forEachKey, forEachPage, forEachSeries, forLoop, hexToRgb, hslToRgb, inArray, includesArray, isArray, isBoolean, isCharacter, isDate, isDef, isDigit, isEmpty, isFalse, isFloat, isFunction, isInteger, isLetter, isMap, isNotEmpty, isNull, isNumber, isObject, isPlainObject, isRegExp, isScalar, isSet, isSpecialChar, isString, isSymbol, isTrue, isUndefined, isValidDate, lastDayDate, lerp, loop, lowerCamelCase, map, mask, maskMoney, maskReverse, maskTest, merge, msToString, noop, parseMs, parseSize, random, randomCase, randomElement, rangeArray, rgbToHex, rgbToHsl, shadeColor, shuffleArray, shuffleString, sleep, stringReverse, tintColor, toArray, toBool, type, uniqueArray, uniqueID, upperCamelCase, uuidv1, uuidv1ToTimestamp, uuidv4, uuidv7, uuidv7ToTimestamp };
|
|
444
|
-
export type { CacheCallback, EachCallback, EachValue, EventCallback, EventList, ForEachCallback, IDebounceCallbacks, IEventDisposable, ILoopCallbacks, IValidationFunction, IValidationInput, IValidationOutput, TypeArray, TypeArrayAny, TypeArrayFunction, TypeArrayNumber, TypeArrayString, TypeCallback, TypeCallbackArray, TypeCallbackFunction, TypeCallbackMap, TypeCallbackObject, TypeKey, TypeNullable, TypeObject, TypeObjectAny, TypeObjectBoolean, TypeObjectFunction, TypeObjectKeys, TypeObjectKeysFunction, TypeObjectNullable, TypeObjectNumber, TypeObjectString, TypeScalar, ValidationCallback, ValidationCallbackAsync, forEachPageCallback };
|
|
458
|
+
export { AsyncQueue, EventEmitter, Hash, RandomString, Validation, ValidationBase, ValidationKeys, allowed, cache, camelCase, chunkArray, clamp, clone, colorPalette, compareArray, countArray, cutText, dateFormat, dateRange, debounce, decodeHTML, denied, each, encodeHTML, firstDayDate, forEachAsync, forEachIndex, forEachKey, forEachPage, forEachSeries, forLoop, hexToRgb, hslToRgb, inArray, includesArray, isArray, isBoolean, isCharacter, isDate, isDef, isDigit, isEmpty, isFalse, isFloat, isFunction, isInteger, isLetter, isMap, isNotEmpty, isNull, isNumber, isObject, isPlainObject, isRegExp, isScalar, isSet, isSpecialChar, isString, isSymbol, isTrue, isUndefined, isValidDate, lastDayDate, lerp, loop, lowerCamelCase, map, mask, maskMoney, maskReverse, maskTest, merge, msToString, noop, parseMs, parseSize, random, randomCase, randomElement, rangeArray, rgbToHex, rgbToHsl, shadeColor, shuffleArray, shuffleString, sleep, stringReverse, tintColor, toArray, toBool, type, uniqueArray, uniqueID, upperCamelCase, uuidv1, uuidv1ToTimestamp, uuidv4, uuidv7, uuidv7ToTimestamp, uuidv8 };
|
|
459
|
+
export type { AsyncQueueTask, CacheCallback, EachCallback, EachValue, EventCallback, EventList, ForEachCallback, IDebounceCallbacks, IEventDisposable, ILoopCallbacks, IValidationFunction, IValidationInput, IValidationOutput, TypeAnyFunction, TypeArray, TypeArrayAny, TypeArrayFunction, TypeArrayNumber, TypeArrayString, TypeCallback, TypeCallbackArray, TypeCallbackFunction, TypeCallbackMap, TypeCallbackObject, TypeKey, TypeNullable, TypeObject, TypeObjectAny, TypeObjectBoolean, TypeObjectFunction, TypeObjectKeys, TypeObjectKeysFunction, TypeObjectNullable, TypeObjectNumber, TypeObjectString, TypeScalar, ValidationCallback, ValidationCallbackAsync, 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.13
|
|
3
3
|
* JavaScript utility library for web and nodejs development
|
|
4
4
|
* (c) 2025 Andrew Caires
|
|
5
5
|
* @license: MIT
|
|
6
6
|
*/
|
|
7
|
-
const t=(t,e)=>{const s=[];for(let r=0;r<t.length;r+=e)s.push(t.slice(r,r+e));return s},e=(t,e)=>t.length===e.length&&t.every((t,s)=>t===e[s]),s=t=>{const e={};return t.forEach(t=>{const s=t.toString();e[s]=(e[s]||0)+1}),e},r=(t,e)=>-1!=e.indexOf(t),n=(t,e)=>t.every(t=>e.includes(t)),i=(t,e,s)=>Math.max(e,Math.min(s,t)),a=(t,e,s)=>t+(e-t)*i(s,0,1),l=(t,e)=>Math.floor(Math.random()*(e-t+1)+t),u=t=>t.length?t[l(0,t.length-1)]:null,h=(t,e,s=1)=>Array.from({length:(e-t)/s+1},(e,r)=>t+r*s),o=t=>{for(let e=t.length-1;e>0;e--){const s=l(0,e);[t[e],t[s]]=[t[s],t[e]]}return t},c={},v=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 p=t=>"array"==v(t),m=t=>"boolean"==v(t),d=t=>"date"==v(t),g=t=>"null"!=v(t),f=t=>"number"==v(t),y=t=>f(t)&&!!(t%1),S=t=>"function"==typeof t,E=t=>f(t)&&!(t%1),x=t=>"map"==v(t),w=t=>null===t,b=t=>"object"==v(t),I=t=>b(t)&&t.constructor===Object,M=t=>"regexp"==v(t),O=["boolean","number","string"],R=t=>-1!=O.indexOf(v(t)),C=t=>"set"==v(t),D=t=>"string"==typeof t,A=t=>"symbol"==typeof t,T=t=>void 0===t,j=t=>p(t)?t:g(t)?[t]:[],k=t=>t.filter((t,e,s)=>s.indexOf(t)===e),N=[1,"1",!0,"true"],Y=t=>-1!=N.indexOf(t),L=()=>{const t=[],e=[];return s=>{let r=t.indexOf(s);return-1==r&&(t.push(s),e.push({}),r=e.length-1),e[r]}},P=(t,e,s)=>{for(let r=0;r<t.length&&!1!==e.call(s,t[r],r,t);r++);return t},U=(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},$=(t,e,s)=>p(t)?P(t,e,s):b(t)?U(t,e,s):t,X=(t,e,s)=>{for(let r=1;r<=t&&!1!==e.call(s,r,t);r++);return t},_=(t,e,s)=>Object.fromEntries(Object.entries(t).map(([r,n])=>[r,e.call(s,n,r,t)])),F=t=>parseInt(t??"0",16)||0,q=t=>t.replace(/^#/,"").match(/.{1,2}/g)?.map(F)||[],K=t=>("0"+t.toString(16)).slice(-2),H=(t,e,s)=>"#"+K(t)+K(e)+K(s),Q=(t,e)=>{const s=q(t);e=i(e,0,1);const[r,n,a]=s.map(t=>Math.round(t*e));return H(r,n,a)},J=(t,e)=>{const s=q(t);e=i(e,0,1);const[r,n,a]=s.map(t=>Math.round(t+(255-t)*e));return H(r,n,a)},Z={50:.95,100:.9,200:.75,300:.6,400:.3,500:0,600:-.1,700:-.25,800:-.4,900:-.55,950:-.71},z=(t,e)=>_(e??Z,e=>0==e?t:e>0?J(t,e):Q(t,1- -1*e)),B=(t,e,s)=>{t/=60;const r=(1-Math.abs(2*s-1))*e,n=r*(1-Math.abs(t%2-1));let i=[0,0,0];t<=1?i=[r,n,0]:t<=2?i=[n,r,0]:t<=3?i=[0,r,n]:t<=4?i=[0,n,r]:t<=5?i=[n,0,r]:t<=6&&(i=[r,0,n]);const a=s-.5*r;return[Math.round(255*(i[0]+a)),Math.round(255*(i[1]+a)),Math.round(255*(i[2]+a))]},W=(t,e,s,r,n)=>0===t?0:e===s?(r-n)/t%6:e===r?(n-s)/t+2:e===n?(s-r)/t+4:0,G=(t,e)=>0===t?0:t/(1-Math.abs(2*e-1)),V=(t,e,s)=>{const[r,n,i]=((...t)=>t.map(t=>t/255))(t,e,s),a=Math.max(r,n,i),l=Math.min(r,n,i),u=a-l,h=(l+a)/2;return[60*W(u,a,r,n,i),G(u,h),h]};class tt{constructor(t){this.key=this.shuffle(tt.dictionary,t,!1)}encrypt(t){return this.shuffle(t,this.key,!1)}decrypt(t){return this.shuffle(t,this.key,!0)}index(t,e,s){return[tt.dictionary.indexOf(t[s]),tt.dictionary.indexOf(e[s%e.length])]}result(t,e,s){return tt.dictionary[(s?t-e+tt.dictionary.length:t+e)%tt.dictionary.length]}shuffle(t,e,s){let r="";for(let n=0;n<t.length;n++){const[i,a]=this.index(t,e,n);r+=-1===i||-1===a?t[n]:this.result(i,a,s)}return r}}tt.dictionary="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";const et=(t=64)=>Array(Math.ceil(t/2)).fill(0).map(()=>l(0,255).toString(16).padStart(2,"0")).join("").slice(0,t),st=()=>{const t=1e4*(Date.now()+122192928e5),e=(4294967295&t)>>>0,s=(t/4294967296&65535)>>>0,r=(t/281474976710656&4095)>>>0,n=l(0,e),i=(t,e)=>t.toString(16).padStart(e,"0");return[i(e,8),i(s,4),i(4096|r,4),i(n>>8&63|128,2)+i(255&n,2),et(12)].join("-")},rt=t=>{const e=t.replace(/-/g,""),s=parseInt(e.slice(0,8),16),r=parseInt(e.slice(8,12),16),n=(4095&parseInt(e.slice(12,16),16))*Math.pow(2,48)+r*Math.pow(2,32)+s;return Math.floor((n-122192928e9)/1e4)},nt=()=>{const t=[];t.push(...Array(16).fill(0).map(()=>l(0,255))),t[6]=15&t[6]|64;const e=t.map(t=>t.toString(16).padStart(2,"0")).join("");return[e.slice(0,8),e.slice(8,12),e.slice(12,16),e.slice(16,20),e.slice(20)].join("-")},it=()=>{const t=Date.now(),e=[];e[0]=t/2**40&255,e[1]=t/2**32&255,e[2]=t>>>24&255,e[3]=t>>>16&255,e[4]=t>>>8&255,e[5]=255&t,e.push(...Array(10).fill(0).map(()=>l(0,255))),e[6]=15&e[6]|112,e[8]=63&e[8]|128;const s=e.map(t=>t.toString(16).padStart(2,"0")).join("");return[s.slice(0,8),s.slice(8,12),s.slice(12,16),s.slice(16,20),s.slice(20)].join("-")},at=t=>parseInt(t.replace(/-/g,"").slice(0,12),16),lt=t=>("0"+t.toString()).slice(-2),ut={"%y":t=>lt(t.getFullYear()),"%Y":t=>t.getFullYear().toString(),"%m":t=>lt(t.getMonth()+1),"%d":t=>lt(t.getDate()),"%H":t=>lt(t.getHours()),"%M":t=>lt(t.getMinutes()),"%S":t=>lt(t.getSeconds())},ht=(t,e)=>(e=e??new Date,t.replace(/%[yYmdHMS]/g,t=>ut[t]?ut[t](e):t.slice(1))),ot=(t,e)=>{const s=new Date(t),r=[];for(;t<e;)s.setDate(s.getDate()+1),r.push(new Date(s));return r},ct=t=>new Date(t.getFullYear(),t.getMonth(),1,t.getHours(),t.getMinutes(),t.getSeconds()),vt=t=>{const e=new Date(t);return e.getTime()==e.getTime()&&t==e.toISOString().slice(0,10)},pt=t=>new Date(t.getFullYear(),t.getMonth()+1,0,t.getHours(),t.getMinutes(),t.getSeconds()),mt=36e5,dt=24*mt,gt={ms:1,s:1e3,m:6e4,h:mt,d:dt,w:7*dt,y:315576e5},ft=["y","d","h","m","s","ms"],yt=t=>{const e=[];return ft.forEach(s=>{const r=gt[s],n=(t-t%r)/r;n&&(t-=n*r,e.push(n.toString()+s))}),e.join(" ")},St=t=>{const e=/(-?(?:\d+)?\.?\d+) *(ms|s|m|h|d|w|y)/gm;let s,r=0;for(;null!==(s=e.exec(t));)s.index===e.lastIndex&&e.lastIndex++,r+=parseFloat(s[1])*gt[s[2]]||0;return r},Et=(t,e)=>{let s;const r=()=>{s&&clearTimeout(s)};return{cancel:r,run(...n){r(),s=setTimeout(()=>t(...n),e)}}};class xt{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 wt=(t,e)=>{let s=!1;const r=async()=>{s&&(await t(),setTimeout(r,e))};return{start(){s||(s=!0,r())},stop(){s=!1}}},bt=t=>0==(t?.length??0),It=["",0,"0",null,!1,void 0],Mt=t=>-1==It.indexOf(t),Ot=t=>!Mt(t),Rt=t=>!bt(t),Ct=()=>{},Dt=(t,e,s)=>e(t.toLowerCase().replace(/\W+/g," ")).replace(/\s/g,s??""),At=(t,e)=>Dt(t,t=>t.replace(/\s(\w)/g,t=>t.toUpperCase()),e),Tt=At,jt=(t,e)=>{if(t.length>e){const s=t.substring(0,e).split(" ");return s.pop(),s.join(" ")+"..."}return t},kt=/&(amp|apos|lt|gt|nbsp|quot);/g,Nt={amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",quot:'"'},Yt=t=>t.replace(kt,(t,e)=>Nt[e]).replace(/&#(\d+);/gi,(t,e)=>String.fromCharCode(parseInt(e,10))),Lt=t=>t.replace(/[^0-9A-Za-z ]/g,t=>"&#"+t.charCodeAt(0)+";"),Pt=t=>/^[\w]$/.test(t),Ut=t=>/^[\d]$/.test(t),$t=t=>/^[A-Za-z]$/.test(t),Xt=t=>/^[^\w]$/.test(t),_t=t=>{if(f(t))return t+"px";const e=(t=>/(-?(?:\d+)?\.?\d+) *(px|%|cm|mm|in|pt|pc|en|ex|ch|rem|vw|vh|vmin|vmax)*/g.exec(t))(t);return e?parseFloat(e[1])+(e[2]||"px"):"0px"},Ft=t=>t.split("").map(t=>Math.random()<.5?t.toUpperCase():t.toLowerCase()).join(""),qt=t=>o(t.split("")).join("");class Kt{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 Kt).chars()}lower(){return this.hasLower=!0,this}static lower(){return(new Kt).lower()}make(t){let e="";this.hasSpace&&(e+=this._space),this.hasNumbers&&(e+=this._numbers),this.hasSymbols&&(e+=this._symbols),this.hasUpper&&!this.hasChars&&(e+=this._upper),this.hasLower&&!this.hasChars&&(e+=this._lower),this.hasChars&&(e+=this._chars);let s="";if(t&&e.length){e=qt(e);for(let r=0;r<t;r++)s+=e.charAt(l(0,e.length-1))}return s}numbers(){return this.hasNumbers=!0,this}static numbers(){return(new Kt).numbers()}space(){return this.hasSpace=!0,this}static space(){return(new Kt).space()}symbols(){return this.hasSymbols=!0,this}static symbols(){return(new Kt).symbols()}upper(){return this.hasUpper=!0,this}static upper(){return(new Kt).upper()}}const Ht=t=>t.split("").reverse().join(""),Qt=(t,e)=>Dt(t,t=>t.replace(/(\w)(\w*)/g,(t,e,s)=>e.toUpperCase()+s),e),Jt=(t,e)=>e(t.value)?t.value:(t=>(t.maskIndex--,""))(t),Zt={"#":t=>t.value,0:t=>Jt(t,Ut),9:t=>Jt(t,Ut),A:t=>Jt(t,$t),Z:t=>Jt(t,$t),L:t=>Jt(t,$t).toLowerCase(),U:t=>Jt(t,$t).toUpperCase(),S:t=>Jt(t,Xt)},zt=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 T(i)||T(a)?"":(t=>Zt[t.key]?Zt[t.key](t):(t.key!=t.value&&t.textIndex--,t.key))(t)+zt(t)},Bt=(t,e)=>zt({mask:t,maskIndex:-1,text:e,textIndex:-1,key:"",value:""}),Wt=(t,e)=>Ht(Bt(Ht(t),Ht(e))),Gt=(t,e,s)=>(s++,e=parseInt((e||"0").replace(/\D/g,"")).toString(),Wt(t,e.length<s?("0".repeat(s)+e).slice(-1*s):e)),Vt=(t,e)=>t.length==Bt(t,e).length,te=(t,e)=>t.reduce((t,s)=>({...t,[s]:e[s]}),{}),ee=(t,e)=>te(Object.keys(e).filter(e=>-1==t.indexOf(e)),e),se=(t,...e)=>{if(!e.length)return t;const s=e.shift();if(I(t)&&I(s))for(const e in s)I(s[e])?(t[e]||(t={...t,[e]:{}}),t[e]=se(t[e],s[e])):t={...t,[e]:s[e]};return se(t,...e)},re=async(t,e,s)=>{await Promise.allSettled(t.map((r,n)=>e.call(s,r,n,t)?.catch(Ct))).catch(Ct)},ne=async t=>{let e=!0;const s=()=>e=!0;let r=1;for(;e;)e=!1,await(t(r,s)?.catch(Ct)),r+=1},ie=async(t,e,s)=>{for(let r=0;r<t.length;r++)await(e.call(s,t[r],r,t)?.catch(Ct))},ae=t=>new Promise(e=>setTimeout(e,t));class le{}var ue,he,oe,ce,ve,pe,me,de,ge;le.DESCRIPTION=Symbol("DESCRIPTION"),le.ERROR=Symbol("ERROR"),le.EXAMPLE=Symbol("EXAMPLE"),le.INDEXES=Symbol("INDEXES"),le.KEYS=Symbol("KEYS"),le.LIST=Symbol("LIST"),le.NAME=Symbol("NAME"),le.REQUIRED=Symbol("REQUIRED"),le.SOURCE=Symbol("SOURCE"),le.TYPE=Symbol("TYPE");class fe{constructor(t){this[ue]="",this[he]="",this[oe]=null,this[ce]="",this[ve]="any",this[pe]=!1,this.rules=[],this.custom=[],this[le.TYPE]=t}description(t){return this[le.DESCRIPTION]=t,this}example(t){return this[le.EXAMPLE]=t,this}empty(t){const e=t;return this.unshift(({value:t})=>{const s=g(t);return{break:!g(e)&&!s,value:s?t:S(e)?e():e}})}equal(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t==n?{value:t}:this.invalid(`.equal(${n})`,e)})}error(t){return D(t)&&(this[le.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 S(t)?t:()=>t}from(t){return this[le.SOURCE]=t,this}invalid(t,e){return t=`[${this[le.TYPE]}]${t}`,{error:this[le.ERROR]?this[le.ERROR]:this[le.NAME]?this[le.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[le.REQUIRED]=!0,this.unshift(({value:e})=>g(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[le.TYPE]}unshift(t){return this.rules.unshift(t),this}validate(t,e){if(this.custom.length)return this.invalid("[async]");let s={value:t};for(let t=0;t<this.rules.length;t++){if(s=this.rules[t]({value:s.value,context:e}),s.error?.length)return{error:s.error,...s.message?{message:s.message}:{}};if(s.break)return{value:s.value}}return{value:s.value}}async validateAsync(t,e){let s=this.validate(t,e);if(s.error)return{error:s.error};for(let t=0;t<this.custom.length;t++){if(s=await this.custom[t]({value:s.value}),s.error)return{error:s.error};if(s.break)return{value:s.value}}return{value:s.value}}}ue=le.NAME,he=le.DESCRIPTION,oe=le.EXAMPLE,le.SOURCE,ce=le.ERROR,ve=le.TYPE,pe=le.REQUIRED;class ye extends fe{constructor(t){super("array"),this[me]=[],this.push(({value:e})=>p(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[le.INDEXES].push(s),s?this.push(({value:t})=>{s[le.NAME]="";for(let r=0;r<t.length;r++){const{error:n,value:i}=s.validate(t[r],t);if(n)return this.invalid("< "+n+"["+r+"] >",e);t[r]=i}return{value:t}}):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[le.INDEXES].length?this[le.INDEXES].map(t=>t.model()):this[le.TYPE]}toString(){return this[le.INDEXES].length?JSON.stringify(this.model(),null,4):this[le.TYPE]}}me=le.INDEXES;class Se extends fe{constructor(t){super("boolean"),this.push(({value:e})=>m(e)?{value:e}:this.invalid("",t))}parse(){return this.unshift(({value:t})=>({value:g(t)?Y(t):t}))}}class Ee extends fe{constructor(t){super("date"),this.push(({value:e})=>D(e)&&e.length>=9&&!isNaN(new Date(e).getTime())?{value:e}:this.invalid("",t))}format(t){const e=t;return this.push(({value:t})=>({value:ht(e,new Date(t))}))}parse(){return this.unshift(({value:t})=>({value:new Date(D(t)&&t.length<=10?`${t} 12:00`:t)}))}}class xe extends fe{constructor(t){super("enum"),this[de]=[],this.push(({value:e})=>g(e)?{value:e}:this.invalid(`('${this[le.LIST].join("', '")}')`,t))}list(t,e){const s=t;return s&&this[le.LIST].push(...s),s?this.push(({value:t})=>-1!=this[le.LIST].indexOf(t)?{value:t}:this.invalid(`('${this[le.LIST].join("', '")}')`,e)):this}toString(){return`${this[le.TYPE]}('${this[le.LIST].join("', '")}')`}}de=le.LIST;class we extends fe{constructor(t){super("number"),this.push(({value:e})=>f(e)?{value:e}:this.invalid("",t))}between(t,e,s){return this.min(t,s),this.max(e,s)}float(t){return this.push(({value:e})=>y(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:g(t)?parseFloat(t.toString()):t}))}}class be extends fe{constructor(t){super("object"),this[ge]={},this.push(({value:e})=>b(e)?{value:e}:this.invalid("",t))}keys(t,e){const s=t;return s&&(this[le.KEYS]={...this[le.KEYS],...s}),s?this.push(({value:t})=>{const r=[],n={};return Object.keys(s).forEach(i=>{const a=s[i];a[le.NAME]=a[le.SOURCE]??i;const{error:l,message:u,value:h}=a.validate(t[a[le.NAME]],n);!e&&u&&(e=u),l&&r.push(l),g(h)&&(n[i]=h)}),r.length?this.invalid("{ "+r.join(", ")+" }",e):{value:n}}):this}model(){const t={},e=Object.keys(this[le.KEYS]);return e.length&&e.forEach(e=>t[e]=this[le.KEYS][e].model()),e.length?t:this[le.TYPE]}parse(t){return this.unshift(({value:e})=>{if(!b(e))try{e=JSON.parse(e)}catch(e){return this.invalid("",t)}return{value:e}})}toString(){return Object.keys(this[le.KEYS]).length?JSON.stringify(this.model(),null,4):this[le.TYPE]}}ge=le.KEYS;class Ie extends fe{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:At(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:Bt(e({value:t,context:s}),t)}))}min(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t.length>=n?{value:t}:this.invalid(`.min(${n})`,e)})}parse(){return this.unshift(({value:t})=>({value:b(t)?JSON.stringify(t):g(t)?t.toString():t}))}required(t){return this[le.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:Qt(t)}))}}class Me{static array(t,e){return new ye(e).items(t)}static boolean(t){return new Se(t)}static date(t){return new Ee(t)}static enum(t,e){return new xe(e).list(t)}static number(t){return new we(t)}static object(t,e){return new be(e).keys(t)}static ref(t,e){return({context:s})=>s&&g(s[t])?s[t]:e}static string(t){return new Ie(t)}test(t,...e){return!D(Me.validate(t,...e).error)}async testAsync(t,...e){return!D((await Me.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{xt as EventEmitter,tt as Hash,Kt as RandomString,Me as Validation,fe as ValidationBase,le as ValidationKeys,te as allowed,L as cache,Tt as camelCase,t as chunkArray,i as clamp,z as colorPalette,e as compareArray,s as countArray,jt as cutText,ht as dateFormat,ot as dateRange,Et as debounce,Yt as decodeHTML,ee as denied,$ as each,Lt as encodeHTML,ct as firstDayDate,re as forEachAsync,P as forEachIndex,U as forEachKey,ne as forEachPage,ie as forEachSeries,X as forLoop,q as hexToRgb,B as hslToRgb,r as inArray,n as includesArray,p as isArray,m as isBoolean,Pt as isCharacter,d as isDate,g as isDef,Ut as isDigit,bt as isEmpty,Ot as isFalse,y as isFloat,S as isFunction,E as isInteger,$t as isLetter,x as isMap,Rt as isNotEmpty,w as isNull,f as isNumber,b as isObject,I as isPlainObject,M as isRegExp,R as isScalar,C as isSet,Xt as isSpecialChar,D as isString,A as isSymbol,Mt as isTrue,T as isUndefined,vt as isValidDate,pt as lastDayDate,a as lerp,wt as loop,At as lowerCamelCase,_ as map,Bt as mask,Gt as maskMoney,Wt as maskReverse,Vt as maskTest,se as merge,yt as msToString,Ct as noop,St as parseMs,_t as parseSize,l as random,Ft as randomCase,u as randomElement,h as rangeArray,H as rgbToHex,V as rgbToHsl,Q as shadeColor,o as shuffleArray,qt as shuffleString,ae as sleep,Ht as stringReverse,J as tintColor,j as toArray,Y as toBool,v as type,k as uniqueArray,et as uniqueID,Qt as upperCamelCase,st as uuidv1,rt as uuidv1ToTimestamp,nt as uuidv4,it as uuidv7,at as uuidv7ToTimestamp};
|
|
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),u=(t,e)=>Math.floor(Math.random()*(e-t+1)+t),l=t=>t.length?t[u(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=u(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),m=t=>"boolean"==p(t),g=t=>"date"==p(t),d=t=>"null"!=p(t),f=t=>"number"==p(t),S=t=>f(t)&&!!(t%1),y=t=>"function"==typeof t,x=t=>f(t)&&!(t%1),E=t=>"map"==p(t),w=t=>null===t,b=t=>"object"==p(t),I=t=>b(t)&&t.constructor===Object,M=t=>"regexp"==p(t),C=["boolean","number","string"],O=t=>-1!=C.indexOf(p(t)),R=t=>"set"==p(t),T=t=>"string"==typeof t,D=t=>"symbol"==typeof t,A=t=>void 0===t,j=t=>v(t)?t:d(t)?[t]:[],k=t=>t.filter((t,e,s)=>s.indexOf(t)===e),N=[1,"1",!0,"true"],Y=t=>-1!=N.indexOf(t),U=()=>{const t=[],e=[];return s=>{let r=t.indexOf(s);return-1==r&&(t.push(s),e.push({}),r=e.length-1),e[r]}},P=(t,e,s)=>{for(let r=0;r<t.length&&!1!==e.call(s,t[r],r,t);r++);return t},L=(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},$=(t,e,s)=>v(t)?P(t,e,s):b(t)?L(t,e,s):t,q=(t,e,s)=>{for(let r=1;r<=t&&!1!==e.call(s,r,t);r++);return t},F=(t,e,s)=>Object.fromEntries(Object.entries(t).map(([r,n])=>[r,e.call(s,n,r,t)])),X=t=>parseInt(t??"0",16)||0,_=t=>t.replace(/^#/,"").match(/.{1,2}/g)?.map(X)||[],K=t=>("0"+t.toString(16)).slice(-2),H=(t,e,s)=>"#"+K(t)+K(e)+K(s),Q=(t,e)=>{const s=_(t);e=i(e,0,1);const[r,n,a]=s.map(t=>Math.round(t*e));return H(r,n,a)},J=(t,e)=>{const s=_(t);e=i(e,0,1);const[r,n,a]=s.map(t=>Math.round(t+(255-t)*e));return H(r,n,a)},Z={50:.95,100:.9,200:.75,300:.6,400:.3,500:0,600:-.1,700:-.25,800:-.4,900:-.55,950:-.71},z=(t,e)=>F(e??Z,e=>0==e?t:e>0?J(t,e):Q(t,1- -1*e)),B=(t,e,s)=>{t/=60;const r=(1-Math.abs(2*s-1))*e,n=r*(1-Math.abs(t%2-1));let i=[0,0,0];t<=1?i=[r,n,0]:t<=2?i=[n,r,0]:t<=3?i=[0,r,n]:t<=4?i=[0,n,r]:t<=5?i=[n,0,r]:t<=6&&(i=[r,0,n]);const a=s-.5*r;return[Math.round(255*(i[0]+a)),Math.round(255*(i[1]+a)),Math.round(255*(i[2]+a))]},W=(t,e,s,r,n)=>0===t?0:e===s?(r-n)/t%6:e===r?(n-s)/t+2:e===n?(s-r)/t+4:0,G=(t,e)=>0===t?0:t/(1-Math.abs(2*e-1)),V=(t,e,s)=>{const[r,n,i]=((...t)=>t.map(t=>t/255))(t,e,s),a=Math.max(r,n,i),u=Math.min(r,n,i),l=a-u,h=(u+a)/2;return[60*W(l,a,r,n,i),G(l,h),h]};class tt{constructor(t){this.key=this.shuffle(tt.dictionary,t,!1)}encrypt(t){return this.shuffle(t,this.key,!1)}decrypt(t){return this.shuffle(t,this.key,!0)}index(t,e,s){return[tt.dictionary.indexOf(t[s]),tt.dictionary.indexOf(e[s%e.length])]}result(t,e,s){return tt.dictionary[(s?t-e+tt.dictionary.length:t+e)%tt.dictionary.length]}shuffle(t,e,s){let r="";for(let n=0;n<t.length;n++){const[i,a]=this.index(t,e,n);r+=-1===i||-1===a?t[n]:this.result(i,a,s)}return r}static hex(t){let e=0;for(let s=0;s<t.length;s++)e=16777619*(e^t.charCodeAt(s));return(e>>>0).toString(16).padStart(8,"0")}}tt.dictionary="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";const et=(t=64)=>Array(Math.ceil(t/2)).fill(0).map(()=>u(0,255).toString(16).padStart(2,"0")).join("").slice(0,t),st=()=>{const t=1e4*(Date.now()+122192928e5),e=(4294967295&t)>>>0,s=(t/4294967296&65535)>>>0,r=(t/281474976710656&4095)>>>0,n=u(0,e),i=(t,e)=>t.toString(16).padStart(e,"0");return[i(e,8),i(s,4),i(4096|r,4),i(n>>8&63|128,2)+i(255&n,2),et(12)].join("-")},rt=t=>{const e=t.replace(/-/g,""),s=parseInt(e.slice(0,8),16),r=parseInt(e.slice(8,12),16),n=(4095&parseInt(e.slice(12,16),16))*Math.pow(2,48)+r*Math.pow(2,32)+s;return Math.floor((n-122192928e9)/1e4)},nt=()=>{const t=[];t.push(...Array(16).fill(0).map(()=>u(0,255))),t[6]=15&t[6]|64;const e=t.map(t=>t.toString(16).padStart(2,"0")).join("");return[e.slice(0,8),e.slice(8,12),e.slice(12,16),e.slice(16,20),e.slice(20)].join("-")},it=()=>{const t=Date.now(),e=[];e[0]=t/2**40&255,e[1]=t/2**32&255,e[2]=t>>>24&255,e[3]=t>>>16&255,e[4]=t>>>8&255,e[5]=255&t,e.push(...Array(10).fill(0).map(()=>u(0,255))),e[6]=15&e[6]|112,e[8]=63&e[8]|128;const s=e.map(t=>t.toString(16).padStart(2,"0")).join("");return[s.slice(0,8),s.slice(8,12),s.slice(12,16),s.slice(16,20),s.slice(20)].join("-")},at=t=>parseInt(t.replace(/-/g,"").slice(0,12),16),ut=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(()=>u(0,255))),s[6]=15&s[6]|128,s[8]=63&s[8]|128;const r=s.map(t=>t.toString(16).padStart(2,"0")).join("");return[r.slice(0,8),r.slice(8,12),r.slice(12,16),tt.hex(t??"").slice(4),r.slice(16)].join("-")},lt=t=>("0"+t.toString()).slice(-2),ht={"%y":(t,e)=>lt(e?t.getUTCFullYear():t.getFullYear()),"%Y":(t,e)=>(e?t.getUTCFullYear():t.getFullYear()).toString(),"%m":(t,e)=>lt((e?t.getUTCMonth():t.getMonth())+1),"%d":(t,e)=>lt(e?t.getUTCDate():t.getDate()),"%H":(t,e)=>lt(e?t.getUTCHours():t.getHours()),"%M":(t,e)=>lt(e?t.getUTCMinutes():t.getMinutes()),"%S":(t,e)=>lt(e?t.getUTCSeconds():t.getSeconds())},ot=(t,e,s)=>(e=e??new Date,t.replace(/%[yYmdHMS]/g,t=>ht[t]?ht[t](e,s):t.slice(1))),ct=(t,e)=>{const s=new Date(t),r=[];for(;t<e;)s.setDate(s.getDate()+1),r.push(new Date(s));return r},pt=t=>new Date(t.getFullYear(),t.getMonth(),1,t.getHours(),t.getMinutes(),t.getSeconds()),vt=t=>{const e=new Date(t);return e.getTime()==e.getTime()&&t==e.toISOString().slice(0,10)},mt=t=>new Date(t.getFullYear(),t.getMonth()+1,0,t.getHours(),t.getMinutes(),t.getSeconds()),gt=36e5,dt=24*gt,ft={ms:1,s:1e3,m:6e4,h:gt,d:dt,w:7*dt,y:315576e5},St=["y","d","h","m","s","ms"],yt=t=>{const e=[];return St.forEach(s=>{const r=ft[s],n=(t-t%r)/r;n&&(t-=n*r,e.push(n.toString()+s))}),e.join(" ")},xt=t=>{const e=/(-?(?:\d+)?\.?\d+) *(ms|s|m|h|d|w|y)/gm;let s,r=0;for(;null!==(s=e.exec(t));)s.index===e.lastIndex&&e.lastIndex++,r+=parseFloat(s[1])*ft[s[2]]||0;return r},Et=(t,e)=>{let s;const r=()=>{s&&clearTimeout(s)};return{cancel:r,run(...n){r(),s=setTimeout(()=>t(...n),e)}}};class wt{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 bt=(t,e)=>{let s=!1;const r=async()=>{s&&(await t(),setTimeout(r,e))};return{start(){s||(s=!0,r())},stop(){s=!1}}},It=t=>0==(t?.length??0),Mt=["",0,"0",null,!1,void 0],Ct=t=>-1==Mt.indexOf(t),Ot=t=>!Ct(t),Rt=t=>!It(t),Tt=()=>{},Dt=(t,e,s)=>e(t.toLowerCase().replace(/\W+/g," ")).replace(/\s/g,s??""),At=(t,e)=>Dt(t,t=>t.replace(/\s(\w)/g,t=>t.toUpperCase()),e),jt=At,kt=(t,e)=>{if(t.length>e){const s=t.substring(0,e).split(" ");return s.pop(),s.join(" ")+"..."}return t},Nt=/&(amp|apos|lt|gt|nbsp|quot);/g,Yt={amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",quot:'"'},Ut=t=>t.replace(Nt,(t,e)=>Yt[e]).replace(/&#(\d+);/gi,(t,e)=>String.fromCharCode(parseInt(e,10))),Pt=t=>t.replace(/[^0-9A-Za-z ]/g,t=>"&#"+t.charCodeAt(0)+";"),Lt=t=>/^[\w]$/.test(t),$t=t=>/^[\d]$/.test(t),qt=t=>/^[A-Za-z]$/.test(t),Ft=t=>/^[^\w]$/.test(t),Xt=t=>{if(f(t))return t+"px";const e=(t=>/(-?(?:\d+)?\.?\d+) *(px|%|cm|mm|in|pt|pc|en|ex|ch|rem|vw|vh|vmin|vmax)*/g.exec(t))(t);return e?parseFloat(e[1])+(e[2]||"px"):"0px"},_t=t=>t.split("").map(t=>Math.random()<.5?t.toUpperCase():t.toLowerCase()).join(""),Kt=t=>o(t.split("")).join("");class Ht{constructor(){this.hasSpace=!1,this._space=" ",this.hasNumbers=!1,this._numbers="0123456789",this.hasSymbols=!1,this._symbols="!@#$%^&*()<>.<~:;?+=-_",this.hasUpper=!1,this._upper="ABCDEFGHIJKLMNOPQRSTUVWXYZ",this.hasLower=!1,this._lower="abcdefghijklmnopqrstuvwxyz",this.hasChars=!1,this._chars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"}chars(){return this.hasChars=!0,this}static chars(){return(new Ht).chars()}lower(){return this.hasLower=!0,this}static lower(){return(new Ht).lower()}make(t){let e="";this.hasSpace&&(e+=this._space),this.hasNumbers&&(e+=this._numbers),this.hasSymbols&&(e+=this._symbols),this.hasUpper&&!this.hasChars&&(e+=this._upper),this.hasLower&&!this.hasChars&&(e+=this._lower),this.hasChars&&(e+=this._chars);let s="";if(t&&e.length){e=Kt(e);for(let r=0;r<t;r++)s+=e.charAt(u(0,e.length-1))}return s}numbers(){return this.hasNumbers=!0,this}static numbers(){return(new Ht).numbers()}space(){return this.hasSpace=!0,this}static space(){return(new Ht).space()}symbols(){return this.hasSymbols=!0,this}static symbols(){return(new Ht).symbols()}upper(){return this.hasUpper=!0,this}static upper(){return(new Ht).upper()}}const Qt=t=>t.split("").reverse().join(""),Jt=(t,e)=>Dt(t,t=>t.replace(/(\w)(\w*)/g,(t,e,s)=>e.toUpperCase()+s),e),Zt=(t,e)=>e(t.value)?t.value:(t=>(t.maskIndex--,""))(t),zt={"#":t=>t.value,0:t=>Zt(t,$t),9:t=>Zt(t,$t),A:t=>Zt(t,qt),Z:t=>Zt(t,qt),L:t=>Zt(t,qt).toLowerCase(),U:t=>Zt(t,qt).toUpperCase(),S:t=>Zt(t,Ft)},Bt=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=>zt[t.key]?zt[t.key](t):(t.key!=t.value&&t.textIndex--,t.key))(t)+Bt(t)},Wt=(t,e)=>Bt({mask:t,maskIndex:-1,text:e,textIndex:-1,key:"",value:""}),Gt=(t,e)=>Qt(Wt(Qt(t),Qt(e))),Vt=(t,e,s)=>(s++,e=parseInt((e||"0").replace(/\D/g,"")).toString(),Gt(t,e.length<s?("0".repeat(s)+e).slice(-1*s):e)),te=(t,e)=>t.length==Wt(t,e).length,ee=(t,e)=>t.reduce((t,s)=>({...t,[s]:e[s]}),{}),se=t=>t instanceof Date?new Date(t.getTime()):v(t)?t.map(t=>se(t)):b(t)?F(t,t=>se(t)):t,re=(t,e)=>ee(Object.keys(e).filter(e=>-1==t.indexOf(e)),e),ne=(t,...e)=>{if(!e.length)return t;const s=e.shift();if(I(t)&&I(s))for(const e in s)I(s[e])?(t[e]||(t={...t,[e]:{}}),t[e]=ne(t[e],s[e])):t={...t,[e]:s[e]};return ne(t,...e)};class ie{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 ae=async(t,e,s)=>{await Promise.allSettled(t.map((r,n)=>e.call(s,r,n,t)?.catch(Tt))).catch(Tt)},ue=async t=>{let e=!0;const s=()=>e=!0;let r=1;for(;e;)e=!1,await(t(r,s)?.catch(Tt)),r+=1},le=async(t,e,s)=>{for(let r=0;r<t.length;r++)await(e.call(s,t[r],r,t)?.catch(Tt))},he=t=>new Promise(e=>setTimeout(e,t));class oe{}var ce,pe,ve,me,ge,de,fe,Se,ye;oe.DESCRIPTION=Symbol("DESCRIPTION"),oe.ERROR=Symbol("ERROR"),oe.EXAMPLE=Symbol("EXAMPLE"),oe.INDEXES=Symbol("INDEXES"),oe.KEYS=Symbol("KEYS"),oe.LIST=Symbol("LIST"),oe.NAME=Symbol("NAME"),oe.REQUIRED=Symbol("REQUIRED"),oe.SOURCE=Symbol("SOURCE"),oe.TYPE=Symbol("TYPE");class xe{constructor(t){this[ce]="",this[pe]="",this[ve]=null,this[me]="",this[ge]="any",this[de]=!1,this.rules=[],this.custom=[],this[oe.TYPE]=t}description(t){return this[oe.DESCRIPTION]=t,this}example(t){return this[oe.EXAMPLE]=t,this}empty(t){const e=t;return this.unshift(({value:t})=>{const s=d(t);return{break:!d(e)&&!s,value:s?t:y(e)?e():e}})}equal(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t==n?{value:t}:this.invalid(`.equal(${n})`,e)})}error(t){return T(t)&&(this[oe.ERROR]=t),this}filter(...t){const e=t;return this.unshift(({value:t})=>{const s=-1==e.indexOf(t);return{break:!s,value:s?t:void 0}})}fn(t){return y(t)?t:()=>t}from(t){return this[oe.SOURCE]=t,this}invalid(t,e){return t=`[${this[oe.TYPE]}]${t}`,{error:this[oe.ERROR]?this[oe.ERROR]:this[oe.NAME]?this[oe.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[oe.REQUIRED]=!0,this.unshift(({value:e})=>d(e)?{value:e}:this.invalid(".required",t))}test(t){return!T(this.validate(t).error)}async testAsync(t){return!T((await this.validateAsync(t)).error)}toString(){return this[oe.TYPE]}unshift(t){return this.rules.unshift(t),this}validate(t,e){if(this.custom.length)return this.invalid("[async]");let s={value:t};for(let t=0;t<this.rules.length;t++){if(s=this.rules[t]({value:s.value,context:e}),s.error?.length)return{error:s.error,...s.message?{message:s.message}:{}};if(s.break)return{value:s.value}}return{value:s.value}}async validateAsync(t,e){let s=this.validate(t,e);if(s.error)return{error:s.error};for(let t=0;t<this.custom.length;t++){if(s=await this.custom[t]({value:s.value}),s.error)return{error:s.error};if(s.break)return{value:s.value}}return{value:s.value}}}ce=oe.NAME,pe=oe.DESCRIPTION,ve=oe.EXAMPLE,oe.SOURCE,me=oe.ERROR,ge=oe.TYPE,de=oe.REQUIRED;class Ee extends xe{constructor(t){super("array"),this[fe]=[],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[oe.INDEXES].push(s),s?this.push(({value:t})=>{const r=[];s[oe.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[oe.INDEXES].length?this[oe.INDEXES].map(t=>t.model()):this[oe.TYPE]}toString(){return this[oe.INDEXES].length?JSON.stringify(this.model(),null,4):this[oe.TYPE]}}fe=oe.INDEXES;class we extends xe{constructor(t){super("boolean"),this.push(({value:e})=>m(e)?{value:e}:this.invalid("",t))}parse(){return this.unshift(({value:t})=>({value:d(t)?Y(t):t}))}}class be extends xe{constructor(t){super("date"),this.push(({value:e})=>T(e)&&vt(e)||!isNaN(new Date(e).getTime())?{value:e}:this.invalid("",t))}format(t){const e=t;return this.push(({value:t})=>({value:ot(e,new Date(t))}))}parse(){return this.unshift(({value:t})=>({value:new Date(t)}))}}class Ie extends xe{constructor(t){super("enum"),this[Se]=[],this.push(({value:e})=>d(e)?{value:e}:this.invalid(`('${this[oe.LIST].join("', '")}')`,t))}list(t,e){const s=t;return s&&this[oe.LIST].push(...s),s?this.push(({value:t})=>-1!=this[oe.LIST].indexOf(t)?{value:t}:this.invalid(`('${this[oe.LIST].join("', '")}')`,e)):this}toString(){return`${this[oe.TYPE]}('${this[oe.LIST].join("', '")}')`}}Se=oe.LIST;class Me extends xe{constructor(t){super("number"),this.push(({value:e})=>f(e)?{value:e}:this.invalid("",t))}between(t,e,s){return this.min(t,s),this.max(e,s)}float(t){return this.push(({value:e})=>S(e)?{value:e}:this.invalid(".float",t))}integer(t){return this.push(({value:e})=>x(e)?{value:e}:this.invalid(".integer",t))}max(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t<=n?{value:t}:this.invalid(`.max(${n})`,e)})}min(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t>=n?{value:t}:this.invalid(`.min(${n})`,e)})}parse(){return this.unshift(({value:t})=>({value:d(t)?parseFloat(t.toString()):t}))}}class Ce extends xe{constructor(t){super("object"),this[ye]={},this.push(({value:e})=>b(e)?{value:e}:this.invalid("",t))}keys(t,e){const s=t;return s&&(this[oe.KEYS]={...this[oe.KEYS],...s}),s?this.push(({value:t})=>{const r=[],n={};return Object.keys(s).forEach(i=>{const a=s[i];a[oe.NAME]=a[oe.SOURCE]??i;const{error:u,message:l,value:h}=a.validate(t[a[oe.NAME]],n);!e&&l&&(e=l),u&&r.push(u),d(h)&&(n[i]=h)}),r.length?this.invalid("{ "+r.join(", ")+" }",e):{value:n}}):this}model(){const t={},e=Object.keys(this[oe.KEYS]);return e.length&&e.forEach(e=>t[e]=this[oe.KEYS][e].model()),e.length?t:this[oe.TYPE]}parse(t){return this.unshift(({value:e})=>{if(!b(e))try{e=JSON.parse(e)}catch(e){return this.invalid("",t)}return{value:e}})}toString(){return Object.keys(this[oe.KEYS]).length?JSON.stringify(this.model(),null,4):this[oe.TYPE]}}ye=oe.KEYS;class Oe extends xe{constructor(t){super("string"),this.push(({value:e})=>T(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:At(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:Wt(e({value:t,context:s}),t)}))}min(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t.length>=n?{value:t}:this.invalid(`.min(${n})`,e)})}parse(){return this.unshift(({value:t})=>({value:b(t)?JSON.stringify(t):d(t)?t.toString():t}))}required(t){return this[oe.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:Jt(t)}))}}class Re{static array(t,e){return new Ee(e).items(t)}static boolean(t){return new we(t)}static date(t){return new be(t)}static enum(t,e){return new Ie(e).list(t)}static number(t){return new Me(t)}static object(t,e){return new Ce(e).keys(t)}static ref(t,e){return({context:s})=>s&&d(s[t])?s[t]:e}static string(t){return new Oe(t)}test(t,...e){return!T(Re.validate(t,...e).error)}async testAsync(t,...e){return!T((await Re.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{ie as AsyncQueue,wt as EventEmitter,tt as Hash,Ht as RandomString,Re as Validation,xe as ValidationBase,oe as ValidationKeys,ee as allowed,U as cache,jt as camelCase,t as chunkArray,i as clamp,se as clone,z as colorPalette,e as compareArray,s as countArray,kt as cutText,ot as dateFormat,ct as dateRange,Et as debounce,Ut as decodeHTML,re as denied,$ as each,Pt as encodeHTML,pt as firstDayDate,ae as forEachAsync,P as forEachIndex,L as forEachKey,ue as forEachPage,le as forEachSeries,q as forLoop,_ as hexToRgb,B as hslToRgb,r as inArray,n as includesArray,v as isArray,m as isBoolean,Lt as isCharacter,g as isDate,d as isDef,$t as isDigit,It as isEmpty,Ot as isFalse,S as isFloat,y as isFunction,x as isInteger,qt as isLetter,E as isMap,Rt as isNotEmpty,w as isNull,f as isNumber,b as isObject,I as isPlainObject,M as isRegExp,O as isScalar,R as isSet,Ft as isSpecialChar,T as isString,D as isSymbol,Ct as isTrue,A as isUndefined,vt as isValidDate,mt as lastDayDate,a as lerp,bt as loop,At as lowerCamelCase,F as map,Wt as mask,Vt as maskMoney,Gt as maskReverse,te as maskTest,ne as merge,yt as msToString,Tt as noop,xt as parseMs,Xt as parseSize,u as random,_t as randomCase,l as randomElement,h as rangeArray,H as rgbToHex,V as rgbToHsl,Q as shadeColor,o as shuffleArray,Kt as shuffleString,he as sleep,Qt as stringReverse,J as tintColor,j as toArray,Y as toBool,p as type,k as uniqueArray,et as uniqueID,Jt as upperCamelCase,st as uuidv1,rt as uuidv1ToTimestamp,nt as uuidv4,it as uuidv7,at as uuidv7ToTimestamp,ut 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.13
|
|
3
3
|
* JavaScript utility library for web and nodejs development
|
|
4
4
|
* (c) 2025 Andrew Caires
|
|
5
5
|
* @license: MIT
|
|
6
6
|
*/
|
|
7
|
-
var UtilsJS=function(t){"use strict";const e=(t,e,s)=>Math.max(e,Math.min(s,t)),s=(t,e)=>Math.floor(Math.random()*(e-t+1)+t),r=t=>{for(let e=t.length-1;e>0;e--){const r=s(0,e);[t[e],t[r]]=[t[r],t[e]]}return t},n={},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=>"null"!=a(t),h=t=>"number"==a(t),o=t=>h(t)&&!!(t%1),c=t=>"function"==typeof t,p=t=>h(t)&&!(t%1),v=t=>"object"==a(t),m=t=>v(t)&&t.constructor===Object,d=["boolean","number","string"],g=t=>"string"==typeof t,f=t=>void 0===t,y=[1,"1",!0,"true"],S=t=>-1!=y.indexOf(t),E=(t,e,s)=>{for(let r=0;r<t.length&&!1!==e.call(s,t[r],r,t);r++);return t},x=(t,e,s)=>{let r="";const n=Object.keys(t);for(let a=0;a<n.length&&(r=n[a],!1!==e.call(s,t[r],r,t));a++);return t},b=(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,I=t=>t.replace(/^#/,"").match(/.{1,2}/g)?.map(w)||[],M=t=>("0"+t.toString(16)).slice(-2),R=(t,e,s)=>"#"+M(t)+M(e)+M(s),T=(t,s)=>{const r=I(t);s=e(s,0,1);const[n,a,i]=r.map(t=>Math.round(t*s));return R(n,a,i)},C=(t,s)=>{const r=I(t);s=e(s,0,1);const[n,a,i]=r.map(t=>Math.round(t+(255-t)*s));return R(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},A=(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,D=(t,e)=>0===t?0:t/(1-Math.abs(2*e-1));class k{constructor(t){this.key=this.shuffle(k.dictionary,t,!1)}encrypt(t){return this.shuffle(t,this.key,!1)}decrypt(t){return this.shuffle(t,this.key,!0)}index(t,e,s){return[k.dictionary.indexOf(t[s]),k.dictionary.indexOf(e[s%e.length])]}result(t,e,s){return k.dictionary[(s?t-e+k.dictionary.length:t+e)%k.dictionary.length]}shuffle(t,e,s){let r="";for(let n=0;n<t.length;n++){const[a,i]=this.index(t,e,n);r+=-1===a||-1===i?t[n]:this.result(a,i,s)}return r}}k.dictionary="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";const N=(t=64)=>Array(Math.ceil(t/2)).fill(0).map(()=>s(0,255).toString(16).padStart(2,"0")).join("").slice(0,t),j=t=>("0"+t.toString()).slice(-2),L={"%y":t=>j(t.getFullYear()),"%Y":t=>t.getFullYear().toString(),"%m":t=>j(t.getMonth()+1),"%d":t=>j(t.getDate()),"%H":t=>j(t.getHours()),"%M":t=>j(t.getMinutes()),"%S":t=>j(t.getSeconds())},Y=(t,e)=>(e=e??new Date,t.replace(/%[yYmdHMS]/g,t=>L[t]?L[t](e):t.slice(1))),P=36e5,U=24*P,$={ms:1,s:1e3,m:6e4,h:P,d:U,w:7*U,y:315576e5},F=["y","d","h","m","s","ms"];const X=t=>0==(t?.length??0),q=["",0,"0",null,!1,void 0],H=t=>-1==q.indexOf(t),K=()=>{},_=(t,e,s)=>e(t.toLowerCase().replace(/\W+/g," ")).replace(/\s/g,s??""),J=(t,e)=>_(t,t=>t.replace(/\s(\w)/g,t=>t.toUpperCase()),e),Q=J,B=/&(amp|apos|lt|gt|nbsp|quot);/g,V={amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",quot:'"'},z=t=>/^[\d]$/.test(t),Z=t=>/^[A-Za-z]$/.test(t),W=t=>/^[^\w]$/.test(t),G=t=>r(t.split("")).join("");class tt{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 tt).chars()}lower(){return this.hasLower=!0,this}static lower(){return(new tt).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=G(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 tt).numbers()}space(){return this.hasSpace=!0,this}static space(){return(new tt).space()}symbols(){return this.hasSymbols=!0,this}static symbols(){return(new tt).symbols()}upper(){return this.hasUpper=!0,this}static upper(){return(new tt).upper()}}const et=t=>t.split("").reverse().join(""),st=(t,e)=>_(t,t=>t.replace(/(\w)(\w*)/g,(t,e,s)=>e.toUpperCase()+s),e),rt=(t,e)=>e(t.value)?t.value:(t=>(t.maskIndex--,""))(t),nt={"#":t=>t.value,0:t=>rt(t,z),9:t=>rt(t,z),A:t=>rt(t,Z),Z:t=>rt(t,Z),L:t=>rt(t,Z).toLowerCase(),U:t=>rt(t,Z).toUpperCase(),S:t=>rt(t,W)},at=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=>nt[t.key]?nt[t.key](t):(t.key!=t.value&&t.textIndex--,t.key))(t)+at(t)},it=(t,e)=>at({mask:t,maskIndex:-1,text:e,textIndex:-1,key:"",value:""}),lt=(t,e)=>et(it(et(t),et(e))),ut=(t,e)=>t.reduce((t,s)=>({...t,[s]:e[s]}),{}),ht=(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]=ht(t[e],s[e])):t={...t,[e]:s[e]};return ht(t,...e)};class ot{}var ct,pt,vt,mt,dt,gt,ft,yt,St;ot.DESCRIPTION=Symbol("DESCRIPTION"),ot.ERROR=Symbol("ERROR"),ot.EXAMPLE=Symbol("EXAMPLE"),ot.INDEXES=Symbol("INDEXES"),ot.KEYS=Symbol("KEYS"),ot.LIST=Symbol("LIST"),ot.NAME=Symbol("NAME"),ot.REQUIRED=Symbol("REQUIRED"),ot.SOURCE=Symbol("SOURCE"),ot.TYPE=Symbol("TYPE");class Et{constructor(t){this[ct]="",this[pt]="",this[vt]=null,this[mt]="",this[dt]="any",this[gt]=!1,this.rules=[],this.custom=[],this[ot.TYPE]=t}description(t){return this[ot.DESCRIPTION]=t,this}example(t){return this[ot.EXAMPLE]=t,this}empty(t){const e=t;return this.unshift(({value:t})=>{const s=u(t);return{break:!u(e)&&!s,value:s?t:c(e)?e():e}})}equal(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t==n?{value:t}:this.invalid(`.equal(${n})`,e)})}error(t){return g(t)&&(this[ot.ERROR]=t),this}filter(...t){const e=t;return this.unshift(({value:t})=>{const s=-1==e.indexOf(t);return{break:!s,value:s?t:void 0}})}fn(t){return c(t)?t:()=>t}from(t){return this[ot.SOURCE]=t,this}invalid(t,e){return t=`[${this[ot.TYPE]}]${t}`,{error:this[ot.ERROR]?this[ot.ERROR]:this[ot.NAME]?this[ot.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[ot.REQUIRED]=!0,this.unshift(({value:e})=>u(e)?{value:e}:this.invalid(".required",t))}test(t){return!g(this.validate(t).error)}async testAsync(t){return!g((await this.validateAsync(t)).error)}toString(){return this[ot.TYPE]}unshift(t){return this.rules.unshift(t),this}validate(t,e){if(this.custom.length)return this.invalid("[async]");let s={value:t};for(let t=0;t<this.rules.length;t++){if(s=this.rules[t]({value:s.value,context:e}),s.error?.length)return{error:s.error,...s.message?{message:s.message}:{}};if(s.break)return{value:s.value}}return{value:s.value}}async validateAsync(t,e){let s=this.validate(t,e);if(s.error)return{error:s.error};for(let t=0;t<this.custom.length;t++){if(s=await this.custom[t]({value:s.value}),s.error)return{error:s.error};if(s.break)return{value:s.value}}return{value:s.value}}}ct=ot.NAME,pt=ot.DESCRIPTION,vt=ot.EXAMPLE,ot.SOURCE,mt=ot.ERROR,dt=ot.TYPE,gt=ot.REQUIRED;class xt extends Et{constructor(t){super("array"),this[ft]=[],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[ot.INDEXES].push(s),s?this.push(({value:t})=>{s[ot.NAME]="";for(let r=0;r<t.length;r++){const{error:n,value:a}=s.validate(t[r],t);if(n)return this.invalid("< "+n+"["+r+"] >",e);t[r]=a}return{value:t}}):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[ot.INDEXES].length?this[ot.INDEXES].map(t=>t.model()):this[ot.TYPE]}toString(){return this[ot.INDEXES].length?JSON.stringify(this.model(),null,4):this[ot.TYPE]}}ft=ot.INDEXES;class bt extends Et{constructor(t){super("boolean"),this.push(({value:e})=>l(e)?{value:e}:this.invalid("",t))}parse(){return this.unshift(({value:t})=>({value:u(t)?S(t):t}))}}class wt extends Et{constructor(t){super("date"),this.push(({value:e})=>g(e)&&e.length>=9&&!isNaN(new Date(e).getTime())?{value:e}:this.invalid("",t))}format(t){const e=t;return this.push(({value:t})=>({value:Y(e,new Date(t))}))}parse(){return this.unshift(({value:t})=>({value:new Date(g(t)&&t.length<=10?`${t} 12:00`:t)}))}}class It extends Et{constructor(t){super("enum"),this[yt]=[],this.push(({value:e})=>u(e)?{value:e}:this.invalid(`('${this[ot.LIST].join("', '")}')`,t))}list(t,e){const s=t;return s&&this[ot.LIST].push(...s),s?this.push(({value:t})=>-1!=this[ot.LIST].indexOf(t)?{value:t}:this.invalid(`('${this[ot.LIST].join("', '")}')`,e)):this}toString(){return`${this[ot.TYPE]}('${this[ot.LIST].join("', '")}')`}}yt=ot.LIST;class Mt extends Et{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})=>o(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 Rt extends Et{constructor(t){super("object"),this[St]={},this.push(({value:e})=>v(e)?{value:e}:this.invalid("",t))}keys(t,e){const s=t;return s&&(this[ot.KEYS]={...this[ot.KEYS],...s}),s?this.push(({value:t})=>{const r=[],n={};return Object.keys(s).forEach(a=>{const i=s[a];i[ot.NAME]=i[ot.SOURCE]??a;const{error:l,message:h,value:o}=i.validate(t[i[ot.NAME]],n);!e&&h&&(e=h),l&&r.push(l),u(o)&&(n[a]=o)}),r.length?this.invalid("{ "+r.join(", ")+" }",e):{value:n}}):this}model(){const t={},e=Object.keys(this[ot.KEYS]);return e.length&&e.forEach(e=>t[e]=this[ot.KEYS][e].model()),e.length?t:this[ot.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[ot.KEYS]).length?JSON.stringify(this.model(),null,4):this[ot.TYPE]}}St=ot.KEYS;class Tt extends Et{constructor(t){super("string"),this.push(({value:e})=>g(e)?{value:e}:this.invalid("",t))}between(t,e,s){return this.min(t,s),this.max(e,s)}email(t){const e=/^[\w-\\.]+@([\w-]+\.)+[\w-]{2,4}$/i;return this.push(({value:s})=>e.test(s)?{value:s}:this.invalid(".email",t))}length(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t.length==n?{value:t}:this.invalid(`.length(${n})`,e)})}lowerCase(){return this.push(({value:t})=>({value:t.toLowerCase()}))}lowerCamelCase(){return this.push(({value:t})=>({value:J(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:it(e({value:t,context:s}),t)}))}min(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t.length>=n?{value:t}:this.invalid(`.min(${n})`,e)})}parse(){return this.unshift(({value:t})=>({value:v(t)?JSON.stringify(t):u(t)?t.toString():t}))}required(t){return this[ot.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:st(t)}))}}class Ct{static array(t,e){return new xt(e).items(t)}static boolean(t){return new bt(t)}static date(t){return new wt(t)}static enum(t,e){return new It(e).list(t)}static number(t){return new Mt(t)}static object(t,e){return new Rt(e).keys(t)}static ref(t,e){return({context:s})=>s&&u(s[t])?s[t]:e}static string(t){return new Tt(t)}test(t,...e){return!g(Ct.validate(t,...e).error)}async testAsync(t,...e){return!g((await Ct.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.EventEmitter=class{constructor(){this.events=new Map}on(t,e){const s=this.events.get(t);return s?s.push(e):this.events.set(t,[e]),{dispose:()=>this.off(t,e)}}once(t,e){const s=r=>{e(r),this.off(t,s)};return this.on(t,s),{dispose:()=>this.off(t,s)}}off(t,e){const s=this.events.get(t);if(e){if(s){const t=s.indexOf(e);t>=0&&s.splice(t,1)}}else this.events.set(t,[])}emit(t,e){const s=this.events.get(t);s&&s.forEach(t=>t(e))}},t.Hash=k,t.RandomString=tt,t.Validation=Ct,t.ValidationBase=Et,t.ValidationKeys=ot,t.allowed=ut,t.cache=()=>{const t=[],e=[];return s=>{let r=t.indexOf(s);return-1==r&&(t.push(s),e.push({}),r=e.length-1),e[r]}},t.camelCase=Q,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.colorPalette=(t,e)=>b(e??O,e=>0==e?t:e>0?C(t,e):T(t,1- -1*e)),t.compareArray=(t,e)=>t.length===e.length&&t.every((t,s)=>t===e[s]),t.countArray=t=>{const e={};return t.forEach(t=>{const s=t.toString();e[s]=(e[s]||0)+1}),e},t.cutText=(t,e)=>{if(t.length>e){const s=t.substring(0,e).split(" ");return s.pop(),s.join(" ")+"..."}return t},t.dateFormat=Y,t.dateRange=(t,e)=>{const s=new Date(t),r=[];for(;t<e;)s.setDate(s.getDate()+1),r.push(new Date(s));return r},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(B,(t,e)=>V[e]).replace(/&#(\d+);/gi,(t,e)=>String.fromCharCode(parseInt(e,10))),t.denied=(t,e)=>ut(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.forEachAsync=async(t,e,s)=>{await Promise.allSettled(t.map((r,n)=>e.call(s,r,n,t)?.catch(K))).catch(K)},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(K)),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(K))},t.forLoop=(t,e,s)=>{for(let r=1;r<=t&&!1!==e.call(s,r,t);r++);return t},t.hexToRgb=I,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.isDate=t=>"date"==a(t),t.isDef=u,t.isDigit=z,t.isEmpty=X,t.isFalse=t=>!H(t),t.isFloat=o,t.isFunction=c,t.isInteger=p,t.isLetter=Z,t.isMap=t=>"map"==a(t),t.isNotEmpty=t=>!X(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!=d.indexOf(a(t)),t.isSet=t=>"set"==a(t),t.isSpecialChar=W,t.isString=g,t.isSymbol=t=>"symbol"==typeof t,t.isTrue=H,t.isUndefined=f,t.isValidDate=t=>{const e=new Date(t);return e.getTime()==e.getTime()&&t==e.toISOString().slice(0,10)},t.lastDayDate=t=>new Date(t.getFullYear(),t.getMonth()+1,0,t.getHours(),t.getMinutes(),t.getSeconds()),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=J,t.map=b,t.mask=it,t.maskMoney=(t,e,s)=>(s++,e=parseInt((e||"0").replace(/\D/g,"")).toString(),lt(t,e.length<s?("0".repeat(s)+e).slice(-1*s):e)),t.maskReverse=lt,t.maskTest=(t,e)=>t.length==it(t,e).length,t.merge=ht,t.msToString=t=>{const e=[];return F.forEach(s=>{const r=$[s],n=(t-t%r)/r;n&&(t-=n*r,e.push(n.toString()+s))}),e.join(" ")},t.noop=K,t.parseMs=t=>{const e=/(-?(?:\d+)?\.?\d+) *(ms|s|m|h|d|w|y)/gm;let s,r=0;for(;null!==(s=e.exec(t));)s.index===e.lastIndex&&e.lastIndex++,r+=parseFloat(s[1])*$[s[2]]||0;return r},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=R,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,h=(l+i)/2;return[60*A(u,i,r,n,a),D(u,h),h]},t.shadeColor=T,t.shuffleArray=r,t.shuffleString=G,t.sleep=t=>new Promise(e=>setTimeout(e,t)),t.stringReverse=et,t.tintColor=C,t.toArray=t=>i(t)?t:u(t)?[t]:[],t.toBool=S,t.type=a,t.uniqueArray=t=>t.filter((t,e,s)=>s.indexOf(t)===e),t.uniqueID=N,t.upperCamelCase=st,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),N(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}({});
|
|
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),u=t=>"boolean"==a(t),l=t=>"null"!=a(t),h=t=>"number"==a(t),o=t=>h(t)&&!!(t%1),c=t=>"function"==typeof t,p=t=>h(t)&&!(t%1),v=t=>"object"==a(t),m=t=>v(t)&&t.constructor===Object,d=["boolean","number","string"],g=t=>"string"==typeof t,f=t=>void 0===t,y=[1,"1",!0,"true"],S=t=>-1!=y.indexOf(t),E=(t,e,s)=>{for(let r=0;r<t.length&&!1!==e.call(s,t[r],r,t);r++);return t},x=(t,e,s)=>{let r="";const n=Object.keys(t);for(let a=0;a<n.length&&(r=n[a],!1!==e.call(s,t[r],r,t));a++);return t},b=(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,T=t=>t.replace(/^#/,"").match(/.{1,2}/g)?.map(w)||[],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)},D=(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)},R={50:.95,100:.9,200:.75,300:.6,400:.3,500:0,600:-.1,700:-.25,800:-.4,900:-.55,950:-.71},A=(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,O=(t,e)=>0===t?0:t/(1-Math.abs(2*e-1));class k{constructor(t){this.key=this.shuffle(k.dictionary,t,!1)}encrypt(t){return this.shuffle(t,this.key,!1)}decrypt(t){return this.shuffle(t,this.key,!0)}index(t,e,s){return[k.dictionary.indexOf(t[s]),k.dictionary.indexOf(e[s%e.length])]}result(t,e,s){return k.dictionary[(s?t-e+k.dictionary.length:t+e)%k.dictionary.length]}shuffle(t,e,s){let r="";for(let n=0;n<t.length;n++){const[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")}}k.dictionary="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";const j=(t=64)=>Array(Math.ceil(t/2)).fill(0).map(()=>s(0,255).toString(16).padStart(2,"0")).join("").slice(0,t),N=t=>("0"+t.toString()).slice(-2),U={"%y":(t,e)=>N(e?t.getUTCFullYear():t.getFullYear()),"%Y":(t,e)=>(e?t.getUTCFullYear():t.getFullYear()).toString(),"%m":(t,e)=>N((e?t.getUTCMonth():t.getMonth())+1),"%d":(t,e)=>N(e?t.getUTCDate():t.getDate()),"%H":(t,e)=>N(e?t.getUTCHours():t.getHours()),"%M":(t,e)=>N(e?t.getUTCMinutes():t.getMinutes()),"%S":(t,e)=>N(e?t.getUTCSeconds():t.getSeconds())},Y=(t,e,s)=>(e=e??new Date,t.replace(/%[yYmdHMS]/g,t=>U[t]?U[t](e,s):t.slice(1))),L=t=>{const e=new Date(t);return e.getTime()==e.getTime()&&t==e.toISOString().slice(0,10)},P=36e5,F=24*P,$={ms:1,s:1e3,m:6e4,h:P,d:F,w:7*F,y:315576e5},q=["y","d","h","m","s","ms"];const H=t=>0==(t?.length??0),X=["",0,"0",null,!1,void 0],K=t=>-1==X.indexOf(t),_=()=>{},Q=(t,e,s)=>e(t.toLowerCase().replace(/\W+/g," ")).replace(/\s/g,s??""),J=(t,e)=>Q(t,t=>t.replace(/\s(\w)/g,t=>t.toUpperCase()),e),B=J,V=/&(amp|apos|lt|gt|nbsp|quot);/g,z={amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",quot:'"'},Z=t=>/^[\d]$/.test(t),W=t=>/^[A-Za-z]$/.test(t),G=t=>/^[^\w]$/.test(t),tt=t=>r(t.split("")).join("");class et{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 et).chars()}lower(){return this.hasLower=!0,this}static lower(){return(new et).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=tt(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 et).numbers()}space(){return this.hasSpace=!0,this}static space(){return(new et).space()}symbols(){return this.hasSymbols=!0,this}static symbols(){return(new et).symbols()}upper(){return this.hasUpper=!0,this}static upper(){return(new et).upper()}}const st=t=>t.split("").reverse().join(""),rt=(t,e)=>Q(t,t=>t.replace(/(\w)(\w*)/g,(t,e,s)=>e.toUpperCase()+s),e),nt=(t,e)=>e(t.value)?t.value:(t=>(t.maskIndex--,""))(t),at={"#":t=>t.value,0:t=>nt(t,Z),9:t=>nt(t,Z),A:t=>nt(t,W),Z:t=>nt(t,W),L:t=>nt(t,W).toLowerCase(),U:t=>nt(t,W).toUpperCase(),S:t=>nt(t,G)},it=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=>at[t.key]?at[t.key](t):(t.key!=t.value&&t.textIndex--,t.key))(t)+it(t)},ut=(t,e)=>it({mask:t,maskIndex:-1,text:e,textIndex:-1,key:"",value:""}),lt=(t,e)=>st(ut(st(t),st(e))),ht=(t,e)=>t.reduce((t,s)=>({...t,[s]:e[s]}),{}),ot=t=>t instanceof Date?new Date(t.getTime()):i(t)?t.map(t=>ot(t)):v(t)?b(t,t=>ot(t)):t,ct=(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]=ct(t[e],s[e])):t={...t,[e]:s[e]};return ct(t,...e)};class pt{}var vt,mt,dt,gt,ft,yt,St,Et,xt;pt.DESCRIPTION=Symbol("DESCRIPTION"),pt.ERROR=Symbol("ERROR"),pt.EXAMPLE=Symbol("EXAMPLE"),pt.INDEXES=Symbol("INDEXES"),pt.KEYS=Symbol("KEYS"),pt.LIST=Symbol("LIST"),pt.NAME=Symbol("NAME"),pt.REQUIRED=Symbol("REQUIRED"),pt.SOURCE=Symbol("SOURCE"),pt.TYPE=Symbol("TYPE");class bt{constructor(t){this[vt]="",this[mt]="",this[dt]=null,this[gt]="",this[ft]="any",this[yt]=!1,this.rules=[],this.custom=[],this[pt.TYPE]=t}description(t){return this[pt.DESCRIPTION]=t,this}example(t){return this[pt.EXAMPLE]=t,this}empty(t){const e=t;return this.unshift(({value:t})=>{const s=l(t);return{break:!l(e)&&!s,value:s?t:c(e)?e():e}})}equal(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t==n?{value:t}:this.invalid(`.equal(${n})`,e)})}error(t){return g(t)&&(this[pt.ERROR]=t),this}filter(...t){const e=t;return this.unshift(({value:t})=>{const s=-1==e.indexOf(t);return{break:!s,value:s?t:void 0}})}fn(t){return c(t)?t:()=>t}from(t){return this[pt.SOURCE]=t,this}invalid(t,e){return t=`[${this[pt.TYPE]}]${t}`,{error:this[pt.ERROR]?this[pt.ERROR]:this[pt.NAME]?this[pt.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[pt.REQUIRED]=!0,this.unshift(({value:e})=>l(e)?{value:e}:this.invalid(".required",t))}test(t){return!g(this.validate(t).error)}async testAsync(t){return!g((await this.validateAsync(t)).error)}toString(){return this[pt.TYPE]}unshift(t){return this.rules.unshift(t),this}validate(t,e){if(this.custom.length)return this.invalid("[async]");let s={value:t};for(let t=0;t<this.rules.length;t++){if(s=this.rules[t]({value:s.value,context:e}),s.error?.length)return{error:s.error,...s.message?{message:s.message}:{}};if(s.break)return{value:s.value}}return{value:s.value}}async validateAsync(t,e){let s=this.validate(t,e);if(s.error)return{error:s.error};for(let t=0;t<this.custom.length;t++){if(s=await this.custom[t]({value:s.value}),s.error)return{error:s.error};if(s.break)return{value:s.value}}return{value:s.value}}}vt=pt.NAME,mt=pt.DESCRIPTION,dt=pt.EXAMPLE,pt.SOURCE,gt=pt.ERROR,ft=pt.TYPE,yt=pt.REQUIRED;class wt extends bt{constructor(t){super("array"),this[St]=[],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[pt.INDEXES].push(s),s?this.push(({value:t})=>{const r=[];s[pt.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[pt.INDEXES].length?this[pt.INDEXES].map(t=>t.model()):this[pt.TYPE]}toString(){return this[pt.INDEXES].length?JSON.stringify(this.model(),null,4):this[pt.TYPE]}}St=pt.INDEXES;class Tt extends bt{constructor(t){super("boolean"),this.push(({value:e})=>u(e)?{value:e}:this.invalid("",t))}parse(){return this.unshift(({value:t})=>({value:l(t)?S(t):t}))}}class Ct extends bt{constructor(t){super("date"),this.push(({value:e})=>g(e)&&L(e)||!isNaN(new Date(e).getTime())?{value:e}:this.invalid("",t))}format(t){const e=t;return this.push(({value:t})=>({value:Y(e,new Date(t))}))}parse(){return this.unshift(({value:t})=>({value:new Date(t)}))}}class It extends bt{constructor(t){super("enum"),this[Et]=[],this.push(({value:e})=>l(e)?{value:e}:this.invalid(`('${this[pt.LIST].join("', '")}')`,t))}list(t,e){const s=t;return s&&this[pt.LIST].push(...s),s?this.push(({value:t})=>-1!=this[pt.LIST].indexOf(t)?{value:t}:this.invalid(`('${this[pt.LIST].join("', '")}')`,e)):this}toString(){return`${this[pt.TYPE]}('${this[pt.LIST].join("', '")}')`}}Et=pt.LIST;class Mt extends bt{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})=>o(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:l(t)?parseFloat(t.toString()):t}))}}class Dt extends bt{constructor(t){super("object"),this[xt]={},this.push(({value:e})=>v(e)?{value:e}:this.invalid("",t))}keys(t,e){const s=t;return s&&(this[pt.KEYS]={...this[pt.KEYS],...s}),s?this.push(({value:t})=>{const r=[],n={};return Object.keys(s).forEach(a=>{const i=s[a];i[pt.NAME]=i[pt.SOURCE]??a;const{error:u,message:h,value:o}=i.validate(t[i[pt.NAME]],n);!e&&h&&(e=h),u&&r.push(u),l(o)&&(n[a]=o)}),r.length?this.invalid("{ "+r.join(", ")+" }",e):{value:n}}):this}model(){const t={},e=Object.keys(this[pt.KEYS]);return e.length&&e.forEach(e=>t[e]=this[pt.KEYS][e].model()),e.length?t:this[pt.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[pt.KEYS]).length?JSON.stringify(this.model(),null,4):this[pt.TYPE]}}xt=pt.KEYS;class Rt extends bt{constructor(t){super("string"),this.push(({value:e})=>g(e)?{value:e}:this.invalid("",t))}between(t,e,s){return this.min(t,s),this.max(e,s)}email(t){const e=/^[\w-\\.]+@([\w-]+\.)+[\w-]{2,4}$/i;return this.push(({value:s})=>e.test(s)?{value:s}:this.invalid(".email",t))}length(t,e){const s=this.fn(t);return this.push(({value:t,context:r})=>{const n=s({value:t,context:r});return t.length==n?{value:t}:this.invalid(`.length(${n})`,e)})}lowerCase(){return this.push(({value:t})=>({value:t.toLowerCase()}))}lowerCamelCase(){return this.push(({value:t})=>({value:J(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:v(t)?JSON.stringify(t):l(t)?t.toString():t}))}required(t){return this[pt.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:rt(t)}))}}class At{static array(t,e){return new wt(e).items(t)}static boolean(t){return new Tt(t)}static date(t){return new Ct(t)}static enum(t,e){return new It(e).list(t)}static number(t){return new Mt(t)}static object(t,e){return new Dt(e).keys(t)}static ref(t,e){return({context:s})=>s&&l(s[t])?s[t]:e}static string(t){return new Rt(t)}test(t,...e){return!g(At.validate(t,...e).error)}async testAsync(t,...e){return!g((await At.validateAsync(t,...e)).error)}static validate(t,...e){let s={value:t};for(let t=0;t<e.length;t++)if(s=e[t].validate(s.value),s.error)return{value:s.value,error:s.error};return{value:s.value}}static async validateAsync(t,...e){let s={value:t};for(let t=0;t<e.length;t++)if(s=await e[t].validateAsync(s.value),s.error)return{value:s.value,error:s.error};return{value:s.value}}}return t.AsyncQueue=class{constructor(){this.running=!1,this.queue=[]}push(t){return new Promise((e,s)=>{this.queue.push(async()=>{try{const s=await t();e(s)}catch(t){s(t)}}),this.run()})}async run(){if(!this.running){for(this.running=!0;this.queue.length>0;){const t=this.queue.shift();t&&await t()}this.running=!1}}},t.EventEmitter=class{constructor(){this.events=new Map}on(t,e){const s=this.events.get(t);return s?s.push(e):this.events.set(t,[e]),{dispose:()=>this.off(t,e)}}once(t,e){const s=r=>{e(r),this.off(t,s)};return this.on(t,s),{dispose:()=>this.off(t,s)}}off(t,e){const s=this.events.get(t);if(e){if(s){const t=s.indexOf(e);t>=0&&s.splice(t,1)}}else this.events.set(t,[])}emit(t,e){const s=this.events.get(t);s&&s.forEach(t=>t(e))}},t.Hash=k,t.RandomString=et,t.Validation=At,t.ValidationBase=bt,t.ValidationKeys=pt,t.allowed=ht,t.cache=()=>{const t=[],e=[];return s=>{let r=t.indexOf(s);return-1==r&&(t.push(s),e.push({}),r=e.length-1),e[r]}},t.camelCase=B,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=ot,t.colorPalette=(t,e)=>b(e??R,e=>0==e?t:e>0?D(t,e):M(t,1- -1*e)),t.compareArray=(t,e)=>t.length===e.length&&t.every((t,s)=>t===e[s]),t.countArray=t=>{const e={};return t.forEach(t=>{const s=t.toString();e[s]=(e[s]||0)+1}),e},t.cutText=(t,e)=>{if(t.length>e){const s=t.substring(0,e).split(" ");return s.pop(),s.join(" ")+"..."}return t},t.dateFormat=Y,t.dateRange=(t,e)=>{const s=new Date(t),r=[];for(;t<e;)s.setDate(s.getDate()+1),r.push(new Date(s));return r},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(V,(t,e)=>z[e]).replace(/&#(\d+);/gi,(t,e)=>String.fromCharCode(parseInt(e,10))),t.denied=(t,e)=>ht(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.forEachAsync=async(t,e,s)=>{await Promise.allSettled(t.map((r,n)=>e.call(s,r,n,t)?.catch(_))).catch(_)},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(_)),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(_))},t.forLoop=(t,e,s)=>{for(let r=1;r<=t&&!1!==e.call(s,r,t);r++);return t},t.hexToRgb=T,t.hslToRgb=(t,e,s)=>{t/=60;const r=(1-Math.abs(2*s-1))*e,n=r*(1-Math.abs(t%2-1));let 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=u,t.isCharacter=t=>/^[\w]$/.test(t),t.isDate=t=>"date"==a(t),t.isDef=l,t.isDigit=Z,t.isEmpty=H,t.isFalse=t=>!K(t),t.isFloat=o,t.isFunction=c,t.isInteger=p,t.isLetter=W,t.isMap=t=>"map"==a(t),t.isNotEmpty=t=>!H(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!=d.indexOf(a(t)),t.isSet=t=>"set"==a(t),t.isSpecialChar=G,t.isString=g,t.isSymbol=t=>"symbol"==typeof t,t.isTrue=K,t.isUndefined=f,t.isValidDate=L,t.lastDayDate=t=>new Date(t.getFullYear(),t.getMonth()+1,0,t.getHours(),t.getMinutes(),t.getSeconds()),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=J,t.map=b,t.mask=ut,t.maskMoney=(t,e,s)=>(s++,e=parseInt((e||"0").replace(/\D/g,"")).toString(),lt(t,e.length<s?("0".repeat(s)+e).slice(-1*s):e)),t.maskReverse=lt,t.maskTest=(t,e)=>t.length==ut(t,e).length,t.merge=ct,t.msToString=t=>{const e=[];return q.forEach(s=>{const r=$[s],n=(t-t%r)/r;n&&(t-=n*r,e.push(n.toString()+s))}),e.join(" ")},t.noop=_,t.parseMs=t=>{const e=/(-?(?:\d+)?\.?\d+) *(ms|s|m|h|d|w|y)/gm;let s,r=0;for(;null!==(s=e.exec(t));)s.index===e.lastIndex&&e.lastIndex++,r+=parseFloat(s[1])*$[s[2]]||0;return r},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),u=Math.min(r,n,a),l=i-u,h=(u+i)/2;return[60*A(l,i,r,n,a),O(l,h),h]},t.shadeColor=M,t.shuffleArray=r,t.shuffleString=tt,t.sleep=t=>new Promise(e=>setTimeout(e,t)),t.stringReverse=st,t.tintColor=D,t.toArray=t=>i(t)?t:l(t)?[t]:[],t.toBool=S,t.type=a,t.uniqueArray=t=>t.filter((t,e,s)=>s.indexOf(t)===e),t.uniqueID=j,t.upperCamelCase=rt,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),j(12)].join("-")},t.uuidv1ToTimestamp=t=>{const e=t.replace(/-/g,""),s=parseInt(e.slice(0,8),16),r=parseInt(e.slice(8,12),16),n=(4095&parseInt(e.slice(12,16),16))*Math.pow(2,48)+r*Math.pow(2,32)+s;return Math.floor((n-122192928e9)/1e4)},t.uuidv4=()=>{const t=[];t.push(...Array(16).fill(0).map(()=>s(0,255))),t[6]=15&t[6]|64;const e=t.map(t=>t.toString(16).padStart(2,"0")).join("");return[e.slice(0,8),e.slice(8,12),e.slice(12,16),e.slice(16,20),e.slice(20)].join("-")},t.uuidv7=()=>{const t=Date.now(),e=[];e[0]=t/2**40&255,e[1]=t/2**32&255,e[2]=t>>>24&255,e[3]=t>>>16&255,e[4]=t>>>8&255,e[5]=255&t,e.push(...Array(10).fill(0).map(()=>s(0,255))),e[6]=15&e[6]|112,e[8]=63&e[8]|128;const r=e.map(t=>t.toString(16).padStart(2,"0")).join("");return[r.slice(0,8),r.slice(8,12),r.slice(12,16),r.slice(16,20),r.slice(20)].join("-")},t.uuidv7ToTimestamp=t=>parseInt(t.replace(/-/g,"").slice(0,12),16),t.uuidv8=t=>{const e=Date.now(),r=[];r[0]=e/2**40&255,r[1]=e/2**32&255,r[2]=e>>>24&255,r[3]=e>>>16&255,r[4]=e>>>8&255,r[5]=255&e,r.push(...Array(8).fill(0).map(()=>s(0,255))),r[6]=15&r[6]|128,r[8]=63&r[8]|128;const n=r.map(t=>t.toString(16).padStart(2,"0")).join("");return[n.slice(0,8),n.slice(8,12),n.slice(12,16),k.hex(t??"").slice(4),n.slice(16)].join("-")},t}({});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@andrewcaires/utils.js",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.13",
|
|
4
4
|
"description": "JavaScript utility library for web and nodejs development",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs.js",
|
|
@@ -49,10 +49,10 @@
|
|
|
49
49
|
"@rollup/plugin-typescript": "^12.1.4",
|
|
50
50
|
"@types/node": "^24.3.0",
|
|
51
51
|
"eslint": "^9.33.0",
|
|
52
|
-
"rollup": "^4.46.
|
|
52
|
+
"rollup": "^4.46.4",
|
|
53
53
|
"rollup-plugin-dts": "^6.2.3",
|
|
54
54
|
"tslib": "^2.8.1",
|
|
55
55
|
"tsx": "^4.20.4",
|
|
56
|
-
"typescript-eslint": "^8.
|
|
56
|
+
"typescript-eslint": "^8.40.0"
|
|
57
57
|
}
|
|
58
58
|
}
|