@andrewcaires/utils.js 0.2.23 → 0.2.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /*!
2
- * @andrewcaires/utils.js v0.2.23
2
+ * @andrewcaires/utils.js v0.2.25
3
3
  * JavaScript utility library for web and nodejs development
4
4
  * (c) 2024 Andrew Caires
5
5
  * @license: MIT
6
6
  */
7
- "use strict";const e={},t=e=>"array"==l(e),r=e=>"boolean"==l(e),s=e=>"null"!=l(e),i=e=>"number"==l(e),n=e=>"object"==l(e),a=e=>"string"==l(e),o=e=>void 0===e,l=t=>null==t?"null":e[e.toString.call(t)]||"object";["Array","Boolean","Function","Number","Object","String"].forEach((t=>e["[object "+t+"]"]=t.toLowerCase()));const h=(e,t,r)=>Math.max(t,Math.min(r,e)),u=e=>("0"+e).slice(-2),p=e=>parseInt(e,16)||0,c=(e,t)=>{return(r=p(e)+t,h(r,0,255)).toString(16);var r},v=e=>Math.random().toString(16).slice(e),d=()=>v(-3),x=()=>v(-4),m=()=>x()+x(),f=()=>m()+m(),g=e=>("0"+e.toString()).slice(-2),y={"%y":e=>g(e.getFullYear()),"%Y":e=>e.getFullYear().toString(),"%m":e=>g(e.getMonth()+1),"%d":e=>g(e.getDate()),"%H":e=>g(e.getHours()),"%M":e=>g(e.getMinutes()),"%S":e=>g(e.getSeconds())};function _(e,t,r,s){return new(r||(r=Promise))((function(i,n){function a(e){try{l(s.next(e))}catch(e){n(e)}}function o(e){try{l(s.throw(e))}catch(e){n(e)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(a,o)}l((s=s.apply(e,t||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;const b=(e,t,r)=>{for(let s=0;s<e.length&&!1!==t.call(r,e[s],s,e);s++);return e},k=(e,t,r)=>{let s="";const i=Object.keys(e);for(let n=0;n<i.length&&(s=i[n],!1!==t.call(r,e[s],s,e));n++);return e},w=()=>{},S="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",C=(e,t,r)=>{let s="";for(let i=0;i<e.length;i++){const n=S.indexOf(e[i]),a=S.indexOf(t[i%t.length]);s+=-1===n||-1===a?e[i]:S[(r?n-a+62:n+a)%62]}return s},j=(e,t)=>t(e.toLowerCase().replace(/\W+/g," ")).replace(/\s/g,""),O=e=>/^[\d]$/.test(e),A=e=>/^[A-Za-z]$/.test(e),I=e=>/^[^\w]$/.test(e),M=e=>j(e,(e=>e.replace(/\s(\w)/g,(e=>e.toUpperCase())))),E=M,T=e=>j(e,(e=>e.replace(/(\w)(\w*)/g,((e,t,r)=>t.toUpperCase()+r)))),F=e=>e.split("").reverse().join(""),L=e=>(e.maskIndex--,""),N={"#":({value:e})=>e,0:e=>O(e.value)?e.value:L(e),9:e=>O(e.value)?e.value:L(e),A:e=>A(e.value)?e.value:L(e),Z:e=>A(e.value)?e.value:L(e),L:e=>A(e.value)?e.value.toLowerCase():L(e),U:e=>A(e.value)?e.value.toUpperCase():L(e),S:e=>I(e.value)?e.value:L(e)},D=e=>{e.maskIndex++,e.textIndex++;const{mask:t,maskIndex:r,text:s,textIndex:i}=e;e.key=t[r],e.value=s[i];const{key:n,value:a}=e;return o(n)||o(a)?"":(e=>N[e.key]?N[e.key](e):(e.key!=e.value&&e.textIndex--,e.key))(e)+D(e)},H=(e,t)=>D({mask:e,maskIndex:-1,text:t,textIndex:-1,key:"",value:""}),U=H,q=(e,t)=>F(U(F(e),F(t))),B=36e5,Y=24*B,$={ms:1,s:1e3,m:6e4,h:B,d:Y,w:6048e5,y:315576e5},P=["y","d","h","m","s","ms"],R=(e,t)=>e.reduce(((e,r)=>Object.assign(Object.assign({},e),{[r]:t[r]})),{}),z=(e,...t)=>{if(!t.length)return e;const r=t.shift();if(n(e)&&n(r))for(const t in r)n(r[t])?(e[t]||(e=Object.assign(Object.assign({},e),{[t]:{}})),e[t]=z(e[t],r[t])):e=Object.assign(Object.assign({},e),{[t]:r[t]});return z(e,...t)};class J{constructor(){this.name="",this._error="",this._filter=[],this._type="any",this.rules=[],this.custom=[]}empty(e){return this._value=e,this.unshift((e=>{const t=s(e);return{break:!t,value:t?e:this._value}}))}error(e){return this._error=e,this}filter(...e){return this._filter=e,this.unshift((e=>{const t=-1==this._filter.indexOf(e);return{break:!t,value:t?e:void 0}}))}invalid(e){return{error:this._error?this._error:this.name?this.name+":"+e:e}}parse(){return this.unshift((e=>({value:e})))}push(e){return this.rules.push(e),this}required(){return this.unshift((e=>s(e)?{value:e}:this.invalid("["+this._type+"].required")))}test(e){return!a(this.validate(e).error)}testAsync(e){return _(this,void 0,void 0,(function*(){return!a((yield this.validateAsync(e)).error)}))}unshift(e){return this.rules.unshift(e),this}validate(e){if(this.custom.length)return this.invalid("[async]");let t={value:e};for(let e=0;e<this.rules.length;e++){if(t=this.rules[e](t.value),t.error)return{error:t.error};if(t.break)return{value:t.value}}return{value:t.value}}validateAsync(e){return _(this,void 0,void 0,(function*(){let t=this.validate(e);if(t.error)return{error:t.error};for(let e=0;e<this.custom.length;e++){if(t=yield this.custom[e](t.value),t.error)return{error:t.error};if(t.break)return{value:t.value}}return{value:t.value}}))}}class V extends J{constructor(){super(),this._length=0,this._max=0,this._min=0,this._type="array",this.push((e=>{if(t(e)){if(this._items){this._items.name="";for(let t=0;t<e.length;t++){const{error:r,value:s}=this._items.validate(e[t]);if(r)return this.invalid("["+this._type+"]< "+r+"["+t+"] >");e[t]=s}}return{value:e}}return this.invalid("["+this._type+"]")}))}between(e,t){return this.min(e),this.max(t)}items(e){return this._items=e,this}length(e){return this._length=e,this.push((e=>e.length==this._length?{value:e}:this.invalid("["+this._type+"].length("+this._length+")")))}max(e){return this._max=e,this.push((e=>e.length<=this._max?{value:e}:this.invalid("["+this._type+"].max("+this._max+")")))}min(e){return this._min=e,this.push((e=>e.length>=this._min?{value:e}:this.invalid("["+this._type+"].min("+this._min+")")))}}class W extends J{constructor(){super(),this._type="boolean",this.push((e=>r(e)?{value:e}:this.invalid("["+this._type+"]")))}parse(){return this.unshift((e=>({value:s(e)?-1!=[1,"1",!0,"true"].indexOf(e):e})))}}class Z extends J{constructor(){super(),this._max=0,this._min=0,this._type="number",this.push((e=>i(e)?{value:e}:this.invalid("["+this._type+"]")))}between(e,t){return this.min(e),this.max(t)}max(e){return this._max=e,this.push((e=>e<=this._max?{value:e}:this.invalid("["+this._type+"].max("+this._max+")")))}min(e){return this._min=e,this.push((e=>e>=this._min?{value:e}:this.invalid("["+this._type+"].min("+this._min+")")))}parse(){return this.unshift((e=>({value:s(e)?parseFloat(e):e})))}}class K extends J{constructor(){super(),this._keys={},this._type="object",this.push((e=>{if(n(e)){const t=[],r={};return Object.keys(this._keys).forEach((i=>{const n=this._keys[i];n.name=i;const{error:a,value:o}=n.validate(e[i]);a&&t.push(a),s(o)&&(r[i]=o)})),t.length?this.invalid("["+this._type+"]{ "+t.join(", ")+" }"):{value:r}}return this.invalid("["+this._type+"]")}))}keys(e){return this._keys=e||{},this}parse(){return this.unshift((e=>{if(!n(e))try{e=JSON.parse(e)}catch(e){return this.invalid("["+this._type+"]")}const t=Object.keys(this._keys);return{value:t.length?R(t,e):e}}))}}class G extends J{constructor(){super(),this._length=0,this._max=0,this._min=0,this._type="string",this.push((e=>a(e)?{value:e}:this.invalid("["+this._type+"]")))}between(e,t){return this.min(e),this.max(t)}date(){return this.push((e=>isNaN(new Date(e).getTime())?this.invalid("["+this._type+"].date"):{value:e}))}email(){return this.push((e=>/^[\w-\\.]+@([\w-]+\.)+[\w-]{2,4}$/i.test(e)?{value:e}:this.invalid("["+this._type+"].email")))}length(e){return this._length=e,this.push((e=>e.length==this._length?{value:e}:this.invalid("["+this._type+"].length("+this._length+")")))}lowerCase(){return this.push((e=>({value:e.toLowerCase()})))}lowerCamelCase(){return this.push((e=>({value:M(e)})))}max(e){return this._max=e,this.push((e=>e.length<=this._max?{value:e}:this.invalid("["+this._type+"].max("+this._max+")")))}mask(e){return this.push((t=>({value:H(e,t)})))}min(e){return this._min=e,this.push((e=>e.length>=this._min?{value:e}:this.invalid("["+this._type+"].min("+this._min+")")))}parse(){return this.unshift((e=>({value:n(e)?JSON.stringify(e):s(e)?e.toString():e})))}required(){return this.push((e=>e.length?{value:e}:this.invalid("["+this._type+"].required")))}trim(){return this.push((e=>({value:e.trim()})))}upperCase(){return this.push((e=>({value:e.toUpperCase()})))}upperCamelCase(){return this.push((e=>({value:T(e)})))}}class Q{static array(e){return(new V).items(e)}static boolean(){return new W}static number(){return new Z}static object(e){return(new K).keys(e)}static string(){return new G}test(e,...t){return!a(Q.validate(e,...t).error)}testAsync(e,...t){return _(this,void 0,void 0,(function*(){return!a((yield Q.validateAsync(e,...t)).error)}))}static validate(e,...t){let r={value:e};for(let e=0;e<t.length;e++)if(r=t[e].validate(r.value),r.error)return{error:r.error};return r}static validateAsync(e,...t){return _(this,void 0,void 0,(function*(){let r={value:e};for(let e=0;e<t.length;e++)if(r=yield t[e].validateAsync(r.value),r.error)return{error:r.error};return r}))}}exports.EventEmitter=class{constructor(){this.events=new Map}on(e,t){const r=this.events.get(e);return r?r.push(t):this.events.set(e,[t]),{dispose:()=>this.off(e,t)}}once(e,t){const r=s=>{t(s),this.off(e,r)};return this.on(e,r),{dispose:()=>this.off(e,r)}}off(e,t){const r=this.events.get(e);if(t){if(r){const e=r.indexOf(t);e>=0&&r.splice(e,1)}}else this.events.set(e,[])}emit(e,t){const r=this.events.get(e);r&&r.forEach((e=>e(t)))}},exports.Validation=Q,exports.ValidationBase=J,exports.allowed=R,exports.cache=()=>{const e=[],t=[];return r=>{let s=e.indexOf(r);return-1==s&&(e.push(r),t.push({}),s=t.length-1),t[s]}},exports.camelCase=E,exports.chunkArray=(e,t)=>{const r=[];for(let s=0;s<e.length;s+=t)r.push(e.slice(s,s+t));return r},exports.clamp=h,exports.cutText=(e,t)=>{if(e.length>t){const r=e.substring(0,t).split(" ");return r.pop(),r.join(" ")+"..."}return e},exports.dateFormat=(e,t)=>t.replace(/%[yYmdHMS]/g,(t=>y[t]?y[t](e):t.slice(1))),exports.debounce=(e,t)=>{let r;const s=()=>{r&&clearTimeout(r)};return{cancel:s,run(...i){s(),r=setTimeout((()=>e(...i)),t)}}},exports.decodeHTML=e=>e.replace(/&#(\d+);/g,((e,t)=>String.fromCharCode(t))),exports.denied=(e,t)=>R(Object.keys(t).filter((t=>-1==e.indexOf(t))),t),exports.each=(e,r,s)=>t(e)?b(e,r,s):n(e)?k(e,r,s):null,exports.encodeHTML=e=>e.replace(/[\u00A0-\u9999<>\\&]/g,(e=>"&#"+e.charCodeAt(0)+";")),exports.forEachAsync=(e,t,r)=>_(void 0,void 0,void 0,(function*(){yield Promise.allSettled(e.map(((s,i)=>t.call(r,s,i,e)))).catch(w)})),exports.forEachIndex=b,exports.forEachKey=k,exports.forEachSeries=(e,t,r)=>_(void 0,void 0,void 0,(function*(){for(let s=0;s<e.length;s++)yield t.call(r,e[s],s,e).catch(w)})),exports.forLoop=(e,t,r)=>{for(let s=1;s<=e&&!1!==t.call(r,s,e);s++);return e},exports.hash=e=>(e=C(S,e,!1),{generate:t=>C(t,e,!1),reverse:t=>C(t,e,!0)}),exports.hexToRgb=e=>{var t;return(null===(t=e.replace(/^#/,"").match(/.{1,2}/g))||void 0===t?void 0:t.map((e=>p(e))))||[]},exports.isArray=t,exports.isBoolean=r,exports.isCharacter=e=>/^[\w]$/.test(e),exports.isDef=s,exports.isDigit=O,exports.isFloat=e=>i(e)&&!!(e%1),exports.isFunction=e=>"function"==l(e),exports.isInteger=e=>i(e)&&!(e%1),exports.isLetter=A,exports.isNull=e=>null===e,exports.isNumber=i,exports.isObject=n,exports.isString=a,exports.isSymbol=I,exports.isUndefined=o,exports.lerp=(e,t,r)=>e+(t-e)*h(r,0,1),exports.loop=(e,t)=>{let r=!1;const s=()=>_(void 0,void 0,void 0,(function*(){r&&(yield e(),setTimeout(s,t))}));return{start(){r||(r=!0,s())},stop(){r=!1}}},exports.lowerCamelCase=M,exports.map=(e,t,r)=>{let s="";const i=Object.keys(e);for(let n=0;n<i.length;n++)s=i[n],e[s]=t.call(r,e[s],s,e);return e},exports.mask=H,exports.maskMoney=(e,t,r)=>(r++,t=parseInt((t||"0").replace(/\W/g,"")).toString(),q(e,t.length<r?("0".repeat(r)+t).slice(-1*r):t)),exports.maskReverse=q,exports.maskTest=(e,t)=>e.length==U(e,t).length,exports.merge=z,exports.msToString=e=>{const t=[];return P.forEach((r=>{const s=$[r],i=(e-e%s)/s;i&&(e-=i*s,t.push(i.toString()+r))})),t.join(" ")},exports.noop=w,exports.parseMs=e=>{const t=/(-?(?:\d+)?\.?\d+) *(ms|s|m|h|d|w|y)/gm;let r,s=0;for(;null!==(r=t.exec(e));)r.index===t.lastIndex&&t.lastIndex++,s+=parseFloat(r[1])*$[r[2]]||0;return s},exports.parseSize=e=>{if(i(e))return e+"px";const t=(e=>/(-?(?:\d+)?\.?\d+) *(px|%|cm|mm|in|pt|pc|en|ex|ch|rem|vw|vh|vmin|vmax)*/g.exec(e))(e);return t?parseFloat(t[1])+(t[2]||"px"):"0px"},exports.rangeArray=(e,t,r=1)=>Array.from({length:(t-e)/r+1},((t,s)=>e+s*r)),exports.rgbToHex=(e,t,r)=>"#"+u(e.toString(16))+u(t.toString(16))+u(r.toString(16)),exports.shadeColor=(e,t)=>"#"+e.replace(/^#/,"").replace(/../g,(e=>u(c(e,t)))),exports.shuffleArray=e=>{for(let t=e.length-1;t>0;t--){const r=Math.floor(Math.random()*(t+1));[e[t],e[r]]=[e[r],e[t]]}return e},exports.simpleID=()=>d()+x(),exports.sleep=e=>new Promise((t=>setTimeout(t,e))),exports.stringReverse=F,exports.toArray=e=>t(e)?e:s(e)?[e]:[],exports.toBool=e=>"true"===e||"1"===e,exports.type=l,exports.uniqueID=()=>f()+f()+f()+f(),exports.upperCamelCase=T,exports.uuidv4=()=>m()+"-"+x()+"-4"+d()+"-"+x()+"-"+(m()+x());
7
+ "use strict";const e={},t=t=>null==t?"null":e[e.toString.call(t)]||"object";["Array","Boolean","Function","Number","Object","String"].forEach((t=>e["[object "+t+"]"]=t.toLowerCase()));const r=e=>"array"==t(e),s=e=>"boolean"==t(e),i=e=>"null"!=t(e),n=e=>"number"==t(e),a=e=>"object"==t(e),o=e=>a(e)&&e.constructor===Object,l=e=>"string"==t(e),h=e=>void 0===e,u=(e,t,r)=>Math.max(t,Math.min(r,e)),p=e=>("0"+e).slice(-2),c=e=>parseInt(e,16)||0,v=(e,t)=>{return(r=c(e)+t,u(r,0,255)).toString(16);var r},d=e=>Math.random().toString(16).slice(e),x=()=>d(-3),m=()=>d(-4),g=()=>m()+m(),f=()=>g()+g(),y=e=>("0"+e.toString()).slice(-2),_={"%y":e=>y(e.getFullYear()),"%Y":e=>e.getFullYear().toString(),"%m":e=>y(e.getMonth()+1),"%d":e=>y(e.getDate()),"%H":e=>y(e.getHours()),"%M":e=>y(e.getMinutes()),"%S":e=>y(e.getSeconds())},b=36e5,k=24*b,w={ms:1,s:1e3,m:6e4,h:b,d:k,w:7*k,y:315576e5},S=["y","d","h","m","s","ms"];function j(e,t,r,s){return new(r||(r=Promise))((function(i,n){function a(e){try{l(s.next(e))}catch(e){n(e)}}function o(e){try{l(s.throw(e))}catch(e){n(e)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(a,o)}l((s=s.apply(e,t||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;const C=(e,t,r)=>{for(let s=0;s<e.length&&!1!==t.call(r,e[s],s,e);s++);return e},O=(e,t,r)=>{let s="";const i=Object.keys(e);for(let n=0;n<i.length&&(s=i[n],!1!==t.call(r,e[s],s,e));n++);return e},A=()=>{},I="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",M=(e,t,r)=>{let s="";for(let i=0;i<e.length;i++){const n=I.indexOf(e[i]),a=I.indexOf(t[i%t.length]);s+=-1===n||-1===a?e[i]:I[(r?n-a+62:n+a)%62]}return s},E=(e,t)=>t(e.toLowerCase().replace(/\W+/g," ")).replace(/\s/g,""),T=e=>E(e,(e=>e.replace(/\s(\w)/g,(e=>e.toUpperCase())))),F=T,L=/&(amp|apos|lt|gt|nbsp|quot);/g,q={amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",quot:'"'},N=e=>/^[\d]$/.test(e),D=e=>/^[A-Za-z]$/.test(e),H=e=>/^[^\w]$/.test(e),U=e=>e.split("").reverse().join(""),P=e=>E(e,(e=>e.replace(/(\w)(\w*)/g,((e,t,r)=>t.toUpperCase()+r)))),Y=e=>(e.maskIndex--,""),$={"#":({value:e})=>e,0:e=>N(e.value)?e.value:Y(e),9:e=>N(e.value)?e.value:Y(e),A:e=>D(e.value)?e.value:Y(e),Z:e=>D(e.value)?e.value:Y(e),L:e=>D(e.value)?e.value.toLowerCase():Y(e),U:e=>D(e.value)?e.value.toUpperCase():Y(e),S:e=>H(e.value)?e.value:Y(e)},z=e=>{e.maskIndex++,e.textIndex++;const{mask:t,maskIndex:r,text:s,textIndex:i}=e;e.key=t[r],e.value=s[i];const{key:n,value:a}=e;return h(n)||h(a)?"":(e=>$[e.key]?$[e.key](e):(e.key!=e.value&&e.textIndex--,e.key))(e)+z(e)},B=(e,t)=>z({mask:e,maskIndex:-1,text:t,textIndex:-1,key:"",value:""}),R=B,Z=(e,t)=>U(R(U(e),U(t))),J=(e,t)=>e.reduce(((e,r)=>Object.assign(Object.assign({},e),{[r]:t[r]})),{}),W=(e,...t)=>{if(!t.length)return e;const r=t.shift();if(o(e)&&o(r))for(const t in r)o(r[t])?(e[t]||(e=Object.assign(Object.assign({},e),{[t]:{}})),e[t]=W(e[t],r[t])):e=Object.assign(Object.assign({},e),{[t]:r[t]});return W(e,...t)};class K{constructor(){this.name="",this._error="",this._filter=[],this._type="any",this.rules=[],this.custom=[]}empty(e){return this._value=e,this.unshift((e=>{const t=i(e);return{break:!t,value:t?e:this._value}}))}error(e){return this._error=e,this}filter(...e){return this._filter=e,this.unshift((e=>{const t=-1==this._filter.indexOf(e);return{break:!t,value:t?e:void 0}}))}invalid(e){return{error:this._error?this._error:this.name?this.name+":"+e:e}}parse(){return this.unshift((e=>({value:e})))}push(e){return this.rules.push(e),this}required(){return this.unshift((e=>i(e)?{value:e}:this.invalid("["+this._type+"].required")))}test(e){return!l(this.validate(e).error)}testAsync(e){return j(this,void 0,void 0,(function*(){return!l((yield this.validateAsync(e)).error)}))}unshift(e){return this.rules.unshift(e),this}validate(e){if(this.custom.length)return this.invalid("[async]");let t={value:e};for(let e=0;e<this.rules.length;e++){if(t=this.rules[e](t.value),t.error)return{error:t.error};if(t.break)return{value:t.value}}return{value:t.value}}validateAsync(e){return j(this,void 0,void 0,(function*(){let t=this.validate(e);if(t.error)return{error:t.error};for(let e=0;e<this.custom.length;e++){if(t=yield this.custom[e](t.value),t.error)return{error:t.error};if(t.break)return{value:t.value}}return{value:t.value}}))}}class V extends K{constructor(){super(),this._length=0,this._max=0,this._min=0,this._type="array",this.push((e=>{if(r(e)){if(this._items){this._items.name="";for(let t=0;t<e.length;t++){const{error:r,value:s}=this._items.validate(e[t]);if(r)return this.invalid("["+this._type+"]< "+r+"["+t+"] >");e[t]=s}}return{value:e}}return this.invalid("["+this._type+"]")}))}between(e,t){return this.min(e),this.max(t)}items(e){return this._items=e,this}length(e){return this._length=e,this.push((e=>e.length==this._length?{value:e}:this.invalid("["+this._type+"].length("+this._length+")")))}max(e){return this._max=e,this.push((e=>e.length<=this._max?{value:e}:this.invalid("["+this._type+"].max("+this._max+")")))}min(e){return this._min=e,this.push((e=>e.length>=this._min?{value:e}:this.invalid("["+this._type+"].min("+this._min+")")))}}class G extends K{constructor(){super(),this._type="boolean",this.push((e=>s(e)?{value:e}:this.invalid("["+this._type+"]")))}parse(){return this.unshift((e=>({value:i(e)?-1!=[1,"1",!0,"true"].indexOf(e):e})))}}class Q extends K{constructor(){super(),this._max=0,this._min=0,this._type="number",this.push((e=>n(e)?{value:e}:this.invalid("["+this._type+"]")))}between(e,t){return this.min(e),this.max(t)}max(e){return this._max=e,this.push((e=>e<=this._max?{value:e}:this.invalid("["+this._type+"].max("+this._max+")")))}min(e){return this._min=e,this.push((e=>e>=this._min?{value:e}:this.invalid("["+this._type+"].min("+this._min+")")))}parse(){return this.unshift((e=>({value:i(e)?parseFloat(e):e})))}}class X extends K{constructor(){super(),this._keys={},this._type="object",this.push((e=>{if(a(e)){const t=[],r={};return Object.keys(this._keys).forEach((s=>{const n=this._keys[s];n.name=s;const{error:a,value:o}=n.validate(e[s]);a&&t.push(a),i(o)&&(r[s]=o)})),t.length?this.invalid("["+this._type+"]{ "+t.join(", ")+" }"):{value:r}}return this.invalid("["+this._type+"]")}))}keys(e){return this._keys=e||{},this}parse(){return this.unshift((e=>{if(!a(e))try{e=JSON.parse(e)}catch(e){return this.invalid("["+this._type+"]")}const t=Object.keys(this._keys);return{value:t.length?J(t,e):e}}))}}class ee extends K{constructor(){super(),this._length=0,this._max=0,this._min=0,this._type="string",this.push((e=>l(e)?{value:e}:this.invalid("["+this._type+"]")))}between(e,t){return this.min(e),this.max(t)}date(){return this.push((e=>isNaN(new Date(e).getTime())?this.invalid("["+this._type+"].date"):{value:e}))}email(){return this.push((e=>/^[\w-\\.]+@([\w-]+\.)+[\w-]{2,4}$/i.test(e)?{value:e}:this.invalid("["+this._type+"].email")))}length(e){return this._length=e,this.push((e=>e.length==this._length?{value:e}:this.invalid("["+this._type+"].length("+this._length+")")))}lowerCase(){return this.push((e=>({value:e.toLowerCase()})))}lowerCamelCase(){return this.push((e=>({value:T(e)})))}max(e){return this._max=e,this.push((e=>e.length<=this._max?{value:e}:this.invalid("["+this._type+"].max("+this._max+")")))}mask(e){return this.push((t=>({value:B(e,t)})))}min(e){return this._min=e,this.push((e=>e.length>=this._min?{value:e}:this.invalid("["+this._type+"].min("+this._min+")")))}parse(){return this.unshift((e=>({value:a(e)?JSON.stringify(e):i(e)?e.toString():e})))}required(){return this.push((e=>e.length?{value:e}:this.invalid("["+this._type+"].required")))}trim(){return this.push((e=>({value:e.trim()})))}upperCase(){return this.push((e=>({value:e.toUpperCase()})))}upperCamelCase(){return this.push((e=>({value:P(e)})))}}class te{static array(e){return(new V).items(e)}static boolean(){return new G}static number(){return new Q}static object(e){return(new X).keys(e)}static string(){return new ee}test(e,...t){return!l(te.validate(e,...t).error)}testAsync(e,...t){return j(this,void 0,void 0,(function*(){return!l((yield te.validateAsync(e,...t)).error)}))}static validate(e,...t){let r={value:e};for(let e=0;e<t.length;e++)if(r=t[e].validate(r.value),r.error)return{error:r.error};return r}static validateAsync(e,...t){return j(this,void 0,void 0,(function*(){let r={value:e};for(let e=0;e<t.length;e++)if(r=yield t[e].validateAsync(r.value),r.error)return{error:r.error};return r}))}}exports.EventEmitter=class{constructor(){this.events=new Map}on(e,t){const r=this.events.get(e);return r?r.push(t):this.events.set(e,[t]),{dispose:()=>this.off(e,t)}}once(e,t){const r=s=>{t(s),this.off(e,r)};return this.on(e,r),{dispose:()=>this.off(e,r)}}off(e,t){const r=this.events.get(e);if(t){if(r){const e=r.indexOf(t);e>=0&&r.splice(e,1)}}else this.events.set(e,[])}emit(e,t){const r=this.events.get(e);r&&r.forEach((e=>e(t)))}},exports.Validation=te,exports.allowed=J,exports.cache=()=>{const e=[],t=[];return r=>{let s=e.indexOf(r);return-1==s&&(e.push(r),t.push({}),s=t.length-1),t[s]}},exports.camelCase=F,exports.chunkArray=(e,t)=>{const r=[];for(let s=0;s<e.length;s+=t)r.push(e.slice(s,s+t));return r},exports.clamp=u,exports.cutText=(e,t)=>{if(e.length>t){const r=e.substring(0,t).split(" ");return r.pop(),r.join(" ")+"..."}return e},exports.dateFormat=(e,t)=>t.replace(/%[yYmdHMS]/g,(t=>_[t]?_[t](e):t.slice(1))),exports.debounce=(e,t)=>{let r;const s=()=>{r&&clearTimeout(r)};return{cancel:s,run(...i){s(),r=setTimeout((()=>e(...i)),t)}}},exports.decodeHTML=e=>e.replace(L,((e,t)=>q[t])).replace(/&#(\d+);/gi,((e,t)=>String.fromCharCode(parseInt(t,10)))),exports.denied=(e,t)=>J(Object.keys(t).filter((t=>-1==e.indexOf(t))),t),exports.each=(e,t,s)=>r(e)?C(e,t,s):a(e)?O(e,t,s):null,exports.encodeHTML=e=>e.replace(/[^0-9A-Za-z ]/g,(e=>"&#"+e.charCodeAt(0)+";")),exports.forEachAsync=(e,t,r)=>j(void 0,void 0,void 0,(function*(){yield Promise.allSettled(e.map(((s,i)=>t.call(r,s,i,e)))).catch(A)})),exports.forEachIndex=C,exports.forEachKey=O,exports.forEachSeries=(e,t,r)=>j(void 0,void 0,void 0,(function*(){for(let s=0;s<e.length;s++)yield t.call(r,e[s],s,e).catch(A)})),exports.forLoop=(e,t,r)=>{for(let s=1;s<=e&&!1!==t.call(r,s,e);s++);return e},exports.hash=e=>(e=M(I,e,!1),{generate:t=>M(t,e,!1),reverse:t=>M(t,e,!0)}),exports.hexToRgb=e=>{var t;return(null===(t=e.replace(/^#/,"").match(/.{1,2}/g))||void 0===t?void 0:t.map((e=>c(e))))||[]},exports.isArray=r,exports.isBoolean=s,exports.isCharacter=e=>/^[\w]$/.test(e),exports.isDef=i,exports.isDigit=N,exports.isFloat=e=>n(e)&&!!(e%1),exports.isFunction=e=>"function"==t(e),exports.isInteger=e=>n(e)&&!(e%1),exports.isLetter=D,exports.isNull=e=>null===e,exports.isNumber=n,exports.isObject=a,exports.isPlainObject=o,exports.isString=l,exports.isSymbol=H,exports.isUndefined=h,exports.lerp=(e,t,r)=>e+(t-e)*u(r,0,1),exports.loop=(e,t)=>{let r=!1;const s=()=>j(void 0,void 0,void 0,(function*(){r&&(yield e(),setTimeout(s,t))}));return{start(){r||(r=!0,s())},stop(){r=!1}}},exports.lowerCamelCase=T,exports.map=(e,t,r)=>{let s="";const i=Object.keys(e);for(let n=0;n<i.length;n++)s=i[n],e[s]=t.call(r,e[s],s,e);return e},exports.mask=B,exports.maskMoney=(e,t,r)=>(r++,t=parseInt((t||"0").replace(/\W/g,"")).toString(),Z(e,t.length<r?("0".repeat(r)+t).slice(-1*r):t)),exports.maskReverse=Z,exports.maskTest=(e,t)=>e.length==R(e,t).length,exports.merge=W,exports.msToString=e=>{const t=[];return S.forEach((r=>{const s=w[r],i=(e-e%s)/s;i&&(e-=i*s,t.push(i.toString()+r))})),t.join(" ")},exports.noop=A,exports.parseMs=e=>{const t=/(-?(?:\d+)?\.?\d+) *(ms|s|m|h|d|w|y)/gm;let r,s=0;for(;null!==(r=t.exec(e));)r.index===t.lastIndex&&t.lastIndex++,s+=parseFloat(r[1])*w[r[2]]||0;return s},exports.parseSize=e=>{if(n(e))return e+"px";const t=(e=>/(-?(?:\d+)?\.?\d+) *(px|%|cm|mm|in|pt|pc|en|ex|ch|rem|vw|vh|vmin|vmax)*/g.exec(e))(e);return t?parseFloat(t[1])+(t[2]||"px"):"0px"},exports.random=(e,t)=>Math.floor(Math.random()*(t-e+1)+e),exports.rangeArray=(e,t,r=1)=>Array.from({length:(t-e)/r+1},((t,s)=>e+s*r)),exports.rgbToHex=(e,t,r)=>"#"+p(e.toString(16))+p(t.toString(16))+p(r.toString(16)),exports.shadeColor=(e,t)=>"#"+e.replace(/^#/,"").replace(/../g,(e=>p(v(e,t)))),exports.shuffleArray=e=>{for(let t=e.length-1;t>0;t--){const r=Math.floor(Math.random()*(t+1));[e[t],e[r]]=[e[r],e[t]]}return e},exports.simpleID=()=>x()+m(),exports.sleep=e=>new Promise((t=>setTimeout(t,e))),exports.stringReverse=U,exports.toArray=e=>r(e)?e:i(e)?[e]:[],exports.toBool=e=>"true"===e||"1"===e,exports.type=t,exports.uniqueID=()=>f()+f()+f()+f(),exports.upperCamelCase=P,exports.uuidv4=()=>g()+"-"+m()+"-4"+x()+"-"+m()+"-"+(g()+m());
package/dist/index.d.ts CHANGED
@@ -1,16 +1,27 @@
1
1
  /*!
2
- * @andrewcaires/utils.js v0.2.23
2
+ * @andrewcaires/utils.js v0.2.25
3
3
  * JavaScript utility library for web and nodejs development
4
4
  * (c) 2024 Andrew Caires
5
5
  * @license: MIT
6
6
  */
7
- declare const chunkArray: <T>(array: T[], length: number) => T[][];
7
+ declare const chunkArray: <T>(array: Array<T>, length: number) => Array<Array<T>>;
8
+
8
9
  declare const rangeArray: (start: number, end: number, step?: number) => number[];
10
+
9
11
  declare const shuffleArray: (array: Array<any>) => any[];
12
+
10
13
  declare const toArray: (value: any) => Array<any>;
11
14
 
12
15
  declare const toBool: (value: string) => boolean;
13
16
 
17
+ declare const isArray: (test: any) => test is any[];
18
+
19
+ declare const isBoolean: (test: any) => test is boolean;
20
+
21
+ declare const isDef: (test: any) => test is any;
22
+
23
+ declare const isFloat: (test: any) => test is number;
24
+
14
25
  type TypeCallbackFunction = (...args: Array<any>) => any;
15
26
  type TypeArray<T> = Array<T>;
16
27
  type TypeArrayAny = TypeArray<any>;
@@ -29,6 +40,24 @@ type TypeCallbackArray<T> = TypeCallback<T, number, TypeArray<T>, any>;
29
40
  type TypeCallbackMap<T> = TypeCallback<T, number, TypeArray<T>, T>;
30
41
  type TypeCallbackObject<T> = TypeCallback<T, string, TypeObject<T>, any>;
31
42
 
43
+ declare const isFunction: (test: any) => test is TypeCallbackFunction;
44
+
45
+ declare const isInteger: (test: any) => test is number;
46
+
47
+ declare const isNull: (test: any) => test is null;
48
+
49
+ declare const isNumber: (test: any) => test is number;
50
+
51
+ declare const isObject: (test: any) => test is TypeObjectAny;
52
+
53
+ declare const isPlainObject: (test: any) => test is TypeObjectAny;
54
+
55
+ declare const isString: (test: any) => test is string;
56
+
57
+ declare const isUndefined: (test: any) => test is undefined;
58
+
59
+ declare const type: (test: any) => string;
60
+
32
61
  type CacheCallback = (key: any) => TypeObjectAny;
33
62
  declare const cache: () => CacheCallback;
34
63
 
@@ -42,6 +71,10 @@ declare const uuidv4: () => string;
42
71
 
43
72
  declare const dateFormat: (date: Date, format: string) => string;
44
73
 
74
+ declare const msToString: (ms: number) => string;
75
+
76
+ declare const parseMs: (str: string) => number;
77
+
45
78
  interface IDebounceCallbacks {
46
79
  cancel: TypeCallbackFunction;
47
80
  run: TypeCallbackFunction;
@@ -70,7 +103,7 @@ declare class EventEmitter {
70
103
  type EachCallback = TypeCallback<any, string | number, any, any>;
71
104
  type LoopCallback = (index: number, count: number) => any;
72
105
  declare const each: (object: any, callback: EachCallback, thisArg?: any) => any;
73
- declare const forEachIndex: <T>(array: T[], callback: TypeCallbackArray<T>, thisArg?: any) => T[];
106
+ declare const forEachIndex: <T>(array: Array<T>, callback: TypeCallbackArray<T>, thisArg?: any) => Array<T>;
74
107
  declare const forEachKey: <T>(object: TypeObject<T>, callback: TypeCallbackObject<T>, thisArg?: any) => TypeObject<T>;
75
108
  declare const forLoop: (count: number, callback: LoopCallback, thisArg?: any) => number;
76
109
  declare const map: <T>(object: TypeObject<T>, callback: TypeCallbackObject<T>, thisArg?: any) => TypeObject<T>;
@@ -87,47 +120,44 @@ declare const maskMoney: (mask: string, text: string, decimal: number) => string
87
120
  declare const maskTest: (mask: string, text: string) => boolean;
88
121
  declare const maskReverse: (mask: string, text: string) => string;
89
122
 
90
- declare const parseMs: (str: string) => number;
91
- declare const msToString: (ms: number) => string;
92
-
93
123
  declare const clamp: (value: number, min: number, max: number) => number;
124
+
94
125
  declare const lerp: (value1: number, value2: number, amount: number) => number;
95
126
 
127
+ declare const random: (min: number, max: number) => number;
128
+
96
129
  declare const allowed: (allowed: Array<string>, target: TypeObjectAny) => TypeObjectAny;
97
130
  declare const denied: (denied: Array<string>, target: TypeObjectAny) => TypeObjectAny;
98
131
  declare const merge: (target: TypeObjectAny, ...sources: Array<TypeObjectAny>) => TypeObjectAny;
99
132
 
100
133
  type ForEachCallback<T> = TypeCallback<T, number, Array<T>, Promise<void>>;
101
- declare const forEachAsync: <T>(array: T[], callback: ForEachCallback<T>, thisArg?: any) => Promise<void>;
102
- declare const forEachSeries: <T>(array: T[], callback: ForEachCallback<T>, thisArg?: any) => Promise<void>;
134
+ declare const forEachAsync: <T>(array: Array<T>, callback: ForEachCallback<T>, thisArg?: any) => Promise<void>;
135
+ declare const forEachSeries: <T>(array: Array<T>, callback: ForEachCallback<T>, thisArg?: any) => Promise<void>;
103
136
  declare const sleep: (ms: number) => Promise<void>;
104
137
 
105
138
  declare const parseSize: (size: number | string) => string;
106
139
 
140
+ declare const camelCase: (str: string) => string;
141
+
107
142
  declare const cutText: (str: string, length: number) => string;
108
- declare const decodeHTML: (str: string) => string;
143
+
144
+ declare const decodeHTML: (value: string) => string;
145
+
109
146
  declare const encodeHTML: (str: string) => string;
147
+
110
148
  declare const isCharacter: (str: string) => boolean;
149
+
111
150
  declare const isDigit: (str: string) => boolean;
151
+
112
152
  declare const isLetter: (str: string) => boolean;
153
+
113
154
  declare const isSymbol: (str: string) => boolean;
155
+
114
156
  declare const lowerCamelCase: (str: string) => string;
115
- declare const camelCase: (str: string) => string;
116
- declare const upperCamelCase: (str: string) => string;
157
+
117
158
  declare const stringReverse: (str: string) => string;
118
159
 
119
- declare const isArray: (test: any) => test is any[];
120
- declare const isBoolean: (test: any) => test is boolean;
121
- declare const isDef: (test: any) => test is any;
122
- declare const isFunction: (test: any) => test is TypeCallbackFunction;
123
- declare const isNumber: (test: any) => test is number;
124
- declare const isObject: (test: any) => test is TypeObjectAny;
125
- declare const isString: (test: any) => test is string;
126
- declare const isFloat: (test: any) => test is number;
127
- declare const isInteger: (test: any) => test is number;
128
- declare const isNull: (test: any) => test is null;
129
- declare const isUndefined: (test: any) => test is undefined;
130
- declare const type: (test: any) => string;
160
+ declare const upperCamelCase: (str: string) => string;
131
161
 
132
162
  interface IValidationResult {
133
163
  break?: boolean;
@@ -136,6 +166,7 @@ interface IValidationResult {
136
166
  }
137
167
  type ValidationCallback = (value: any) => IValidationResult;
138
168
  type ValidationCallbackAsync = (value: any) => Promise<IValidationResult>;
169
+
139
170
  declare class ValidationBase<T = any> {
140
171
  name: string;
141
172
  private _value;
@@ -157,6 +188,7 @@ declare class ValidationBase<T = any> {
157
188
  validate(value?: any): IValidationResult;
158
189
  validateAsync(value?: any): Promise<IValidationResult>;
159
190
  }
191
+
160
192
  declare class ValidationArray extends ValidationBase<Array<any>> {
161
193
  private _length;
162
194
  private _max;
@@ -170,11 +202,13 @@ declare class ValidationArray extends ValidationBase<Array<any>> {
170
202
  max(value: number): this;
171
203
  min(value: number): this;
172
204
  }
205
+
173
206
  declare class ValidationBoolean extends ValidationBase<boolean> {
174
207
  protected _type: string;
175
208
  constructor();
176
209
  parse(): this;
177
210
  }
211
+
178
212
  declare class ValidationNumber extends ValidationBase<number> {
179
213
  private _max;
180
214
  private _min;
@@ -185,6 +219,7 @@ declare class ValidationNumber extends ValidationBase<number> {
185
219
  min(value: number): this;
186
220
  parse(): this;
187
221
  }
222
+
188
223
  declare class ValidationObject extends ValidationBase<TypeObjectAny> {
189
224
  private _keys;
190
225
  protected _type: string;
@@ -192,6 +227,7 @@ declare class ValidationObject extends ValidationBase<TypeObjectAny> {
192
227
  keys(value?: TypeObject<ValidationBase>): this;
193
228
  parse(): this;
194
229
  }
230
+
195
231
  declare class ValidationString extends ValidationBase<string> {
196
232
  private _length;
197
233
  private _max;
@@ -213,6 +249,7 @@ declare class ValidationString extends ValidationBase<string> {
213
249
  upperCase(): this;
214
250
  upperCamelCase(): this;
215
251
  }
252
+
216
253
  declare class Validation {
217
254
  static array(value?: ValidationBase): ValidationArray;
218
255
  static boolean(): ValidationBoolean;
@@ -225,4 +262,4 @@ declare class Validation {
225
262
  static validateAsync(value?: any, ...rules: Array<ValidationBase>): Promise<IValidationResult>;
226
263
  }
227
264
 
228
- export { type CacheCallback, type EachCallback, type EventCallback, EventEmitter, type EventList, type ForEachCallback, type IDebounceCallbacks, type IEventDisposable, type IHash, type ILoopCallbacks, type IValidationResult, type LoopCallback, type TypeArray, type TypeArrayAny, type TypeArrayFunction, type TypeArrayNumber, type TypeArrayString, type TypeCallback, type TypeCallbackArray, type TypeCallbackFunction, type TypeCallbackMap, type TypeCallbackObject, type TypeObject, type TypeObjectAny, type TypeObjectFunction, type TypeObjectNumber, type TypeObjectString, Validation, ValidationBase, type ValidationCallback, type ValidationCallbackAsync, allowed, cache, camelCase, chunkArray, clamp, cutText, dateFormat, debounce, decodeHTML, denied, each, encodeHTML, forEachAsync, forEachIndex, forEachKey, forEachSeries, forLoop, hash, hexToRgb, isArray, isBoolean, isCharacter, isDef, isDigit, isFloat, isFunction, isInteger, isLetter, isNull, isNumber, isObject, isString, isSymbol, isUndefined, lerp, loop, lowerCamelCase, map, mask, maskMoney, maskReverse, maskTest, merge, msToString, noop, parseMs, parseSize, rangeArray, rgbToHex, shadeColor, shuffleArray, simpleID, sleep, stringReverse, toArray, toBool, type, uniqueID, upperCamelCase, uuidv4 };
265
+ export { type CacheCallback, type EachCallback, type EventCallback, EventEmitter, type EventList, type ForEachCallback, type IDebounceCallbacks, type IEventDisposable, type IHash, type ILoopCallbacks, type IValidationResult, type LoopCallback, type TypeArray, type TypeArrayAny, type TypeArrayFunction, type TypeArrayNumber, type TypeArrayString, type TypeCallback, type TypeCallbackArray, type TypeCallbackFunction, type TypeCallbackMap, type TypeCallbackObject, type TypeObject, type TypeObjectAny, type TypeObjectFunction, type TypeObjectNumber, type TypeObjectString, Validation, type ValidationCallback, type ValidationCallbackAsync, allowed, cache, camelCase, chunkArray, clamp, cutText, dateFormat, debounce, decodeHTML, denied, each, encodeHTML, forEachAsync, forEachIndex, forEachKey, forEachSeries, forLoop, hash, hexToRgb, isArray, isBoolean, isCharacter, isDef, isDigit, isFloat, isFunction, isInteger, isLetter, isNull, isNumber, isObject, isPlainObject, isString, isSymbol, isUndefined, lerp, loop, lowerCamelCase, map, mask, maskMoney, maskReverse, maskTest, merge, msToString, noop, parseMs, parseSize, random, rangeArray, rgbToHex, shadeColor, shuffleArray, simpleID, sleep, stringReverse, toArray, toBool, type, uniqueID, upperCamelCase, uuidv4 };
package/dist/index.esm.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /*!
2
- * @andrewcaires/utils.js v0.2.23
2
+ * @andrewcaires/utils.js v0.2.25
3
3
  * JavaScript utility library for web and nodejs development
4
4
  * (c) 2024 Andrew Caires
5
5
  * @license: MIT
6
6
  */
7
- const t={},e=t=>"array"==v(t),r=t=>"boolean"==v(t),s=t=>"null"!=v(t),i=t=>"function"==v(t),n=t=>"number"==v(t),a=t=>"object"==v(t),h=t=>"string"==v(t),u=t=>n(t)&&!!(t%1),l=t=>n(t)&&!(t%1),o=t=>null===t,c=t=>void 0===t,v=e=>null==e?"null":t[t.toString.call(e)]||"object";["Array","Boolean","Function","Number","Object","String"].forEach((e=>t["[object "+e+"]"]=e.toLowerCase()));const p=(t,e)=>{const r=[];for(let s=0;s<t.length;s+=e)r.push(t.slice(s,s+e));return r},d=(t,e,r=1)=>Array.from({length:(e-t)/r+1},((e,s)=>t+s*r)),m=t=>{for(let e=t.length-1;e>0;e--){const r=Math.floor(Math.random()*(e+1));[t[e],t[r]]=[t[r],t[e]]}return t},f=t=>e(t)?t:s(t)?[t]:[],g=t=>"true"===t||"1"===t,y=()=>{const t=[],e=[];return r=>{let s=t.indexOf(r);return-1==s&&(t.push(r),e.push({}),s=e.length-1),e[s]}},_=(t,e,r)=>Math.max(e,Math.min(r,t)),x=(t,e,r)=>t+(e-t)*_(r,0,1),b=t=>("0"+t).slice(-2),w=t=>parseInt(t,16)||0,k=(t,e)=>{return(r=w(t)+e,_(r,0,255)).toString(16);var r},S=t=>{var e;return(null===(e=t.replace(/^#/,"").match(/.{1,2}/g))||void 0===e?void 0:e.map((t=>w(t))))||[]},j=(t,e,r)=>"#"+b(t.toString(16))+b(e.toString(16))+b(r.toString(16)),O=(t,e)=>"#"+t.replace(/^#/,"").replace(/../g,(t=>b(k(t,e)))),C=t=>Math.random().toString(16).slice(t),A=()=>C(-3),I=()=>C(-4),M=()=>I()+I(),E=()=>M()+M(),F=()=>A()+I(),L=()=>E()+E()+E()+E(),N=()=>M()+"-"+I()+"-4"+A()+"-"+I()+"-"+(M()+I()),T=t=>("0"+t.toString()).slice(-2),U={"%y":t=>T(t.getFullYear()),"%Y":t=>t.getFullYear().toString(),"%m":t=>T(t.getMonth()+1),"%d":t=>T(t.getDate()),"%H":t=>T(t.getHours()),"%M":t=>T(t.getMinutes()),"%S":t=>T(t.getSeconds())},q=(t,e)=>e.replace(/%[yYmdHMS]/g,(e=>U[e]?U[e](t):e.slice(1)));function Y(t,e,r,s){return new(r||(r=Promise))((function(i,n){function a(t){try{u(s.next(t))}catch(t){n(t)}}function h(t){try{u(s.throw(t))}catch(t){n(t)}}function u(t){var e;t.done?i(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(a,h)}u((s=s.apply(t,e||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;const $=(t,e)=>{let r;const s=()=>{r&&clearTimeout(r)};return{cancel:s,run(...i){s(),r=setTimeout((()=>t(...i)),e)}}},H=(t,e)=>{let r=!1;const s=()=>Y(void 0,void 0,void 0,(function*(){r&&(yield t(),setTimeout(s,e))}));return{start(){r||(r=!0,s())},stop(){r=!1}}};class P{constructor(){this.events=new Map}on(t,e){const r=this.events.get(t);return r?r.push(e):this.events.set(t,[e]),{dispose:()=>this.off(t,e)}}once(t,e){const r=s=>{e(s),this.off(t,r)};return this.on(t,r),{dispose:()=>this.off(t,r)}}off(t,e){const r=this.events.get(t);if(e){if(r){const t=r.indexOf(e);t>=0&&r.splice(t,1)}}else this.events.set(t,[])}emit(t,e){const r=this.events.get(t);r&&r.forEach((t=>t(e)))}}const D=(t,r,s)=>e(t)?J(t,r,s):a(t)?W(t,r,s):null,J=(t,e,r)=>{for(let s=0;s<t.length&&!1!==e.call(r,t[s],s,t);s++);return t},W=(t,e,r)=>{let s="";const i=Object.keys(t);for(let n=0;n<i.length&&(s=i[n],!1!==e.call(r,t[s],s,t));n++);return t},Z=(t,e,r)=>{for(let s=1;s<=t&&!1!==e.call(r,s,t);s++);return t},z=(t,e,r)=>{let s="";const i=Object.keys(t);for(let n=0;n<i.length;n++)s=i[n],t[s]=e.call(r,t[s],s,t);return t},B=()=>{},G="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",K=(t,e,r)=>{let s="";for(let i=0;i<t.length;i++){const n=G.indexOf(t[i]),a=G.indexOf(e[i%e.length]);s+=-1===n||-1===a?t[i]:G[(r?n-a+62:n+a)%62]}return s},Q=t=>(t=K(G,t,!1),{generate:e=>K(e,t,!1),reverse:e=>K(e,t,!0)}),R=(t,e)=>{if(t.length>e){const r=t.substring(0,e).split(" ");return r.pop(),r.join(" ")+"..."}return t},V=t=>t.replace(/&#(\d+);/g,((t,e)=>String.fromCharCode(e))),X=t=>t.replace(/[\u00A0-\u9999<>\\&]/g,(t=>"&#"+t.charCodeAt(0)+";")),tt=(t,e)=>e(t.toLowerCase().replace(/\W+/g," ")).replace(/\s/g,""),et=t=>/^[\w]$/.test(t),rt=t=>/^[\d]$/.test(t),st=t=>/^[A-Za-z]$/.test(t),it=t=>/^[^\w]$/.test(t),nt=t=>tt(t,(t=>t.replace(/\s(\w)/g,(t=>t.toUpperCase())))),at=nt,ht=t=>tt(t,(t=>t.replace(/(\w)(\w*)/g,((t,e,r)=>e.toUpperCase()+r)))),ut=t=>t.split("").reverse().join(""),lt=t=>(t.maskIndex--,""),ot={"#":({value:t})=>t,0:t=>rt(t.value)?t.value:lt(t),9:t=>rt(t.value)?t.value:lt(t),A:t=>st(t.value)?t.value:lt(t),Z:t=>st(t.value)?t.value:lt(t),L:t=>st(t.value)?t.value.toLowerCase():lt(t),U:t=>st(t.value)?t.value.toUpperCase():lt(t),S:t=>it(t.value)?t.value:lt(t)},ct=t=>{t.maskIndex++,t.textIndex++;const{mask:e,maskIndex:r,text:s,textIndex:i}=t;t.key=e[r],t.value=s[i];const{key:n,value:a}=t;return c(n)||c(a)?"":(t=>ot[t.key]?ot[t.key](t):(t.key!=t.value&&t.textIndex--,t.key))(t)+ct(t)},vt=(t,e)=>ct({mask:t,maskIndex:-1,text:e,textIndex:-1,key:"",value:""}),pt=(t,e,r)=>(r++,e=parseInt((e||"0").replace(/\W/g,"")).toString(),ft(t,e.length<r?("0".repeat(r)+e).slice(-1*r):e)),dt=vt,mt=(t,e)=>t.length==dt(t,e).length,ft=(t,e)=>ut(dt(ut(t),ut(e))),gt=36e5,yt=24*gt,_t={ms:1,s:1e3,m:6e4,h:gt,d:yt,w:6048e5,y:315576e5},xt=t=>{const e=/(-?(?:\d+)?\.?\d+) *(ms|s|m|h|d|w|y)/gm;let r,s=0;for(;null!==(r=e.exec(t));)r.index===e.lastIndex&&e.lastIndex++,s+=parseFloat(r[1])*_t[r[2]]||0;return s},bt=["y","d","h","m","s","ms"],wt=t=>{const e=[];return bt.forEach((r=>{const s=_t[r],i=(t-t%s)/s;i&&(t-=i*s,e.push(i.toString()+r))})),e.join(" ")},kt=(t,e)=>t.reduce(((t,r)=>Object.assign(Object.assign({},t),{[r]:e[r]})),{}),St=(t,e)=>kt(Object.keys(e).filter((e=>-1==t.indexOf(e))),e),jt=(t,...e)=>{if(!e.length)return t;const r=e.shift();if(a(t)&&a(r))for(const e in r)a(r[e])?(t[e]||(t=Object.assign(Object.assign({},t),{[e]:{}})),t[e]=jt(t[e],r[e])):t=Object.assign(Object.assign({},t),{[e]:r[e]});return jt(t,...e)},Ot=(t,e,r)=>Y(void 0,void 0,void 0,(function*(){yield Promise.allSettled(t.map(((s,i)=>e.call(r,s,i,t)))).catch(B)})),Ct=(t,e,r)=>Y(void 0,void 0,void 0,(function*(){for(let s=0;s<t.length;s++)yield e.call(r,t[s],s,t).catch(B)})),At=t=>new Promise((e=>setTimeout(e,t))),It=t=>{if(n(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"};class Mt{constructor(){this.name="",this._error="",this._filter=[],this._type="any",this.rules=[],this.custom=[]}empty(t){return this._value=t,this.unshift((t=>{const e=s(t);return{break:!e,value:e?t:this._value}}))}error(t){return this._error=t,this}filter(...t){return this._filter=t,this.unshift((t=>{const e=-1==this._filter.indexOf(t);return{break:!e,value:e?t:void 0}}))}invalid(t){return{error:this._error?this._error:this.name?this.name+":"+t:t}}parse(){return this.unshift((t=>({value:t})))}push(t){return this.rules.push(t),this}required(){return this.unshift((t=>s(t)?{value:t}:this.invalid("["+this._type+"].required")))}test(t){return!h(this.validate(t).error)}testAsync(t){return Y(this,void 0,void 0,(function*(){return!h((yield this.validateAsync(t)).error)}))}unshift(t){return this.rules.unshift(t),this}validate(t){if(this.custom.length)return this.invalid("[async]");let e={value:t};for(let t=0;t<this.rules.length;t++){if(e=this.rules[t](e.value),e.error)return{error:e.error};if(e.break)return{value:e.value}}return{value:e.value}}validateAsync(t){return Y(this,void 0,void 0,(function*(){let e=this.validate(t);if(e.error)return{error:e.error};for(let t=0;t<this.custom.length;t++){if(e=yield this.custom[t](e.value),e.error)return{error:e.error};if(e.break)return{value:e.value}}return{value:e.value}}))}}class Et extends Mt{constructor(){super(),this._length=0,this._max=0,this._min=0,this._type="array",this.push((t=>{if(e(t)){if(this._items){this._items.name="";for(let e=0;e<t.length;e++){const{error:r,value:s}=this._items.validate(t[e]);if(r)return this.invalid("["+this._type+"]< "+r+"["+e+"] >");t[e]=s}}return{value:t}}return this.invalid("["+this._type+"]")}))}between(t,e){return this.min(t),this.max(e)}items(t){return this._items=t,this}length(t){return this._length=t,this.push((t=>t.length==this._length?{value:t}:this.invalid("["+this._type+"].length("+this._length+")")))}max(t){return this._max=t,this.push((t=>t.length<=this._max?{value:t}:this.invalid("["+this._type+"].max("+this._max+")")))}min(t){return this._min=t,this.push((t=>t.length>=this._min?{value:t}:this.invalid("["+this._type+"].min("+this._min+")")))}}class Ft extends Mt{constructor(){super(),this._type="boolean",this.push((t=>r(t)?{value:t}:this.invalid("["+this._type+"]")))}parse(){return this.unshift((t=>({value:s(t)?-1!=[1,"1",!0,"true"].indexOf(t):t})))}}class Lt extends Mt{constructor(){super(),this._max=0,this._min=0,this._type="number",this.push((t=>n(t)?{value:t}:this.invalid("["+this._type+"]")))}between(t,e){return this.min(t),this.max(e)}max(t){return this._max=t,this.push((t=>t<=this._max?{value:t}:this.invalid("["+this._type+"].max("+this._max+")")))}min(t){return this._min=t,this.push((t=>t>=this._min?{value:t}:this.invalid("["+this._type+"].min("+this._min+")")))}parse(){return this.unshift((t=>({value:s(t)?parseFloat(t):t})))}}class Nt extends Mt{constructor(){super(),this._keys={},this._type="object",this.push((t=>{if(a(t)){const e=[],r={};return Object.keys(this._keys).forEach((i=>{const n=this._keys[i];n.name=i;const{error:a,value:h}=n.validate(t[i]);a&&e.push(a),s(h)&&(r[i]=h)})),e.length?this.invalid("["+this._type+"]{ "+e.join(", ")+" }"):{value:r}}return this.invalid("["+this._type+"]")}))}keys(t){return this._keys=t||{},this}parse(){return this.unshift((t=>{if(!a(t))try{t=JSON.parse(t)}catch(t){return this.invalid("["+this._type+"]")}const e=Object.keys(this._keys);return{value:e.length?kt(e,t):t}}))}}class Tt extends Mt{constructor(){super(),this._length=0,this._max=0,this._min=0,this._type="string",this.push((t=>h(t)?{value:t}:this.invalid("["+this._type+"]")))}between(t,e){return this.min(t),this.max(e)}date(){return this.push((t=>isNaN(new Date(t).getTime())?this.invalid("["+this._type+"].date"):{value:t}))}email(){return this.push((t=>/^[\w-\\.]+@([\w-]+\.)+[\w-]{2,4}$/i.test(t)?{value:t}:this.invalid("["+this._type+"].email")))}length(t){return this._length=t,this.push((t=>t.length==this._length?{value:t}:this.invalid("["+this._type+"].length("+this._length+")")))}lowerCase(){return this.push((t=>({value:t.toLowerCase()})))}lowerCamelCase(){return this.push((t=>({value:nt(t)})))}max(t){return this._max=t,this.push((t=>t.length<=this._max?{value:t}:this.invalid("["+this._type+"].max("+this._max+")")))}mask(t){return this.push((e=>({value:vt(t,e)})))}min(t){return this._min=t,this.push((t=>t.length>=this._min?{value:t}:this.invalid("["+this._type+"].min("+this._min+")")))}parse(){return this.unshift((t=>({value:a(t)?JSON.stringify(t):s(t)?t.toString():t})))}required(){return this.push((t=>t.length?{value:t}:this.invalid("["+this._type+"].required")))}trim(){return this.push((t=>({value:t.trim()})))}upperCase(){return this.push((t=>({value:t.toUpperCase()})))}upperCamelCase(){return this.push((t=>({value:ht(t)})))}}class Ut{static array(t){return(new Et).items(t)}static boolean(){return new Ft}static number(){return new Lt}static object(t){return(new Nt).keys(t)}static string(){return new Tt}test(t,...e){return!h(Ut.validate(t,...e).error)}testAsync(t,...e){return Y(this,void 0,void 0,(function*(){return!h((yield Ut.validateAsync(t,...e)).error)}))}static validate(t,...e){let r={value:t};for(let t=0;t<e.length;t++)if(r=e[t].validate(r.value),r.error)return{error:r.error};return r}static validateAsync(t,...e){return Y(this,void 0,void 0,(function*(){let r={value:t};for(let t=0;t<e.length;t++)if(r=yield e[t].validateAsync(r.value),r.error)return{error:r.error};return r}))}}export{P as EventEmitter,Ut as Validation,Mt as ValidationBase,kt as allowed,y as cache,at as camelCase,p as chunkArray,_ as clamp,R as cutText,q as dateFormat,$ as debounce,V as decodeHTML,St as denied,D as each,X as encodeHTML,Ot as forEachAsync,J as forEachIndex,W as forEachKey,Ct as forEachSeries,Z as forLoop,Q as hash,S as hexToRgb,e as isArray,r as isBoolean,et as isCharacter,s as isDef,rt as isDigit,u as isFloat,i as isFunction,l as isInteger,st as isLetter,o as isNull,n as isNumber,a as isObject,h as isString,it as isSymbol,c as isUndefined,x as lerp,H as loop,nt as lowerCamelCase,z as map,vt as mask,pt as maskMoney,ft as maskReverse,mt as maskTest,jt as merge,wt as msToString,B as noop,xt as parseMs,It as parseSize,d as rangeArray,j as rgbToHex,O as shadeColor,m as shuffleArray,F as simpleID,At as sleep,ut as stringReverse,f as toArray,g as toBool,v as type,L as uniqueID,ht as upperCamelCase,N as uuidv4};
7
+ const t=(t,e)=>{const r=[];for(let s=0;s<t.length;s+=e)r.push(t.slice(s,s+e));return r},e=(t,e,r=1)=>Array.from({length:(e-t)/r+1},((e,s)=>t+s*r)),r=t=>{for(let e=t.length-1;e>0;e--){const r=Math.floor(Math.random()*(e+1));[t[e],t[r]]=[t[r],t[e]]}return t},s={},i=t=>null==t?"null":s[s.toString.call(t)]||"object";["Array","Boolean","Function","Number","Object","String"].forEach((t=>s["[object "+t+"]"]=t.toLowerCase()));const n=t=>"array"==i(t),a=t=>"boolean"==i(t),h=t=>"null"!=i(t),l=t=>"number"==i(t),u=t=>l(t)&&!!(t%1),o=t=>"function"==i(t),c=t=>l(t)&&!(t%1),v=t=>null===t,p=t=>"object"==i(t),d=t=>p(t)&&t.constructor===Object,m=t=>"string"==i(t),g=t=>void 0===t,f=t=>n(t)?t:h(t)?[t]:[],y=t=>"true"===t||"1"===t,_=()=>{const t=[],e=[];return r=>{let s=t.indexOf(r);return-1==s&&(t.push(r),e.push({}),s=e.length-1),e[s]}},x=(t,e,r)=>Math.max(e,Math.min(r,t)),b=(t,e,r)=>t+(e-t)*x(r,0,1),w=(t,e)=>Math.floor(Math.random()*(e-t+1)+t),k=t=>("0"+t).slice(-2),j=t=>parseInt(t,16)||0,O=(t,e)=>{return(r=j(t)+e,x(r,0,255)).toString(16);var r},S=t=>{var e;return(null===(e=t.replace(/^#/,"").match(/.{1,2}/g))||void 0===e?void 0:e.map((t=>j(t))))||[]},C=(t,e,r)=>"#"+k(t.toString(16))+k(e.toString(16))+k(r.toString(16)),A=(t,e)=>"#"+t.replace(/^#/,"").replace(/../g,(t=>k(O(t,e)))),I=t=>Math.random().toString(16).slice(t),M=()=>I(-3),q=()=>I(-4),E=()=>q()+q(),F=()=>E()+E(),L=()=>M()+q(),N=()=>F()+F()+F()+F(),T=()=>E()+"-"+q()+"-4"+M()+"-"+q()+"-"+(E()+q()),U=t=>("0"+t.toString()).slice(-2),Y={"%y":t=>U(t.getFullYear()),"%Y":t=>t.getFullYear().toString(),"%m":t=>U(t.getMonth()+1),"%d":t=>U(t.getDate()),"%H":t=>U(t.getHours()),"%M":t=>U(t.getMinutes()),"%S":t=>U(t.getSeconds())},$=(t,e)=>e.replace(/%[yYmdHMS]/g,(e=>Y[e]?Y[e](t):e.slice(1))),H=36e5,P=24*H,Z={ms:1,s:1e3,m:6e4,h:H,d:P,w:7*P,y:315576e5},z=["y","d","h","m","s","ms"],D=t=>{const e=[];return z.forEach((r=>{const s=Z[r],i=(t-t%s)/s;i&&(t-=i*s,e.push(i.toString()+r))})),e.join(" ")},J=t=>{const e=/(-?(?:\d+)?\.?\d+) *(ms|s|m|h|d|w|y)/gm;let r,s=0;for(;null!==(r=e.exec(t));)r.index===e.lastIndex&&e.lastIndex++,s+=parseFloat(r[1])*Z[r[2]]||0;return s};function W(t,e,r,s){return new(r||(r=Promise))((function(i,n){function a(t){try{l(s.next(t))}catch(t){n(t)}}function h(t){try{l(s.throw(t))}catch(t){n(t)}}function l(t){var e;t.done?i(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(a,h)}l((s=s.apply(t,e||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;const B=(t,e)=>{let r;const s=()=>{r&&clearTimeout(r)};return{cancel:s,run(...i){s(),r=setTimeout((()=>t(...i)),e)}}},G=(t,e)=>{let r=!1;const s=()=>W(void 0,void 0,void 0,(function*(){r&&(yield t(),setTimeout(s,e))}));return{start(){r||(r=!0,s())},stop(){r=!1}}};class K{constructor(){this.events=new Map}on(t,e){const r=this.events.get(t);return r?r.push(e):this.events.set(t,[e]),{dispose:()=>this.off(t,e)}}once(t,e){const r=s=>{e(s),this.off(t,r)};return this.on(t,r),{dispose:()=>this.off(t,r)}}off(t,e){const r=this.events.get(t);if(e){if(r){const t=r.indexOf(e);t>=0&&r.splice(t,1)}}else this.events.set(t,[])}emit(t,e){const r=this.events.get(t);r&&r.forEach((t=>t(e)))}}const Q=(t,e,r)=>n(t)?R(t,e,r):p(t)?V(t,e,r):null,R=(t,e,r)=>{for(let s=0;s<t.length&&!1!==e.call(r,t[s],s,t);s++);return t},V=(t,e,r)=>{let s="";const i=Object.keys(t);for(let n=0;n<i.length&&(s=i[n],!1!==e.call(r,t[s],s,t));n++);return t},X=(t,e,r)=>{for(let s=1;s<=t&&!1!==e.call(r,s,t);s++);return t},tt=(t,e,r)=>{let s="";const i=Object.keys(t);for(let n=0;n<i.length;n++)s=i[n],t[s]=e.call(r,t[s],s,t);return t},et=()=>{},rt="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",st=(t,e,r)=>{let s="";for(let i=0;i<t.length;i++){const n=rt.indexOf(t[i]),a=rt.indexOf(e[i%e.length]);s+=-1===n||-1===a?t[i]:rt[(r?n-a+62:n+a)%62]}return s},it=t=>(t=st(rt,t,!1),{generate:e=>st(e,t,!1),reverse:e=>st(e,t,!0)}),nt=(t,e)=>e(t.toLowerCase().replace(/\W+/g," ")).replace(/\s/g,""),at=t=>nt(t,(t=>t.replace(/\s(\w)/g,(t=>t.toUpperCase())))),ht=at,lt=(t,e)=>{if(t.length>e){const r=t.substring(0,e).split(" ");return r.pop(),r.join(" ")+"..."}return t},ut=/&(amp|apos|lt|gt|nbsp|quot);/g,ot={amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",quot:'"'},ct=t=>t.replace(ut,((t,e)=>ot[e])).replace(/&#(\d+);/gi,((t,e)=>String.fromCharCode(parseInt(e,10)))),vt=t=>t.replace(/[^0-9A-Za-z ]/g,(t=>"&#"+t.charCodeAt(0)+";")),pt=t=>/^[\w]$/.test(t),dt=t=>/^[\d]$/.test(t),mt=t=>/^[A-Za-z]$/.test(t),gt=t=>/^[^\w]$/.test(t),ft=t=>t.split("").reverse().join(""),yt=t=>nt(t,(t=>t.replace(/(\w)(\w*)/g,((t,e,r)=>e.toUpperCase()+r)))),_t=t=>(t.maskIndex--,""),xt={"#":({value:t})=>t,0:t=>dt(t.value)?t.value:_t(t),9:t=>dt(t.value)?t.value:_t(t),A:t=>mt(t.value)?t.value:_t(t),Z:t=>mt(t.value)?t.value:_t(t),L:t=>mt(t.value)?t.value.toLowerCase():_t(t),U:t=>mt(t.value)?t.value.toUpperCase():_t(t),S:t=>gt(t.value)?t.value:_t(t)},bt=t=>{t.maskIndex++,t.textIndex++;const{mask:e,maskIndex:r,text:s,textIndex:i}=t;t.key=e[r],t.value=s[i];const{key:n,value:a}=t;return g(n)||g(a)?"":(t=>xt[t.key]?xt[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:""}),kt=(t,e,r)=>(r++,e=parseInt((e||"0").replace(/\W/g,"")).toString(),St(t,e.length<r?("0".repeat(r)+e).slice(-1*r):e)),jt=wt,Ot=(t,e)=>t.length==jt(t,e).length,St=(t,e)=>ft(jt(ft(t),ft(e))),Ct=(t,e)=>t.reduce(((t,r)=>Object.assign(Object.assign({},t),{[r]:e[r]})),{}),At=(t,e)=>Ct(Object.keys(e).filter((e=>-1==t.indexOf(e))),e),It=(t,...e)=>{if(!e.length)return t;const r=e.shift();if(d(t)&&d(r))for(const e in r)d(r[e])?(t[e]||(t=Object.assign(Object.assign({},t),{[e]:{}})),t[e]=It(t[e],r[e])):t=Object.assign(Object.assign({},t),{[e]:r[e]});return It(t,...e)},Mt=(t,e,r)=>W(void 0,void 0,void 0,(function*(){yield Promise.allSettled(t.map(((s,i)=>e.call(r,s,i,t)))).catch(et)})),qt=(t,e,r)=>W(void 0,void 0,void 0,(function*(){for(let s=0;s<t.length;s++)yield e.call(r,t[s],s,t).catch(et)})),Et=t=>new Promise((e=>setTimeout(e,t))),Ft=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"};class Lt{constructor(){this.name="",this._error="",this._filter=[],this._type="any",this.rules=[],this.custom=[]}empty(t){return this._value=t,this.unshift((t=>{const e=h(t);return{break:!e,value:e?t:this._value}}))}error(t){return this._error=t,this}filter(...t){return this._filter=t,this.unshift((t=>{const e=-1==this._filter.indexOf(t);return{break:!e,value:e?t:void 0}}))}invalid(t){return{error:this._error?this._error:this.name?this.name+":"+t:t}}parse(){return this.unshift((t=>({value:t})))}push(t){return this.rules.push(t),this}required(){return this.unshift((t=>h(t)?{value:t}:this.invalid("["+this._type+"].required")))}test(t){return!m(this.validate(t).error)}testAsync(t){return W(this,void 0,void 0,(function*(){return!m((yield this.validateAsync(t)).error)}))}unshift(t){return this.rules.unshift(t),this}validate(t){if(this.custom.length)return this.invalid("[async]");let e={value:t};for(let t=0;t<this.rules.length;t++){if(e=this.rules[t](e.value),e.error)return{error:e.error};if(e.break)return{value:e.value}}return{value:e.value}}validateAsync(t){return W(this,void 0,void 0,(function*(){let e=this.validate(t);if(e.error)return{error:e.error};for(let t=0;t<this.custom.length;t++){if(e=yield this.custom[t](e.value),e.error)return{error:e.error};if(e.break)return{value:e.value}}return{value:e.value}}))}}class Nt extends Lt{constructor(){super(),this._length=0,this._max=0,this._min=0,this._type="array",this.push((t=>{if(n(t)){if(this._items){this._items.name="";for(let e=0;e<t.length;e++){const{error:r,value:s}=this._items.validate(t[e]);if(r)return this.invalid("["+this._type+"]< "+r+"["+e+"] >");t[e]=s}}return{value:t}}return this.invalid("["+this._type+"]")}))}between(t,e){return this.min(t),this.max(e)}items(t){return this._items=t,this}length(t){return this._length=t,this.push((t=>t.length==this._length?{value:t}:this.invalid("["+this._type+"].length("+this._length+")")))}max(t){return this._max=t,this.push((t=>t.length<=this._max?{value:t}:this.invalid("["+this._type+"].max("+this._max+")")))}min(t){return this._min=t,this.push((t=>t.length>=this._min?{value:t}:this.invalid("["+this._type+"].min("+this._min+")")))}}class Tt extends Lt{constructor(){super(),this._type="boolean",this.push((t=>a(t)?{value:t}:this.invalid("["+this._type+"]")))}parse(){return this.unshift((t=>({value:h(t)?-1!=[1,"1",!0,"true"].indexOf(t):t})))}}class Ut extends Lt{constructor(){super(),this._max=0,this._min=0,this._type="number",this.push((t=>l(t)?{value:t}:this.invalid("["+this._type+"]")))}between(t,e){return this.min(t),this.max(e)}max(t){return this._max=t,this.push((t=>t<=this._max?{value:t}:this.invalid("["+this._type+"].max("+this._max+")")))}min(t){return this._min=t,this.push((t=>t>=this._min?{value:t}:this.invalid("["+this._type+"].min("+this._min+")")))}parse(){return this.unshift((t=>({value:h(t)?parseFloat(t):t})))}}class Yt extends Lt{constructor(){super(),this._keys={},this._type="object",this.push((t=>{if(p(t)){const e=[],r={};return Object.keys(this._keys).forEach((s=>{const i=this._keys[s];i.name=s;const{error:n,value:a}=i.validate(t[s]);n&&e.push(n),h(a)&&(r[s]=a)})),e.length?this.invalid("["+this._type+"]{ "+e.join(", ")+" }"):{value:r}}return this.invalid("["+this._type+"]")}))}keys(t){return this._keys=t||{},this}parse(){return this.unshift((t=>{if(!p(t))try{t=JSON.parse(t)}catch(t){return this.invalid("["+this._type+"]")}const e=Object.keys(this._keys);return{value:e.length?Ct(e,t):t}}))}}class $t extends Lt{constructor(){super(),this._length=0,this._max=0,this._min=0,this._type="string",this.push((t=>m(t)?{value:t}:this.invalid("["+this._type+"]")))}between(t,e){return this.min(t),this.max(e)}date(){return this.push((t=>isNaN(new Date(t).getTime())?this.invalid("["+this._type+"].date"):{value:t}))}email(){return this.push((t=>/^[\w-\\.]+@([\w-]+\.)+[\w-]{2,4}$/i.test(t)?{value:t}:this.invalid("["+this._type+"].email")))}length(t){return this._length=t,this.push((t=>t.length==this._length?{value:t}:this.invalid("["+this._type+"].length("+this._length+")")))}lowerCase(){return this.push((t=>({value:t.toLowerCase()})))}lowerCamelCase(){return this.push((t=>({value:at(t)})))}max(t){return this._max=t,this.push((t=>t.length<=this._max?{value:t}:this.invalid("["+this._type+"].max("+this._max+")")))}mask(t){return this.push((e=>({value:wt(t,e)})))}min(t){return this._min=t,this.push((t=>t.length>=this._min?{value:t}:this.invalid("["+this._type+"].min("+this._min+")")))}parse(){return this.unshift((t=>({value:p(t)?JSON.stringify(t):h(t)?t.toString():t})))}required(){return this.push((t=>t.length?{value:t}:this.invalid("["+this._type+"].required")))}trim(){return this.push((t=>({value:t.trim()})))}upperCase(){return this.push((t=>({value:t.toUpperCase()})))}upperCamelCase(){return this.push((t=>({value:yt(t)})))}}class Ht{static array(t){return(new Nt).items(t)}static boolean(){return new Tt}static number(){return new Ut}static object(t){return(new Yt).keys(t)}static string(){return new $t}test(t,...e){return!m(Ht.validate(t,...e).error)}testAsync(t,...e){return W(this,void 0,void 0,(function*(){return!m((yield Ht.validateAsync(t,...e)).error)}))}static validate(t,...e){let r={value:t};for(let t=0;t<e.length;t++)if(r=e[t].validate(r.value),r.error)return{error:r.error};return r}static validateAsync(t,...e){return W(this,void 0,void 0,(function*(){let r={value:t};for(let t=0;t<e.length;t++)if(r=yield e[t].validateAsync(r.value),r.error)return{error:r.error};return r}))}}export{K as EventEmitter,Ht as Validation,Ct as allowed,_ as cache,ht as camelCase,t as chunkArray,x as clamp,lt as cutText,$ as dateFormat,B as debounce,ct as decodeHTML,At as denied,Q as each,vt as encodeHTML,Mt as forEachAsync,R as forEachIndex,V as forEachKey,qt as forEachSeries,X as forLoop,it as hash,S as hexToRgb,n as isArray,a as isBoolean,pt as isCharacter,h as isDef,dt as isDigit,u as isFloat,o as isFunction,c as isInteger,mt as isLetter,v as isNull,l as isNumber,p as isObject,d as isPlainObject,m as isString,gt as isSymbol,g as isUndefined,b as lerp,G as loop,at as lowerCamelCase,tt as map,wt as mask,kt as maskMoney,St as maskReverse,Ot as maskTest,It as merge,D as msToString,et as noop,J as parseMs,Ft as parseSize,w as random,e as rangeArray,C as rgbToHex,A as shadeColor,r as shuffleArray,L as simpleID,Et as sleep,ft as stringReverse,f as toArray,y as toBool,i as type,N as uniqueID,yt as upperCamelCase,T as uuidv4};
package/dist/index.min.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /*!
2
- * @andrewcaires/utils.js v0.2.23
2
+ * @andrewcaires/utils.js v0.2.25
3
3
  * JavaScript utility library for web and nodejs development
4
4
  * (c) 2024 Andrew Caires
5
5
  * @license: MIT
6
6
  */
7
- var UtilsJS=function(e){"use strict";const t={},r=e=>"array"==h(e),s=e=>"boolean"==h(e),i=e=>"null"!=h(e),n=e=>"number"==h(e),a=e=>"object"==h(e),l=e=>"string"==h(e),u=e=>void 0===e,h=e=>null==e?"null":t[t.toString.call(e)]||"object";["Array","Boolean","Function","Number","Object","String"].forEach((e=>t["[object "+e+"]"]=e.toLowerCase()));const o=(e,t,r)=>Math.max(t,Math.min(r,e)),c=e=>("0"+e).slice(-2),v=e=>parseInt(e,16)||0,p=(e,t)=>{return(r=v(e)+t,o(r,0,255)).toString(16);var r},d=e=>Math.random().toString(16).slice(e),m=()=>d(-3),f=()=>d(-4),g=()=>f()+f(),y=()=>g()+g(),_=e=>("0"+e.toString()).slice(-2),x={"%y":e=>_(e.getFullYear()),"%Y":e=>e.getFullYear().toString(),"%m":e=>_(e.getMonth()+1),"%d":e=>_(e.getDate()),"%H":e=>_(e.getHours()),"%M":e=>_(e.getMinutes()),"%S":e=>_(e.getSeconds())};function b(e,t,r,s){return new(r||(r=Promise))((function(i,n){function a(e){try{u(s.next(e))}catch(e){n(e)}}function l(e){try{u(s.throw(e))}catch(e){n(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(a,l)}u((s=s.apply(e,t||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;const k=(e,t,r)=>{for(let s=0;s<e.length&&!1!==t.call(r,e[s],s,e);s++);return e},w=(e,t,r)=>{let s="";const i=Object.keys(e);for(let n=0;n<i.length&&(s=i[n],!1!==t.call(r,e[s],s,e));n++);return e},S=()=>{},C="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",j=(e,t,r)=>{let s="";for(let i=0;i<e.length;i++){const n=C.indexOf(e[i]),a=C.indexOf(t[i%t.length]);s+=-1===n||-1===a?e[i]:C[(r?n-a+62:n+a)%62]}return s},O=(e,t)=>t(e.toLowerCase().replace(/\W+/g," ")).replace(/\s/g,""),A=e=>/^[\d]$/.test(e),I=e=>/^[A-Za-z]$/.test(e),M=e=>/^[^\w]$/.test(e),E=e=>O(e,(e=>e.replace(/\s(\w)/g,(e=>e.toUpperCase())))),T=E,F=e=>O(e,(e=>e.replace(/(\w)(\w*)/g,((e,t,r)=>t.toUpperCase()+r)))),L=e=>e.split("").reverse().join(""),N=e=>(e.maskIndex--,""),U={"#":({value:e})=>e,0:e=>A(e.value)?e.value:N(e),9:e=>A(e.value)?e.value:N(e),A:e=>I(e.value)?e.value:N(e),Z:e=>I(e.value)?e.value:N(e),L:e=>I(e.value)?e.value.toLowerCase():N(e),U:e=>I(e.value)?e.value.toUpperCase():N(e),S:e=>M(e.value)?e.value:N(e)},D=e=>{e.maskIndex++,e.textIndex++;const{mask:t,maskIndex:r,text:s,textIndex:i}=e;e.key=t[r],e.value=s[i];const{key:n,value:a}=e;return u(n)||u(a)?"":(e=>U[e.key]?U[e.key](e):(e.key!=e.value&&e.textIndex--,e.key))(e)+D(e)},H=(e,t)=>D({mask:e,maskIndex:-1,text:t,textIndex:-1,key:"",value:""}),q=H,B=(e,t)=>L(q(L(e),L(t))),Y=36e5,$=24*Y,J={ms:1,s:1e3,m:6e4,h:Y,d:$,w:6048e5,y:315576e5},P=["y","d","h","m","s","ms"],R=(e,t)=>e.reduce(((e,r)=>Object.assign(Object.assign({},e),{[r]:t[r]})),{}),z=(e,...t)=>{if(!t.length)return e;const r=t.shift();if(a(e)&&a(r))for(const t in r)a(r[t])?(e[t]||(e=Object.assign(Object.assign({},e),{[t]:{}})),e[t]=z(e[t],r[t])):e=Object.assign(Object.assign({},e),{[t]:r[t]});return z(e,...t)};class V{constructor(){this.name="",this._error="",this._filter=[],this._type="any",this.rules=[],this.custom=[]}empty(e){return this._value=e,this.unshift((e=>{const t=i(e);return{break:!t,value:t?e:this._value}}))}error(e){return this._error=e,this}filter(...e){return this._filter=e,this.unshift((e=>{const t=-1==this._filter.indexOf(e);return{break:!t,value:t?e:void 0}}))}invalid(e){return{error:this._error?this._error:this.name?this.name+":"+e:e}}parse(){return this.unshift((e=>({value:e})))}push(e){return this.rules.push(e),this}required(){return this.unshift((e=>i(e)?{value:e}:this.invalid("["+this._type+"].required")))}test(e){return!l(this.validate(e).error)}testAsync(e){return b(this,void 0,void 0,(function*(){return!l((yield this.validateAsync(e)).error)}))}unshift(e){return this.rules.unshift(e),this}validate(e){if(this.custom.length)return this.invalid("[async]");let t={value:e};for(let e=0;e<this.rules.length;e++){if(t=this.rules[e](t.value),t.error)return{error:t.error};if(t.break)return{value:t.value}}return{value:t.value}}validateAsync(e){return b(this,void 0,void 0,(function*(){let t=this.validate(e);if(t.error)return{error:t.error};for(let e=0;e<this.custom.length;e++){if(t=yield this.custom[e](t.value),t.error)return{error:t.error};if(t.break)return{value:t.value}}return{value:t.value}}))}}class W extends V{constructor(){super(),this._length=0,this._max=0,this._min=0,this._type="array",this.push((e=>{if(r(e)){if(this._items){this._items.name="";for(let t=0;t<e.length;t++){const{error:r,value:s}=this._items.validate(e[t]);if(r)return this.invalid("["+this._type+"]< "+r+"["+t+"] >");e[t]=s}}return{value:e}}return this.invalid("["+this._type+"]")}))}between(e,t){return this.min(e),this.max(t)}items(e){return this._items=e,this}length(e){return this._length=e,this.push((e=>e.length==this._length?{value:e}:this.invalid("["+this._type+"].length("+this._length+")")))}max(e){return this._max=e,this.push((e=>e.length<=this._max?{value:e}:this.invalid("["+this._type+"].max("+this._max+")")))}min(e){return this._min=e,this.push((e=>e.length>=this._min?{value:e}:this.invalid("["+this._type+"].min("+this._min+")")))}}class Z extends V{constructor(){super(),this._type="boolean",this.push((e=>s(e)?{value:e}:this.invalid("["+this._type+"]")))}parse(){return this.unshift((e=>({value:i(e)?-1!=[1,"1",!0,"true"].indexOf(e):e})))}}class K extends V{constructor(){super(),this._max=0,this._min=0,this._type="number",this.push((e=>n(e)?{value:e}:this.invalid("["+this._type+"]")))}between(e,t){return this.min(e),this.max(t)}max(e){return this._max=e,this.push((e=>e<=this._max?{value:e}:this.invalid("["+this._type+"].max("+this._max+")")))}min(e){return this._min=e,this.push((e=>e>=this._min?{value:e}:this.invalid("["+this._type+"].min("+this._min+")")))}parse(){return this.unshift((e=>({value:i(e)?parseFloat(e):e})))}}class G extends V{constructor(){super(),this._keys={},this._type="object",this.push((e=>{if(a(e)){const t=[],r={};return Object.keys(this._keys).forEach((s=>{const n=this._keys[s];n.name=s;const{error:a,value:l}=n.validate(e[s]);a&&t.push(a),i(l)&&(r[s]=l)})),t.length?this.invalid("["+this._type+"]{ "+t.join(", ")+" }"):{value:r}}return this.invalid("["+this._type+"]")}))}keys(e){return this._keys=e||{},this}parse(){return this.unshift((e=>{if(!a(e))try{e=JSON.parse(e)}catch(e){return this.invalid("["+this._type+"]")}const t=Object.keys(this._keys);return{value:t.length?R(t,e):e}}))}}class Q extends V{constructor(){super(),this._length=0,this._max=0,this._min=0,this._type="string",this.push((e=>l(e)?{value:e}:this.invalid("["+this._type+"]")))}between(e,t){return this.min(e),this.max(t)}date(){return this.push((e=>isNaN(new Date(e).getTime())?this.invalid("["+this._type+"].date"):{value:e}))}email(){return this.push((e=>/^[\w-\\.]+@([\w-]+\.)+[\w-]{2,4}$/i.test(e)?{value:e}:this.invalid("["+this._type+"].email")))}length(e){return this._length=e,this.push((e=>e.length==this._length?{value:e}:this.invalid("["+this._type+"].length("+this._length+")")))}lowerCase(){return this.push((e=>({value:e.toLowerCase()})))}lowerCamelCase(){return this.push((e=>({value:E(e)})))}max(e){return this._max=e,this.push((e=>e.length<=this._max?{value:e}:this.invalid("["+this._type+"].max("+this._max+")")))}mask(e){return this.push((t=>({value:H(e,t)})))}min(e){return this._min=e,this.push((e=>e.length>=this._min?{value:e}:this.invalid("["+this._type+"].min("+this._min+")")))}parse(){return this.unshift((e=>({value:a(e)?JSON.stringify(e):i(e)?e.toString():e})))}required(){return this.push((e=>e.length?{value:e}:this.invalid("["+this._type+"].required")))}trim(){return this.push((e=>({value:e.trim()})))}upperCase(){return this.push((e=>({value:e.toUpperCase()})))}upperCamelCase(){return this.push((e=>({value:F(e)})))}}class X{static array(e){return(new W).items(e)}static boolean(){return new Z}static number(){return new K}static object(e){return(new G).keys(e)}static string(){return new Q}test(e,...t){return!l(X.validate(e,...t).error)}testAsync(e,...t){return b(this,void 0,void 0,(function*(){return!l((yield X.validateAsync(e,...t)).error)}))}static validate(e,...t){let r={value:e};for(let e=0;e<t.length;e++)if(r=t[e].validate(r.value),r.error)return{error:r.error};return r}static validateAsync(e,...t){return b(this,void 0,void 0,(function*(){let r={value:e};for(let e=0;e<t.length;e++)if(r=yield t[e].validateAsync(r.value),r.error)return{error:r.error};return r}))}}return e.EventEmitter=class{constructor(){this.events=new Map}on(e,t){const r=this.events.get(e);return r?r.push(t):this.events.set(e,[t]),{dispose:()=>this.off(e,t)}}once(e,t){const r=s=>{t(s),this.off(e,r)};return this.on(e,r),{dispose:()=>this.off(e,r)}}off(e,t){const r=this.events.get(e);if(t){if(r){const e=r.indexOf(t);e>=0&&r.splice(e,1)}}else this.events.set(e,[])}emit(e,t){const r=this.events.get(e);r&&r.forEach((e=>e(t)))}},e.Validation=X,e.ValidationBase=V,e.allowed=R,e.cache=()=>{const e=[],t=[];return r=>{let s=e.indexOf(r);return-1==s&&(e.push(r),t.push({}),s=t.length-1),t[s]}},e.camelCase=T,e.chunkArray=(e,t)=>{const r=[];for(let s=0;s<e.length;s+=t)r.push(e.slice(s,s+t));return r},e.clamp=o,e.cutText=(e,t)=>{if(e.length>t){const r=e.substring(0,t).split(" ");return r.pop(),r.join(" ")+"..."}return e},e.dateFormat=(e,t)=>t.replace(/%[yYmdHMS]/g,(t=>x[t]?x[t](e):t.slice(1))),e.debounce=(e,t)=>{let r;const s=()=>{r&&clearTimeout(r)};return{cancel:s,run(...i){s(),r=setTimeout((()=>e(...i)),t)}}},e.decodeHTML=e=>e.replace(/&#(\d+);/g,((e,t)=>String.fromCharCode(t))),e.denied=(e,t)=>R(Object.keys(t).filter((t=>-1==e.indexOf(t))),t),e.each=(e,t,s)=>r(e)?k(e,t,s):a(e)?w(e,t,s):null,e.encodeHTML=e=>e.replace(/[\u00A0-\u9999<>\\&]/g,(e=>"&#"+e.charCodeAt(0)+";")),e.forEachAsync=(e,t,r)=>b(void 0,void 0,void 0,(function*(){yield Promise.allSettled(e.map(((s,i)=>t.call(r,s,i,e)))).catch(S)})),e.forEachIndex=k,e.forEachKey=w,e.forEachSeries=(e,t,r)=>b(void 0,void 0,void 0,(function*(){for(let s=0;s<e.length;s++)yield t.call(r,e[s],s,e).catch(S)})),e.forLoop=(e,t,r)=>{for(let s=1;s<=e&&!1!==t.call(r,s,e);s++);return e},e.hash=e=>(e=j(C,e,!1),{generate:t=>j(t,e,!1),reverse:t=>j(t,e,!0)}),e.hexToRgb=e=>{var t;return(null===(t=e.replace(/^#/,"").match(/.{1,2}/g))||void 0===t?void 0:t.map((e=>v(e))))||[]},e.isArray=r,e.isBoolean=s,e.isCharacter=e=>/^[\w]$/.test(e),e.isDef=i,e.isDigit=A,e.isFloat=e=>n(e)&&!!(e%1),e.isFunction=e=>"function"==h(e),e.isInteger=e=>n(e)&&!(e%1),e.isLetter=I,e.isNull=e=>null===e,e.isNumber=n,e.isObject=a,e.isString=l,e.isSymbol=M,e.isUndefined=u,e.lerp=(e,t,r)=>e+(t-e)*o(r,0,1),e.loop=(e,t)=>{let r=!1;const s=()=>b(void 0,void 0,void 0,(function*(){r&&(yield e(),setTimeout(s,t))}));return{start(){r||(r=!0,s())},stop(){r=!1}}},e.lowerCamelCase=E,e.map=(e,t,r)=>{let s="";const i=Object.keys(e);for(let n=0;n<i.length;n++)s=i[n],e[s]=t.call(r,e[s],s,e);return e},e.mask=H,e.maskMoney=(e,t,r)=>(r++,t=parseInt((t||"0").replace(/\W/g,"")).toString(),B(e,t.length<r?("0".repeat(r)+t).slice(-1*r):t)),e.maskReverse=B,e.maskTest=(e,t)=>e.length==q(e,t).length,e.merge=z,e.msToString=e=>{const t=[];return P.forEach((r=>{const s=J[r],i=(e-e%s)/s;i&&(e-=i*s,t.push(i.toString()+r))})),t.join(" ")},e.noop=S,e.parseMs=e=>{const t=/(-?(?:\d+)?\.?\d+) *(ms|s|m|h|d|w|y)/gm;let r,s=0;for(;null!==(r=t.exec(e));)r.index===t.lastIndex&&t.lastIndex++,s+=parseFloat(r[1])*J[r[2]]||0;return s},e.parseSize=e=>{if(n(e))return e+"px";const t=(e=>/(-?(?:\d+)?\.?\d+) *(px|%|cm|mm|in|pt|pc|en|ex|ch|rem|vw|vh|vmin|vmax)*/g.exec(e))(e);return t?parseFloat(t[1])+(t[2]||"px"):"0px"},e.rangeArray=(e,t,r=1)=>Array.from({length:(t-e)/r+1},((t,s)=>e+s*r)),e.rgbToHex=(e,t,r)=>"#"+c(e.toString(16))+c(t.toString(16))+c(r.toString(16)),e.shadeColor=(e,t)=>"#"+e.replace(/^#/,"").replace(/../g,(e=>c(p(e,t)))),e.shuffleArray=e=>{for(let t=e.length-1;t>0;t--){const r=Math.floor(Math.random()*(t+1));[e[t],e[r]]=[e[r],e[t]]}return e},e.simpleID=()=>m()+f(),e.sleep=e=>new Promise((t=>setTimeout(t,e))),e.stringReverse=L,e.toArray=e=>r(e)?e:i(e)?[e]:[],e.toBool=e=>"true"===e||"1"===e,e.type=h,e.uniqueID=()=>y()+y()+y()+y(),e.upperCamelCase=F,e.uuidv4=()=>g()+"-"+f()+"-4"+m()+"-"+f()+"-"+(g()+f()),e}({});
7
+ var UtilsJS=function(e){"use strict";const t={},r=e=>null==e?"null":t[t.toString.call(e)]||"object";["Array","Boolean","Function","Number","Object","String"].forEach((e=>t["[object "+e+"]"]=e.toLowerCase()));const s=e=>"array"==r(e),i=e=>"boolean"==r(e),n=e=>"null"!=r(e),a=e=>"number"==r(e),l=e=>"object"==r(e),h=e=>l(e)&&e.constructor===Object,u=e=>"string"==r(e),o=e=>void 0===e,c=(e,t,r)=>Math.max(t,Math.min(r,e)),v=e=>("0"+e).slice(-2),p=e=>parseInt(e,16)||0,d=(e,t)=>{return(r=p(e)+t,c(r,0,255)).toString(16);var r},m=e=>Math.random().toString(16).slice(e),g=()=>m(-3),f=()=>m(-4),y=()=>f()+f(),_=()=>y()+y(),x=e=>("0"+e.toString()).slice(-2),b={"%y":e=>x(e.getFullYear()),"%Y":e=>e.getFullYear().toString(),"%m":e=>x(e.getMonth()+1),"%d":e=>x(e.getDate()),"%H":e=>x(e.getHours()),"%M":e=>x(e.getMinutes()),"%S":e=>x(e.getSeconds())},k=36e5,w=24*k,S={ms:1,s:1e3,m:6e4,h:k,d:w,w:7*w,y:315576e5},j=["y","d","h","m","s","ms"];function C(e,t,r,s){return new(r||(r=Promise))((function(i,n){function a(e){try{h(s.next(e))}catch(e){n(e)}}function l(e){try{h(s.throw(e))}catch(e){n(e)}}function h(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(a,l)}h((s=s.apply(e,t||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;const O=(e,t,r)=>{for(let s=0;s<e.length&&!1!==t.call(r,e[s],s,e);s++);return e},A=(e,t,r)=>{let s="";const i=Object.keys(e);for(let n=0;n<i.length&&(s=i[n],!1!==t.call(r,e[s],s,e));n++);return e},I=()=>{},M="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",E=(e,t,r)=>{let s="";for(let i=0;i<e.length;i++){const n=M.indexOf(e[i]),a=M.indexOf(t[i%t.length]);s+=-1===n||-1===a?e[i]:M[(r?n-a+62:n+a)%62]}return s},T=(e,t)=>t(e.toLowerCase().replace(/\W+/g," ")).replace(/\s/g,""),F=e=>T(e,(e=>e.replace(/\s(\w)/g,(e=>e.toUpperCase())))),L=F,q=/&(amp|apos|lt|gt|nbsp|quot);/g,N={amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",quot:'"'},U=e=>/^[\d]$/.test(e),D=e=>/^[A-Za-z]$/.test(e),H=e=>/^[^\w]$/.test(e),P=e=>e.split("").reverse().join(""),Y=e=>T(e,(e=>e.replace(/(\w)(\w*)/g,((e,t,r)=>t.toUpperCase()+r)))),$=e=>(e.maskIndex--,""),z={"#":({value:e})=>e,0:e=>U(e.value)?e.value:$(e),9:e=>U(e.value)?e.value:$(e),A:e=>D(e.value)?e.value:$(e),Z:e=>D(e.value)?e.value:$(e),L:e=>D(e.value)?e.value.toLowerCase():$(e),U:e=>D(e.value)?e.value.toUpperCase():$(e),S:e=>H(e.value)?e.value:$(e)},B=e=>{e.maskIndex++,e.textIndex++;const{mask:t,maskIndex:r,text:s,textIndex:i}=e;e.key=t[r],e.value=s[i];const{key:n,value:a}=e;return o(n)||o(a)?"":(e=>z[e.key]?z[e.key](e):(e.key!=e.value&&e.textIndex--,e.key))(e)+B(e)},J=(e,t)=>B({mask:e,maskIndex:-1,text:t,textIndex:-1,key:"",value:""}),R=J,Z=(e,t)=>P(R(P(e),P(t))),W=(e,t)=>e.reduce(((e,r)=>Object.assign(Object.assign({},e),{[r]:t[r]})),{}),K=(e,...t)=>{if(!t.length)return e;const r=t.shift();if(h(e)&&h(r))for(const t in r)h(r[t])?(e[t]||(e=Object.assign(Object.assign({},e),{[t]:{}})),e[t]=K(e[t],r[t])):e=Object.assign(Object.assign({},e),{[t]:r[t]});return K(e,...t)};class V{constructor(){this.name="",this._error="",this._filter=[],this._type="any",this.rules=[],this.custom=[]}empty(e){return this._value=e,this.unshift((e=>{const t=n(e);return{break:!t,value:t?e:this._value}}))}error(e){return this._error=e,this}filter(...e){return this._filter=e,this.unshift((e=>{const t=-1==this._filter.indexOf(e);return{break:!t,value:t?e:void 0}}))}invalid(e){return{error:this._error?this._error:this.name?this.name+":"+e:e}}parse(){return this.unshift((e=>({value:e})))}push(e){return this.rules.push(e),this}required(){return this.unshift((e=>n(e)?{value:e}:this.invalid("["+this._type+"].required")))}test(e){return!u(this.validate(e).error)}testAsync(e){return C(this,void 0,void 0,(function*(){return!u((yield this.validateAsync(e)).error)}))}unshift(e){return this.rules.unshift(e),this}validate(e){if(this.custom.length)return this.invalid("[async]");let t={value:e};for(let e=0;e<this.rules.length;e++){if(t=this.rules[e](t.value),t.error)return{error:t.error};if(t.break)return{value:t.value}}return{value:t.value}}validateAsync(e){return C(this,void 0,void 0,(function*(){let t=this.validate(e);if(t.error)return{error:t.error};for(let e=0;e<this.custom.length;e++){if(t=yield this.custom[e](t.value),t.error)return{error:t.error};if(t.break)return{value:t.value}}return{value:t.value}}))}}class G extends V{constructor(){super(),this._length=0,this._max=0,this._min=0,this._type="array",this.push((e=>{if(s(e)){if(this._items){this._items.name="";for(let t=0;t<e.length;t++){const{error:r,value:s}=this._items.validate(e[t]);if(r)return this.invalid("["+this._type+"]< "+r+"["+t+"] >");e[t]=s}}return{value:e}}return this.invalid("["+this._type+"]")}))}between(e,t){return this.min(e),this.max(t)}items(e){return this._items=e,this}length(e){return this._length=e,this.push((e=>e.length==this._length?{value:e}:this.invalid("["+this._type+"].length("+this._length+")")))}max(e){return this._max=e,this.push((e=>e.length<=this._max?{value:e}:this.invalid("["+this._type+"].max("+this._max+")")))}min(e){return this._min=e,this.push((e=>e.length>=this._min?{value:e}:this.invalid("["+this._type+"].min("+this._min+")")))}}class Q extends V{constructor(){super(),this._type="boolean",this.push((e=>i(e)?{value:e}:this.invalid("["+this._type+"]")))}parse(){return this.unshift((e=>({value:n(e)?-1!=[1,"1",!0,"true"].indexOf(e):e})))}}class X extends V{constructor(){super(),this._max=0,this._min=0,this._type="number",this.push((e=>a(e)?{value:e}:this.invalid("["+this._type+"]")))}between(e,t){return this.min(e),this.max(t)}max(e){return this._max=e,this.push((e=>e<=this._max?{value:e}:this.invalid("["+this._type+"].max("+this._max+")")))}min(e){return this._min=e,this.push((e=>e>=this._min?{value:e}:this.invalid("["+this._type+"].min("+this._min+")")))}parse(){return this.unshift((e=>({value:n(e)?parseFloat(e):e})))}}class ee extends V{constructor(){super(),this._keys={},this._type="object",this.push((e=>{if(l(e)){const t=[],r={};return Object.keys(this._keys).forEach((s=>{const i=this._keys[s];i.name=s;const{error:a,value:l}=i.validate(e[s]);a&&t.push(a),n(l)&&(r[s]=l)})),t.length?this.invalid("["+this._type+"]{ "+t.join(", ")+" }"):{value:r}}return this.invalid("["+this._type+"]")}))}keys(e){return this._keys=e||{},this}parse(){return this.unshift((e=>{if(!l(e))try{e=JSON.parse(e)}catch(e){return this.invalid("["+this._type+"]")}const t=Object.keys(this._keys);return{value:t.length?W(t,e):e}}))}}class te extends V{constructor(){super(),this._length=0,this._max=0,this._min=0,this._type="string",this.push((e=>u(e)?{value:e}:this.invalid("["+this._type+"]")))}between(e,t){return this.min(e),this.max(t)}date(){return this.push((e=>isNaN(new Date(e).getTime())?this.invalid("["+this._type+"].date"):{value:e}))}email(){return this.push((e=>/^[\w-\\.]+@([\w-]+\.)+[\w-]{2,4}$/i.test(e)?{value:e}:this.invalid("["+this._type+"].email")))}length(e){return this._length=e,this.push((e=>e.length==this._length?{value:e}:this.invalid("["+this._type+"].length("+this._length+")")))}lowerCase(){return this.push((e=>({value:e.toLowerCase()})))}lowerCamelCase(){return this.push((e=>({value:F(e)})))}max(e){return this._max=e,this.push((e=>e.length<=this._max?{value:e}:this.invalid("["+this._type+"].max("+this._max+")")))}mask(e){return this.push((t=>({value:J(e,t)})))}min(e){return this._min=e,this.push((e=>e.length>=this._min?{value:e}:this.invalid("["+this._type+"].min("+this._min+")")))}parse(){return this.unshift((e=>({value:l(e)?JSON.stringify(e):n(e)?e.toString():e})))}required(){return this.push((e=>e.length?{value:e}:this.invalid("["+this._type+"].required")))}trim(){return this.push((e=>({value:e.trim()})))}upperCase(){return this.push((e=>({value:e.toUpperCase()})))}upperCamelCase(){return this.push((e=>({value:Y(e)})))}}class re{static array(e){return(new G).items(e)}static boolean(){return new Q}static number(){return new X}static object(e){return(new ee).keys(e)}static string(){return new te}test(e,...t){return!u(re.validate(e,...t).error)}testAsync(e,...t){return C(this,void 0,void 0,(function*(){return!u((yield re.validateAsync(e,...t)).error)}))}static validate(e,...t){let r={value:e};for(let e=0;e<t.length;e++)if(r=t[e].validate(r.value),r.error)return{error:r.error};return r}static validateAsync(e,...t){return C(this,void 0,void 0,(function*(){let r={value:e};for(let e=0;e<t.length;e++)if(r=yield t[e].validateAsync(r.value),r.error)return{error:r.error};return r}))}}return e.EventEmitter=class{constructor(){this.events=new Map}on(e,t){const r=this.events.get(e);return r?r.push(t):this.events.set(e,[t]),{dispose:()=>this.off(e,t)}}once(e,t){const r=s=>{t(s),this.off(e,r)};return this.on(e,r),{dispose:()=>this.off(e,r)}}off(e,t){const r=this.events.get(e);if(t){if(r){const e=r.indexOf(t);e>=0&&r.splice(e,1)}}else this.events.set(e,[])}emit(e,t){const r=this.events.get(e);r&&r.forEach((e=>e(t)))}},e.Validation=re,e.allowed=W,e.cache=()=>{const e=[],t=[];return r=>{let s=e.indexOf(r);return-1==s&&(e.push(r),t.push({}),s=t.length-1),t[s]}},e.camelCase=L,e.chunkArray=(e,t)=>{const r=[];for(let s=0;s<e.length;s+=t)r.push(e.slice(s,s+t));return r},e.clamp=c,e.cutText=(e,t)=>{if(e.length>t){const r=e.substring(0,t).split(" ");return r.pop(),r.join(" ")+"..."}return e},e.dateFormat=(e,t)=>t.replace(/%[yYmdHMS]/g,(t=>b[t]?b[t](e):t.slice(1))),e.debounce=(e,t)=>{let r;const s=()=>{r&&clearTimeout(r)};return{cancel:s,run(...i){s(),r=setTimeout((()=>e(...i)),t)}}},e.decodeHTML=e=>e.replace(q,((e,t)=>N[t])).replace(/&#(\d+);/gi,((e,t)=>String.fromCharCode(parseInt(t,10)))),e.denied=(e,t)=>W(Object.keys(t).filter((t=>-1==e.indexOf(t))),t),e.each=(e,t,r)=>s(e)?O(e,t,r):l(e)?A(e,t,r):null,e.encodeHTML=e=>e.replace(/[^0-9A-Za-z ]/g,(e=>"&#"+e.charCodeAt(0)+";")),e.forEachAsync=(e,t,r)=>C(void 0,void 0,void 0,(function*(){yield Promise.allSettled(e.map(((s,i)=>t.call(r,s,i,e)))).catch(I)})),e.forEachIndex=O,e.forEachKey=A,e.forEachSeries=(e,t,r)=>C(void 0,void 0,void 0,(function*(){for(let s=0;s<e.length;s++)yield t.call(r,e[s],s,e).catch(I)})),e.forLoop=(e,t,r)=>{for(let s=1;s<=e&&!1!==t.call(r,s,e);s++);return e},e.hash=e=>(e=E(M,e,!1),{generate:t=>E(t,e,!1),reverse:t=>E(t,e,!0)}),e.hexToRgb=e=>{var t;return(null===(t=e.replace(/^#/,"").match(/.{1,2}/g))||void 0===t?void 0:t.map((e=>p(e))))||[]},e.isArray=s,e.isBoolean=i,e.isCharacter=e=>/^[\w]$/.test(e),e.isDef=n,e.isDigit=U,e.isFloat=e=>a(e)&&!!(e%1),e.isFunction=e=>"function"==r(e),e.isInteger=e=>a(e)&&!(e%1),e.isLetter=D,e.isNull=e=>null===e,e.isNumber=a,e.isObject=l,e.isPlainObject=h,e.isString=u,e.isSymbol=H,e.isUndefined=o,e.lerp=(e,t,r)=>e+(t-e)*c(r,0,1),e.loop=(e,t)=>{let r=!1;const s=()=>C(void 0,void 0,void 0,(function*(){r&&(yield e(),setTimeout(s,t))}));return{start(){r||(r=!0,s())},stop(){r=!1}}},e.lowerCamelCase=F,e.map=(e,t,r)=>{let s="";const i=Object.keys(e);for(let n=0;n<i.length;n++)s=i[n],e[s]=t.call(r,e[s],s,e);return e},e.mask=J,e.maskMoney=(e,t,r)=>(r++,t=parseInt((t||"0").replace(/\W/g,"")).toString(),Z(e,t.length<r?("0".repeat(r)+t).slice(-1*r):t)),e.maskReverse=Z,e.maskTest=(e,t)=>e.length==R(e,t).length,e.merge=K,e.msToString=e=>{const t=[];return j.forEach((r=>{const s=S[r],i=(e-e%s)/s;i&&(e-=i*s,t.push(i.toString()+r))})),t.join(" ")},e.noop=I,e.parseMs=e=>{const t=/(-?(?:\d+)?\.?\d+) *(ms|s|m|h|d|w|y)/gm;let r,s=0;for(;null!==(r=t.exec(e));)r.index===t.lastIndex&&t.lastIndex++,s+=parseFloat(r[1])*S[r[2]]||0;return s},e.parseSize=e=>{if(a(e))return e+"px";const t=(e=>/(-?(?:\d+)?\.?\d+) *(px|%|cm|mm|in|pt|pc|en|ex|ch|rem|vw|vh|vmin|vmax)*/g.exec(e))(e);return t?parseFloat(t[1])+(t[2]||"px"):"0px"},e.random=(e,t)=>Math.floor(Math.random()*(t-e+1)+e),e.rangeArray=(e,t,r=1)=>Array.from({length:(t-e)/r+1},((t,s)=>e+s*r)),e.rgbToHex=(e,t,r)=>"#"+v(e.toString(16))+v(t.toString(16))+v(r.toString(16)),e.shadeColor=(e,t)=>"#"+e.replace(/^#/,"").replace(/../g,(e=>v(d(e,t)))),e.shuffleArray=e=>{for(let t=e.length-1;t>0;t--){const r=Math.floor(Math.random()*(t+1));[e[t],e[r]]=[e[r],e[t]]}return e},e.simpleID=()=>g()+f(),e.sleep=e=>new Promise((t=>setTimeout(t,e))),e.stringReverse=P,e.toArray=e=>s(e)?e:n(e)?[e]:[],e.toBool=e=>"true"===e||"1"===e,e.type=r,e.uniqueID=()=>_()+_()+_()+_(),e.upperCamelCase=Y,e.uuidv4=()=>y()+"-"+f()+"-4"+g()+"-"+f()+"-"+(y()+f()),e}({});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@andrewcaires/utils.js",
3
- "version": "0.2.23",
3
+ "version": "0.2.25",
4
4
  "description": "JavaScript utility library for web and nodejs development",
5
5
  "main": "./dist/index.cjs.js",
6
6
  "unpkg": "./dist/index.min.js",
@@ -48,15 +48,15 @@
48
48
  "@rollup/plugin-commonjs": "^25.0.7",
49
49
  "@rollup/plugin-terser": "^0.4.4",
50
50
  "@rollup/plugin-typescript": "^11.1.6",
51
- "@types/jest": "^29.5.11",
52
- "@types/node": "^20.11.0",
53
- "@typescript-eslint/eslint-plugin": "^6.18.1",
54
- "@typescript-eslint/parser": "^6.18.1",
55
- "eslint": "^8.56.0",
51
+ "@types/jest": "^29.5.12",
52
+ "@types/node": "^20.12.7",
53
+ "@typescript-eslint/eslint-plugin": "^7.7.0",
54
+ "@typescript-eslint/parser": "^7.7.0",
55
+ "eslint": "^8.57.0",
56
56
  "jest": "^29.7.0",
57
- "rollup": "^4.9.4",
57
+ "rollup": "^4.14.3",
58
58
  "rollup-plugin-dts": "^6.1.0",
59
- "ts-jest": "^29.1.1",
59
+ "ts-jest": "^29.1.2",
60
60
  "ts-node-dev": "^2.0.0",
61
61
  "tslib": "^2.6.2"
62
62
  }