@ztimson/utils 0.2.0 → 0.2.1

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/utils.cjs CHANGED
@@ -1,2 +1,2 @@
1
- (function(c,y){typeof exports=="object"&&typeof module<"u"?y(exports):typeof define=="function"&&define.amd?define(["exports"],y):(c=typeof globalThis<"u"?globalThis:c||self,y(c.utils={}))})(this,function(c){"use strict";var St=Object.defineProperty;var Tt=(c,y,B)=>y in c?St(c,y,{enumerable:!0,configurable:!0,writable:!0,value:B}):c[y]=B;var d=(c,y,B)=>(Tt(c,typeof y!="symbol"?y+"":y,B),B);function y(e,n=!1){if(e==null)throw new Error("Cannot clean a NULL value");return Array.isArray(e)?e=e.filter(t=>t!=null):Object.entries(e).forEach(([t,r])=>{(n&&r===void 0||!n&&r==null)&&delete e[t]}),e}function B(e){return JSON.parse(JSON.stringify(e))}function C(e,n,t){if(!(e==null||!n))return n.split(/[.[\]]/g).filter(r=>r.length).reduce((r,o,i,s)=>{if((o[0]=='"'||o[0]=="'")&&(o=o.slice(1,-1)),!(r!=null&&r.hasOwnProperty(o))){if(t==null)return;r[o]={}}return t!==void 0&&i==s.length-1?r[o]=t:r[o]},e)}function v(e,n,t={}){if(typeof e=="object"&&!Array.isArray(e)){for(const r of Object.keys(e)){const o=n?n+"."+r:r;typeof e[r]=="object"?v(e[r],o,t):t[o]=e[r]}return t}}function b(e,n,t=!1){if(e==null)return t;if(Array.isArray(n))return n.findIndex((o,i)=>!b(e[i],n[i],t))==-1;const r=typeof n;return r!=typeof e?!1:r=="object"?Object.keys(n).find(o=>!b(e[o],n[o],t))==null:r=="function"?e.toString()==n.toString():e==n}function A(e,n){const t=typeof e,r=typeof n;return t!="object"||e==null||r!="object"||n==null?t=="function"&&r=="function"?e.toString()==n.toString():e===n:Object.keys(e).length!=Object.keys(n).length?!1:Object.keys(e).every(i=>A(e[i],n[i]))}function W(e,n){n.forEach(t=>{Object.getOwnPropertyNames(t.prototype).forEach(r=>{Object.defineProperty(e.prototype,r,Object.getOwnPropertyDescriptor(t.prototype,r)||Object.create(null))})})}function z(e,n){return e.indexOf(n)===-1&&e.push(n),e}function V(e,n){return Y([...e.filter(t=>!n.includes(r=>A(t,r))),...n.filter(t=>!e.includes(r=>A(t,r)))])}function J(e){return function(n,t){const r=C(n,e),o=C(t,e);return typeof r!="string"||typeof o!="string"?1:r.toLowerCase().localeCompare(o.toLowerCase())}}function H(e,n=[]){return e.forEach(t=>Array.isArray(t)?H(t,n):n.push(t)),n}function K(e,n=!1){return function(t,r){const o=C(t,e),i=C(r,e);return typeof o=="number"&&typeof i=="number"?(n?-1:1)*(o-i):o>i?n?-1:1:o<i?n?1:-1:0}}function Z(e,n){return t=>A(t[e],n)}function Y(e){for(let n=e.length-1;n>=0;n--)e.slice(0,n).find(t=>A(t,e[n]))&&e.splice(n,1);return e}function Q(e){return Array.isArray(e)?e:[e]}class N{constructor(){d(this,"listeners",{})}static emit(n,...t){(this.listeners["*"]||[]).forEach(r=>r(n,...t)),(this.listeners[n.toString()]||[]).forEach(r=>r(...t))}static off(n,t){const r=n.toString();this.listeners[r]=(this.listeners[r]||[]).filter(o=>o===t)}static on(n,t){var o;const r=n.toString();return this.listeners[r]||(this.listeners[r]=[]),(o=this.listeners[r])==null||o.push(t),()=>this.off(n,t)}static once(n,t){return new Promise(r=>{const o=this.on(n,(...i)=>{r(i.length==1?i[0]:i),t&&t(...i),o()})})}emit(n,...t){(this.listeners["*"]||[]).forEach(r=>r(n,...t)),(this.listeners[n]||[]).forEach(r=>r(...t))}off(n,t){this.listeners[n]=(this.listeners[n]||[]).filter(r=>r===t)}on(n,t){var r;return this.listeners[n]||(this.listeners[n]=[]),(r=this.listeners[n])==null||r.push(t),()=>this.off(n,t)}once(n,t){return new Promise(r=>{const o=this.on(n,(...i)=>{r(i.length==1?i[0]:i),t&&t(...i),o()})})}}d(N,"listeners",{});const E=class E{constructor(n={}){d(this,"interceptors",{});d(this,"headers",{});this.opts=n,this.headers=n.headers||{},n.interceptors&&n.interceptors.forEach(t=>E.addInterceptor(t))}static addInterceptor(n){const t=Object.keys(E.interceptors).length.toString();return E.interceptors[t]=n,()=>{E.interceptors[t]=null}}addInterceptor(n){const t=Object.keys(this.interceptors).length.toString();return this.interceptors[t]=n,()=>{this.interceptors[t]=null}}async request(n={}){var i,s;if(!this.opts.url&&!n.url)throw new Error("Momentum server URL needs to be set");const t=((i=n.url)!=null&&i.startsWith("http")?n.url:(this.opts.url||"")+n.url).replace(/([^:]\/)\/+/g,"$1"),r=y({"Content-Type":n.body&&!(n.body instanceof FormData)?"application/json":void 0,...E.headers,...this.headers,...n.headers});return fetch(t,{headers:r,method:n.method||(n.body?"POST":"GET"),body:(s=r["Content-Type"])!=null&&s.startsWith("application/json")&&n.body?JSON.stringify(n.body):n.body}).then(async u=>{var T,O;for(let q of[...Object.values(E.interceptors),...Object.values(this.interceptors)])await new Promise(At=>q(u,()=>At(null)));if(!u.ok)throw Error(u.statusText);return(T=u.headers.get("Content-Type"))!=null&&T.startsWith("application/json")?await u.json():(O=u.headers.get("Content-Type"))!=null&&O.startsWith("text/plain")?await u.text():u}).catch(u=>{throw u})}};d(E,"interceptors",{}),d(E,"headers",{});let p=E;p.addInterceptor((e,n)=>{if(e.status==200)return n();throw e.status==400?new I(e.statusText):e.status==401?new $(e.statusText):e.status==403?new D(e.statusText):e.status==404?new G(e.statusText):e.status==500?new k(e.statusText):new m(e.statusText,e.status)});class m extends Error{constructor(t,r){super(t);d(this,"_code");r!=null&&(this._code=r)}get code(){return this._code||this.constructor.code}set code(t){this._code=t}static from(t){const r=Number(t.statusCode)??Number(t.code),o=new this(t.message||t.toString());return Object.assign(o,{stack:t.stack,...t,code:r??void 0})}static instanceof(t){return t.constructor.code!=null}toString(){return this.message||super.toString()}}d(m,"code",500);class I extends m{constructor(n="Bad Request"){super(n)}static instanceof(n){return n.constructor.code==this.code}}d(I,"code",400);class $ extends m{constructor(n="Unauthorized"){super(n)}static instanceof(n){return n.constructor.code==this.code}}d($,"code",401);class D extends m{constructor(n="Forbidden"){super(n)}static instanceof(n){return n.constructor.code==this.code}}d(D,"code",403);class G extends m{constructor(n="Not Found"){super(n)}static instanceof(n){return n.constructor.code==this.code}}d(G,"code",404);class k extends m{constructor(n="Internal Server Error"){super(n)}static instanceof(n){return n.constructor.code==this.code}}d(k,"code",500);const S={CLEAR:"\x1B[0m",BRIGHT:"\x1B[1m",DIM:"\x1B[2m",UNDERSCORE:"\x1B[4m",BLINK:"\x1B[5m",REVERSE:"\x1B[7m",HIDDEN:"\x1B[8m"},R={BLACK:"\x1B[30m",RED:"\x1B[31m",GREEN:"\x1B[32m",YELLOW:"\x1B[33m",BLUE:"\x1B[34m",MAGENTA:"\x1B[35m",CYAN:"\x1B[36m",LIGHT_GREY:"\x1B[37m",GREY:"\x1B[90m",LIGHT_RED:"\x1B[91m",LIGHT_GREEN:"\x1B[92m",LIGHT_YELLOW:"\x1B[93m",LIGHT_BLUE:"\x1B[94m",LIGHT_MAGENTA:"\x1B[95m",LIGHT_CYAN:"\x1B[96m",WHITE:"\x1B[97m"},X={BLACK:"\x1B[40m",RED:"\x1B[41m",GREEN:"\x1B[42m",YELLOW:"\x1B[43m",BLUE:"\x1B[44m",MAGENTA:"\x1B[45m",CYAN:"\x1B[46m",WHITE:"\x1B[47m",GREY:"\x1B[100m"};var x=(e=>(e[e.ERROR=0]="ERROR",e[e.WARN=1]="WARN",e[e.INFO=2]="INFO",e[e.LOG=3]="LOG",e[e.DEBUG=4]="DEBUG",e))(x||{});const g=class g extends N{constructor(n){super(),this.namespace=n}pad(n,t,r,o=!1){const i=n.toString(),s=t-i.length;if(s<=0)return i;const u=Array(~~(s/r.length)).fill(r).join("");return o?i+u:u+i}format(...n){const t=new Date;return`${`${t.getFullYear()}-${t.getMonth()+1}-${t.getDate()} ${this.pad(t.getHours().toString(),2,"0")}:${this.pad(t.getMinutes().toString(),2,"0")}:${this.pad(t.getSeconds().toString(),2,"0")}.${this.pad(t.getMilliseconds().toString(),3,"0",!0)}`}${this.namespace?` [${this.namespace}]`:""} ${n.join(" ")}`}debug(...n){if(g.LOG_LEVEL<4)return;const t=this.format(...n);g.emit(4,t),console.debug(R.LIGHT_GREY+t+S.CLEAR)}log(...n){if(g.LOG_LEVEL<3)return;const t=this.format(...n);g.emit(3,t),console.log(S.CLEAR+t)}info(...n){if(g.LOG_LEVEL<2)return;const t=this.format(...n);g.emit(2,t),console.info(R.BLUE+t+S.CLEAR)}warn(...n){if(g.LOG_LEVEL<1)return;const t=this.format(...n);g.emit(1,t),console.warn(R.YELLOW+t+S.CLEAR)}error(...n){if(g.LOG_LEVEL<0)return;const t=this.format(...n);g.emit(0,t),console.error(R.RED+t+S.CLEAR)}};d(g,"LOG_LEVEL",4);let U=g;function _(e,n){return e.length-e.replaceAll(n,"").length}function tt(e){return Array(e).fill(null).map(()=>Math.round(Math.random()*15).toString(16)).join("")}const j="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",M="0123456789",P="~`!@#$%^&*()_-+={[}]|\\:;\"'<,>.?/",et=j+M+P;function nt(e){const n=/(\+?1)?.*?(\d{3}).*?(\d{3}).*?(\d{4})/g.exec(e);if(!n)throw new Error(`Number cannot be parsed: ${e}`);return`${n[1]??""} (${n[2]}) ${n[3]}-${n[4]}`.trim()}function rt(e,n,t){return`${e.slice(0,t)}${n}${e.slice(t+1)}`}function ot(e,n,t,r=!0){const o=e.toString(),i=n-o.length;if(i<=0)return o;const s=Array(~~(i/t.length)).fill(t).join("");return r?s+o:o+s}function it(e,n=et){return Array(e).fill(null).map(()=>{const t=~~(Math.random()*n.length);return n[t]}).join("")}function st(e,n=!1,t=!1,r=!1){if(!n&&!t&&!r)throw new Error("Must enable at least one: letters, numbers, symbols");return Array(e).fill(null).map(()=>{let o;do{const i=~~(Math.random()*3);n&&i==0?o=j[~~(Math.random()*j.length)]:t&&i==1?o=M[~~(Math.random()*M.length)]:r&&i==2&&(o=P[~~(Math.random()*P.length)])}while(!o);return o}).join("")}function ct(e,n){if(typeof n=="string"&&(n=new RegExp(n,"g")),!n.global)throw new TypeError("Regular expression must be global.");let t=[],r;for(;(r=n.exec(e))!==null;)t.push(r);return t}function F(e){var n=ut(lt(ht(at(e),8*e.length)));return n.toLowerCase()}function ut(e){for(var n,t="0123456789ABCDEF",r="",o=0;o<e.length;o++)n=e.charCodeAt(o),r+=t.charAt(n>>>4&15)+t.charAt(15&n);return r}function at(e){for(var n=Array(e.length>>2),t=0;t<n.length;t++)n[t]=0;for(t=0;t<8*e.length;t+=8)n[t>>5]|=(255&e.charCodeAt(t/8))<<t%32;return n}function lt(e){for(var n="",t=0;t<32*e.length;t+=8)n+=String.fromCharCode(e[t>>5]>>>t%32&255);return n}function ht(e,n){e[n>>5]|=128<<n%32,e[14+(n+64>>>9<<4)]=n;for(var t=1732584193,r=-271733879,o=-1732584194,i=271733878,s=0;s<e.length;s+=16){var u=t,T=r,O=o,q=i;r=f(r=f(r=f(r=f(r=h(r=h(r=h(r=h(r=l(r=l(r=l(r=l(r=a(r=a(r=a(r=a(r,o=a(o,i=a(i,t=a(t,r,o,i,e[s+0],7,-680876936),r,o,e[s+1],12,-389564586),t,r,e[s+2],17,606105819),i,t,e[s+3],22,-1044525330),o=a(o,i=a(i,t=a(t,r,o,i,e[s+4],7,-176418897),r,o,e[s+5],12,1200080426),t,r,e[s+6],17,-1473231341),i,t,e[s+7],22,-45705983),o=a(o,i=a(i,t=a(t,r,o,i,e[s+8],7,1770035416),r,o,e[s+9],12,-1958414417),t,r,e[s+10],17,-42063),i,t,e[s+11],22,-1990404162),o=a(o,i=a(i,t=a(t,r,o,i,e[s+12],7,1804603682),r,o,e[s+13],12,-40341101),t,r,e[s+14],17,-1502002290),i,t,e[s+15],22,1236535329),o=l(o,i=l(i,t=l(t,r,o,i,e[s+1],5,-165796510),r,o,e[s+6],9,-1069501632),t,r,e[s+11],14,643717713),i,t,e[s+0],20,-373897302),o=l(o,i=l(i,t=l(t,r,o,i,e[s+5],5,-701558691),r,o,e[s+10],9,38016083),t,r,e[s+15],14,-660478335),i,t,e[s+4],20,-405537848),o=l(o,i=l(i,t=l(t,r,o,i,e[s+9],5,568446438),r,o,e[s+14],9,-1019803690),t,r,e[s+3],14,-187363961),i,t,e[s+8],20,1163531501),o=l(o,i=l(i,t=l(t,r,o,i,e[s+13],5,-1444681467),r,o,e[s+2],9,-51403784),t,r,e[s+7],14,1735328473),i,t,e[s+12],20,-1926607734),o=h(o,i=h(i,t=h(t,r,o,i,e[s+5],4,-378558),r,o,e[s+8],11,-2022574463),t,r,e[s+11],16,1839030562),i,t,e[s+14],23,-35309556),o=h(o,i=h(i,t=h(t,r,o,i,e[s+1],4,-1530992060),r,o,e[s+4],11,1272893353),t,r,e[s+7],16,-155497632),i,t,e[s+10],23,-1094730640),o=h(o,i=h(i,t=h(t,r,o,i,e[s+13],4,681279174),r,o,e[s+0],11,-358537222),t,r,e[s+3],16,-722521979),i,t,e[s+6],23,76029189),o=h(o,i=h(i,t=h(t,r,o,i,e[s+9],4,-640364487),r,o,e[s+12],11,-421815835),t,r,e[s+15],16,530742520),i,t,e[s+2],23,-995338651),o=f(o,i=f(i,t=f(t,r,o,i,e[s+0],6,-198630844),r,o,e[s+7],10,1126891415),t,r,e[s+14],15,-1416354905),i,t,e[s+5],21,-57434055),o=f(o,i=f(i,t=f(t,r,o,i,e[s+12],6,1700485571),r,o,e[s+3],10,-1894986606),t,r,e[s+10],15,-1051523),i,t,e[s+1],21,-2054922799),o=f(o,i=f(i,t=f(t,r,o,i,e[s+8],6,1873313359),r,o,e[s+15],10,-30611744),t,r,e[s+6],15,-1560198380),i,t,e[s+13],21,1309151649),o=f(o,i=f(i,t=f(t,r,o,i,e[s+4],6,-145523070),r,o,e[s+11],10,-1120210379),t,r,e[s+2],15,718787259),i,t,e[s+9],21,-343485551),t=w(t,u),r=w(r,T),o=w(o,O),i=w(i,q)}return Array(t,r,o,i)}function L(e,n,t,r,o,i){return w(ft(w(w(n,e),w(r,i)),o),t)}function a(e,n,t,r,o,i,s){return L(n&t|~n&r,e,n,o,i,s)}function l(e,n,t,r,o,i,s){return L(n&r|t&~r,e,n,o,i,s)}function h(e,n,t,r,o,i,s){return L(n^t^r,e,n,o,i,s)}function f(e,n,t,r,o,i,s){return L(t^(n|~r),e,n,o,i,s)}function w(e,n){var t=(65535&e)+(65535&n);return(e>>16)+(n>>16)+(t>>16)<<16|65535&t}function ft(e,n){return e<<n|e>>>32-n}function dt(e){return/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/.test(e)}function yt(e){return Object.entries(e).map(([n,t])=>encodeURIComponent(n)+"="+encodeURIComponent(t)).join("&")}function gt(e,n="mp"){return e?`https://www.gravatar.com/avatar/${F(e)}?d=${n}`:""}function Et(e){const n=new RegExp("(?:(?<protocol>[\\w\\d]+)\\:\\/\\/)?(?:(?<user>.+)\\@)?(?<host>(?<domain>[^:\\/\\?#@\\n]+)(?:\\:(?<port>\\d*))?)(?<path>\\/.*?)?(?:\\?(?<query>.*?))?(?:#(?<fragment>.*?))?$","gm").exec(e),t=(n==null?void 0:n.groups)??{},r=t.domain.split(".");if(t.port!=null&&(t.port=Number(t.port)),r.length>2&&(t.domain=r.splice(-2,2).join("."),t.subdomain=r.join(".")),t.query){const o=t.query.split("&"),i={};o.forEach(s=>{const[u,T]=s.split("=");i[u]=T}),t.query=i}return t}function mt(e){return(e instanceof Date?e.getTime():e)-new Date().getTime()}function wt(e){return new Promise(n=>setTimeout(n,e))}function Bt(e){const n=e instanceof Date?e:new Date(e);return new Intl.DateTimeFormat("en-us",{weekday:"long",month:"short",day:"numeric",hour:"numeric",minute:"numeric",hour12:!0}).format(n)}c.BadRequestError=I,c.CliBackground=X,c.CliEffects=S,c.CliForeground=R,c.CustomError=m,c.ForbiddenError=D,c.InternalServerError=k,c.LOG_LEVEL=x,c.Logger=U,c.NotFoundError=G,c.TypedEmitter=N,c.UnauthorizedError=$,c.XHR=p,c.addUnique=z,c.arrayDiff=V,c.caseInsensitiveSort=J,c.clean=y,c.countChars=_,c.createHex=tt,c.deepCopy=B,c.dotNotation=C,c.findByProp=Z,c.flattenArr=H,c.flattenObj=v,c.formEncode=yt,c.formatDate=Bt,c.formatPhoneNumber=nt,c.gravatar=gt,c.includes=b,c.insertAt=rt,c.isEqual=A,c.makeArray=Q,c.makeUnique=Y,c.matchAll=ct,c.md5=F,c.mixin=W,c.pad=ot,c.randomString=it,c.randomStringBuilder=st,c.sleep=wt,c.sortByProp=K,c.timeUntil=mt,c.urlParser=Et,c.validateEmail=dt,Object.defineProperty(c,Symbol.toStringTag,{value:"Module"})});
1
+ (function(c,d){typeof exports=="object"&&typeof module<"u"?d(exports):typeof define=="function"&&define.amd?define(["exports"],d):(c=typeof globalThis<"u"?globalThis:c||self,d(c.utils={}))})(this,function(c){"use strict";var wt=Object.defineProperty;var St=(c,d,A)=>d in c?wt(c,d,{enumerable:!0,configurable:!0,writable:!0,value:A}):c[d]=A;var f=(c,d,A)=>(St(c,typeof d!="symbol"?d+"":d,A),A);function d(e,n=!1){if(e==null)throw new Error("Cannot clean a NULL value");return Array.isArray(e)?e=e.filter(t=>t!=null):Object.entries(e).forEach(([t,r])=>{(n&&r===void 0||!n&&r==null)&&delete e[t]}),e}function A(e){return JSON.parse(JSON.stringify(e))}function C(e,n,t){if(!(e==null||!n))return n.split(/[.[\]]/g).filter(r=>r.length).reduce((r,o,i,s)=>{if((o[0]=='"'||o[0]=="'")&&(o=o.slice(1,-1)),!(r!=null&&r.hasOwnProperty(o))){if(t==null)return;r[o]={}}return t!==void 0&&i==s.length-1?r[o]=t:r[o]},e)}function v(e,n,t={}){if(typeof e=="object"&&!Array.isArray(e)){for(const r of Object.keys(e)){const o=n?n+"."+r:r;typeof e[r]=="object"?v(e[r],o,t):t[o]=e[r]}return t}}function O(e,n,t=!1){if(e==null)return t;if(Array.isArray(n))return n.findIndex((o,i)=>!O(e[i],n[i],t))==-1;const r=typeof n;return r!=typeof e?!1:r=="object"?Object.keys(n).find(o=>!O(e[o],n[o],t))==null:r=="function"?e.toString()==n.toString():e==n}function w(e,n){const t=typeof e,r=typeof n;return t!="object"||e==null||r!="object"||n==null?t=="function"&&r=="function"?e.toString()==n.toString():e===n:Object.keys(e).length!=Object.keys(n).length?!1:Object.keys(e).every(i=>w(e[i],n[i]))}function W(e,n){n.forEach(t=>{Object.getOwnPropertyNames(t.prototype).forEach(r=>{Object.defineProperty(e.prototype,r,Object.getOwnPropertyDescriptor(t.prototype,r)||Object.create(null))})})}function z(e,n){return e.indexOf(n)===-1&&e.push(n),e}function V(e,n){return Y([...e.filter(t=>!n.includes(r=>w(t,r))),...n.filter(t=>!e.includes(r=>w(t,r)))])}function J(e){return function(n,t){const r=C(n,e),o=C(t,e);return typeof r!="string"||typeof o!="string"?1:r.toLowerCase().localeCompare(o.toLowerCase())}}function H(e,n=[]){return e.forEach(t=>Array.isArray(t)?H(t,n):n.push(t)),n}function K(e,n=!1){return function(t,r){const o=C(t,e),i=C(r,e);return typeof o=="number"&&typeof i=="number"?(n?-1:1)*(o-i):o>i?n?-1:1:o<i?n?1:-1:0}}function Z(e,n){return t=>w(t[e],n)}function Y(e){for(let n=e.length-1;n>=0;n--)e.slice(0,n).find(t=>w(t,e[n]))&&e.splice(n,1);return e}function Q(e){return Array.isArray(e)?e:[e]}class b{constructor(){f(this,"listeners",{})}static emit(n,...t){(this.listeners["*"]||[]).forEach(r=>r(n,...t)),(this.listeners[n.toString()]||[]).forEach(r=>r(...t))}static off(n,t){const r=n.toString();this.listeners[r]=(this.listeners[r]||[]).filter(o=>o===t)}static on(n,t){var o;const r=n.toString();return this.listeners[r]||(this.listeners[r]=[]),(o=this.listeners[r])==null||o.push(t),()=>this.off(n,t)}static once(n,t){return new Promise(r=>{const o=this.on(n,(...i)=>{r(i.length==1?i[0]:i),t&&t(...i),o()})})}emit(n,...t){(this.listeners["*"]||[]).forEach(r=>r(n,...t)),(this.listeners[n]||[]).forEach(r=>r(...t))}off(n,t){this.listeners[n]=(this.listeners[n]||[]).filter(r=>r===t)}on(n,t){var r;return this.listeners[n]||(this.listeners[n]=[]),(r=this.listeners[n])==null||r.push(t),()=>this.off(n,t)}once(n,t){return new Promise(r=>{const o=this.on(n,(...i)=>{r(i.length==1?i[0]:i),t&&t(...i),o()})})}}f(b,"listeners",{});const g=class g{constructor(n={}){f(this,"interceptors",{});f(this,"headers",{});this.opts=n,this.headers=n.headers||{},n.interceptors&&n.interceptors.forEach(t=>g.addInterceptor(t))}static addInterceptor(n){const t=Object.keys(g.interceptors).length.toString();return g.interceptors[t]=n,()=>{g.interceptors[t]=null}}addInterceptor(n){const t=Object.keys(this.interceptors).length.toString();return this.interceptors[t]=n,()=>{this.interceptors[t]=null}}async request(n={}){var o,i;if(!this.opts.url&&!n.url)throw new Error("URL needs to be set");const t=((o=n.url)!=null&&o.startsWith("http")?n.url:(this.opts.url||"")+n.url).replace(/([^:]\/)\/+/g,"$1"),r=d({"Content-Type":n.body&&!(n.body instanceof FormData)?"application/json":void 0,...g.headers,...this.headers,...n.headers});return fetch(t,{headers:r,method:n.method||(n.body?"POST":"GET"),body:(i=r["Content-Type"])!=null&&i.startsWith("application/json")&&n.body?JSON.stringify(n.body):n.body}).then(async s=>{var E,T;for(let M of[...Object.values(g.interceptors),...Object.values(this.interceptors)])await new Promise(q=>M(s,()=>q()));if(!s.ok)throw Error(s.statusText);return(E=s.headers.get("Content-Type"))!=null&&E.startsWith("application/json")?await s.json():(T=s.headers.get("Content-Type"))!=null&&T.startsWith("text/plain")?await s.text():s})}};f(g,"interceptors",{}),f(g,"headers",{});let p=g;p.addInterceptor((e,n)=>{if(e.status==200)return n();throw e.status==400?new N(e.statusText):e.status==401?new I(e.statusText):e.status==403?new $(e.statusText):e.status==404?new D(e.statusText):e.status==500?new G(e.statusText):new m(e.statusText,e.status)});class m extends Error{constructor(t,r){super(t);f(this,"_code");r!=null&&(this._code=r)}get code(){return this._code||this.constructor.code}set code(t){this._code=t}static from(t){const r=Number(t.statusCode)??Number(t.code),o=new this(t.message||t.toString());return Object.assign(o,{stack:t.stack,...t,code:r??void 0})}static instanceof(t){return t.constructor.code!=null}toString(){return this.message||super.toString()}}f(m,"code",500);class N extends m{constructor(n="Bad Request"){super(n)}static instanceof(n){return n.constructor.code==this.code}}f(N,"code",400);class I extends m{constructor(n="Unauthorized"){super(n)}static instanceof(n){return n.constructor.code==this.code}}f(I,"code",401);class $ extends m{constructor(n="Forbidden"){super(n)}static instanceof(n){return n.constructor.code==this.code}}f($,"code",403);class D extends m{constructor(n="Not Found"){super(n)}static instanceof(n){return n.constructor.code==this.code}}f(D,"code",404);class G extends m{constructor(n="Internal Server Error"){super(n)}static instanceof(n){return n.constructor.code==this.code}}f(G,"code",500);const S={CLEAR:"\x1B[0m",BRIGHT:"\x1B[1m",DIM:"\x1B[2m",UNDERSCORE:"\x1B[4m",BLINK:"\x1B[5m",REVERSE:"\x1B[7m",HIDDEN:"\x1B[8m"},R={BLACK:"\x1B[30m",RED:"\x1B[31m",GREEN:"\x1B[32m",YELLOW:"\x1B[33m",BLUE:"\x1B[34m",MAGENTA:"\x1B[35m",CYAN:"\x1B[36m",LIGHT_GREY:"\x1B[37m",GREY:"\x1B[90m",LIGHT_RED:"\x1B[91m",LIGHT_GREEN:"\x1B[92m",LIGHT_YELLOW:"\x1B[93m",LIGHT_BLUE:"\x1B[94m",LIGHT_MAGENTA:"\x1B[95m",LIGHT_CYAN:"\x1B[96m",WHITE:"\x1B[97m"},X={BLACK:"\x1B[40m",RED:"\x1B[41m",GREEN:"\x1B[42m",YELLOW:"\x1B[43m",BLUE:"\x1B[44m",MAGENTA:"\x1B[45m",CYAN:"\x1B[46m",WHITE:"\x1B[47m",GREY:"\x1B[100m"};var x=(e=>(e[e.ERROR=0]="ERROR",e[e.WARN=1]="WARN",e[e.INFO=2]="INFO",e[e.LOG=3]="LOG",e[e.DEBUG=4]="DEBUG",e))(x||{});const y=class y extends b{constructor(n){super(),this.namespace=n}pad(n,t,r,o=!1){const i=n.toString(),s=t-i.length;if(s<=0)return i;const E=Array(~~(s/r.length)).fill(r).join("");return o?i+E:E+i}format(...n){const t=new Date;return`${`${t.getFullYear()}-${t.getMonth()+1}-${t.getDate()} ${this.pad(t.getHours().toString(),2,"0")}:${this.pad(t.getMinutes().toString(),2,"0")}:${this.pad(t.getSeconds().toString(),2,"0")}.${this.pad(t.getMilliseconds().toString(),3,"0",!0)}`}${this.namespace?` [${this.namespace}]`:""} ${n.join(" ")}`}debug(...n){if(y.LOG_LEVEL<4)return;const t=this.format(...n);y.emit(4,t),console.debug(R.LIGHT_GREY+t+S.CLEAR)}log(...n){if(y.LOG_LEVEL<3)return;const t=this.format(...n);y.emit(3,t),console.log(S.CLEAR+t)}info(...n){if(y.LOG_LEVEL<2)return;const t=this.format(...n);y.emit(2,t),console.info(R.BLUE+t+S.CLEAR)}warn(...n){if(y.LOG_LEVEL<1)return;const t=this.format(...n);y.emit(1,t),console.warn(R.YELLOW+t+S.CLEAR)}error(...n){if(y.LOG_LEVEL<0)return;const t=this.format(...n);y.emit(0,t),console.error(R.RED+t+S.CLEAR)}};f(y,"LOG_LEVEL",4);let k=y;function _(e,n){return e.length-e.replaceAll(n,"").length}function tt(e){return Array(e).fill(null).map(()=>Math.round(Math.random()*15).toString(16)).join("")}const U="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",j="0123456789",P="~`!@#$%^&*()_-+={[}]|\\:;\"'<,>.?/",et=U+j+P;function nt(e){const n=/(\+?1)?.*?(\d{3}).*?(\d{3}).*?(\d{4})/g.exec(e);if(!n)throw new Error(`Number cannot be parsed: ${e}`);return`${n[1]??""} (${n[2]}) ${n[3]}-${n[4]}`.trim()}function rt(e,n,t){return`${e.slice(0,t)}${n}${e.slice(t+1)}`}function ot(e,n,t,r=!0){const o=e.toString(),i=n-o.length;if(i<=0)return o;const s=Array(~~(i/t.length)).fill(t).join("");return r?s+o:o+s}function it(e,n=et){return Array(e).fill(null).map(()=>{const t=~~(Math.random()*n.length);return n[t]}).join("")}function st(e,n=!1,t=!1,r=!1){if(!n&&!t&&!r)throw new Error("Must enable at least one: letters, numbers, symbols");return Array(e).fill(null).map(()=>{let o;do{const i=~~(Math.random()*3);n&&i==0?o=U[~~(Math.random()*U.length)]:t&&i==1?o=j[~~(Math.random()*j.length)]:r&&i==2&&(o=P[~~(Math.random()*P.length)])}while(!o);return o}).join("")}function ct(e,n){if(typeof n=="string"&&(n=new RegExp(n,"g")),!n.global)throw new TypeError("Regular expression must be global.");let t=[],r;for(;(r=n.exec(e))!==null;)t.push(r);return t}function F(e){var n=ut(lt(ht(at(e),8*e.length)));return n.toLowerCase()}function ut(e){for(var n,t="0123456789ABCDEF",r="",o=0;o<e.length;o++)n=e.charCodeAt(o),r+=t.charAt(n>>>4&15)+t.charAt(15&n);return r}function at(e){for(var n=Array(e.length>>2),t=0;t<n.length;t++)n[t]=0;for(t=0;t<8*e.length;t+=8)n[t>>5]|=(255&e.charCodeAt(t/8))<<t%32;return n}function lt(e){for(var n="",t=0;t<32*e.length;t+=8)n+=String.fromCharCode(e[t>>5]>>>t%32&255);return n}function ht(e,n){e[n>>5]|=128<<n%32,e[14+(n+64>>>9<<4)]=n;for(var t=1732584193,r=-271733879,o=-1732584194,i=271733878,s=0;s<e.length;s+=16){var E=t,T=r,M=o,q=i;r=h(r=h(r=h(r=h(r=l(r=l(r=l(r=l(r=a(r=a(r=a(r=a(r=u(r=u(r=u(r=u(r,o=u(o,i=u(i,t=u(t,r,o,i,e[s+0],7,-680876936),r,o,e[s+1],12,-389564586),t,r,e[s+2],17,606105819),i,t,e[s+3],22,-1044525330),o=u(o,i=u(i,t=u(t,r,o,i,e[s+4],7,-176418897),r,o,e[s+5],12,1200080426),t,r,e[s+6],17,-1473231341),i,t,e[s+7],22,-45705983),o=u(o,i=u(i,t=u(t,r,o,i,e[s+8],7,1770035416),r,o,e[s+9],12,-1958414417),t,r,e[s+10],17,-42063),i,t,e[s+11],22,-1990404162),o=u(o,i=u(i,t=u(t,r,o,i,e[s+12],7,1804603682),r,o,e[s+13],12,-40341101),t,r,e[s+14],17,-1502002290),i,t,e[s+15],22,1236535329),o=a(o,i=a(i,t=a(t,r,o,i,e[s+1],5,-165796510),r,o,e[s+6],9,-1069501632),t,r,e[s+11],14,643717713),i,t,e[s+0],20,-373897302),o=a(o,i=a(i,t=a(t,r,o,i,e[s+5],5,-701558691),r,o,e[s+10],9,38016083),t,r,e[s+15],14,-660478335),i,t,e[s+4],20,-405537848),o=a(o,i=a(i,t=a(t,r,o,i,e[s+9],5,568446438),r,o,e[s+14],9,-1019803690),t,r,e[s+3],14,-187363961),i,t,e[s+8],20,1163531501),o=a(o,i=a(i,t=a(t,r,o,i,e[s+13],5,-1444681467),r,o,e[s+2],9,-51403784),t,r,e[s+7],14,1735328473),i,t,e[s+12],20,-1926607734),o=l(o,i=l(i,t=l(t,r,o,i,e[s+5],4,-378558),r,o,e[s+8],11,-2022574463),t,r,e[s+11],16,1839030562),i,t,e[s+14],23,-35309556),o=l(o,i=l(i,t=l(t,r,o,i,e[s+1],4,-1530992060),r,o,e[s+4],11,1272893353),t,r,e[s+7],16,-155497632),i,t,e[s+10],23,-1094730640),o=l(o,i=l(i,t=l(t,r,o,i,e[s+13],4,681279174),r,o,e[s+0],11,-358537222),t,r,e[s+3],16,-722521979),i,t,e[s+6],23,76029189),o=l(o,i=l(i,t=l(t,r,o,i,e[s+9],4,-640364487),r,o,e[s+12],11,-421815835),t,r,e[s+15],16,530742520),i,t,e[s+2],23,-995338651),o=h(o,i=h(i,t=h(t,r,o,i,e[s+0],6,-198630844),r,o,e[s+7],10,1126891415),t,r,e[s+14],15,-1416354905),i,t,e[s+5],21,-57434055),o=h(o,i=h(i,t=h(t,r,o,i,e[s+12],6,1700485571),r,o,e[s+3],10,-1894986606),t,r,e[s+10],15,-1051523),i,t,e[s+1],21,-2054922799),o=h(o,i=h(i,t=h(t,r,o,i,e[s+8],6,1873313359),r,o,e[s+15],10,-30611744),t,r,e[s+6],15,-1560198380),i,t,e[s+13],21,1309151649),o=h(o,i=h(i,t=h(t,r,o,i,e[s+4],6,-145523070),r,o,e[s+11],10,-1120210379),t,r,e[s+2],15,718787259),i,t,e[s+9],21,-343485551),t=B(t,E),r=B(r,T),o=B(o,M),i=B(i,q)}return Array(t,r,o,i)}function L(e,n,t,r,o,i){return B(ft(B(B(n,e),B(r,i)),o),t)}function u(e,n,t,r,o,i,s){return L(n&t|~n&r,e,n,o,i,s)}function a(e,n,t,r,o,i,s){return L(n&r|t&~r,e,n,o,i,s)}function l(e,n,t,r,o,i,s){return L(n^t^r,e,n,o,i,s)}function h(e,n,t,r,o,i,s){return L(t^(n|~r),e,n,o,i,s)}function B(e,n){var t=(65535&e)+(65535&n);return(e>>16)+(n>>16)+(t>>16)<<16|65535&t}function ft(e,n){return e<<n|e>>>32-n}function dt(e){return/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/.test(e)}function yt(e){return Object.entries(e).map(([n,t])=>encodeURIComponent(n)+"="+encodeURIComponent(t)).join("&")}function gt(e,n="mp"){return e?`https://www.gravatar.com/avatar/${F(e)}?d=${n}`:""}function Et(e){const n=new RegExp("(?:(?<protocol>[\\w\\d]+)\\:\\/\\/)?(?:(?<user>.+)\\@)?(?<host>(?<domain>[^:\\/\\?#@\\n]+)(?:\\:(?<port>\\d*))?)(?<path>\\/.*?)?(?:\\?(?<query>.*?))?(?:#(?<fragment>.*?))?$","gm").exec(e),t=(n==null?void 0:n.groups)??{},r=t.domain.split(".");if(t.port!=null&&(t.port=Number(t.port)),r.length>2&&(t.domain=r.splice(-2,2).join("."),t.subdomain=r.join(".")),t.query){const o=t.query.split("&"),i={};o.forEach(s=>{const[E,T]=s.split("=");i[E]=T}),t.query=i}return t}function mt(e){return(e instanceof Date?e.getTime():e)-new Date().getTime()}function Bt(e){return new Promise(n=>setTimeout(n,e))}function At(e){const n=e instanceof Date?e:new Date(e);return new Intl.DateTimeFormat("en-us",{weekday:"long",month:"short",day:"numeric",hour:"numeric",minute:"numeric",hour12:!0}).format(n)}c.BadRequestError=N,c.CliBackground=X,c.CliEffects=S,c.CliForeground=R,c.CustomError=m,c.ForbiddenError=$,c.InternalServerError=G,c.LOG_LEVEL=x,c.Logger=k,c.NotFoundError=D,c.TypedEmitter=b,c.UnauthorizedError=I,c.XHR=p,c.addUnique=z,c.arrayDiff=V,c.caseInsensitiveSort=J,c.clean=d,c.countChars=_,c.createHex=tt,c.deepCopy=A,c.dotNotation=C,c.findByProp=Z,c.flattenArr=H,c.flattenObj=v,c.formEncode=yt,c.formatDate=At,c.formatPhoneNumber=nt,c.gravatar=gt,c.includes=O,c.insertAt=rt,c.isEqual=w,c.makeArray=Q,c.makeUnique=Y,c.matchAll=ct,c.md5=F,c.mixin=W,c.pad=ot,c.randomString=it,c.randomStringBuilder=st,c.sleep=Bt,c.sortByProp=K,c.timeUntil=mt,c.urlParser=Et,c.validateEmail=dt,Object.defineProperty(c,Symbol.toStringTag,{value:"Module"})});
2
2
  //# sourceMappingURL=utils.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.cjs","sources":["../src/objects.ts","../src/array.ts","../src/emitter.ts","../src/xhr.ts","../src/errors.ts","../src/logger.ts","../src/string.ts","../src/misc.ts","../src/time.ts"],"sourcesContent":["/**\r\n * Removes any null values from an object in-place\r\n *\r\n * @example\r\n * ```ts\r\n * let test = {a: 0, b: false, c: null, d: 'abc'}\r\n * console.log(clean(test)); // Output: {a: 0, b: false, d: 'abc'}\r\n * ```\r\n *\r\n * @param {T} obj Object reference that will be cleaned\r\n * @param undefinedOnly Ignore null values\r\n * @returns {Partial<T>} Cleaned object\r\n */\r\nexport function clean<T>(obj: T, undefinedOnly = false): Partial<T> {\r\n\tif(obj == null) throw new Error(\"Cannot clean a NULL value\");\r\n\tif(Array.isArray(obj)) {\r\n\t\tobj = <any>obj.filter(o => o != null);\r\n\t} else {\r\n\t\tObject.entries(obj).forEach(([key, value]) => {\r\n\t\t\tif((undefinedOnly && value === undefined) || (!undefinedOnly && value == null)) delete (<any>obj)[key];\r\n\t\t});\r\n\t}\r\n\treturn <any>obj;\r\n}\r\n\r\n/**\r\n * Create a deep copy of an object (vs. a shallow copy of references)\r\n *\r\n * Should be replaced by `structuredClone` once released.\r\n *\r\n * @param {T} value Object to copy\r\n * @returns {T} Type\r\n */\r\nexport function deepCopy<T>(value: T): T {\r\n\treturn JSON.parse(JSON.stringify(value));\r\n}\r\n\r\n/**\r\n * Get/set a property of an object using dot notation\r\n *\r\n * @example\r\n * ```ts\r\n * // Get a value\r\n * const name = dotNotation<string>(person, 'firstName');\r\n * const familyCarMake = dotNotation(family, 'cars[0].make');\r\n * // Set a value\r\n * dotNotation(family, 'cars[0].make', 'toyota');\r\n * ```\r\n *\r\n * @type T Return type\r\n * @param {Object} obj source object to search\r\n * @param {string} prop property name (Dot notation & indexing allowed)\r\n * @param {any} set Set object property to value, omit to fetch value instead\r\n * @return {T} property value\r\n */\r\nexport function dotNotation<T>(obj: any, prop: string, set: T): T;\r\nexport function dotNotation<T>(obj: any, prop: string): T | undefined;\r\nexport function dotNotation<T>(obj: any, prop: string, set?: T): T | undefined {\r\n\tif(obj == null || !prop) return undefined;\r\n\t// Split property string by '.' or [index]\r\n\treturn <T>prop.split(/[.[\\]]/g).filter(prop => prop.length).reduce((obj, prop, i, arr) => {\r\n\t\tif(prop[0] == '\"' || prop[0] == \"'\") prop = prop.slice(1, -1); // Take quotes out\r\n\t\tif(!obj?.hasOwnProperty(prop)) {\r\n\t\t\tif(set == undefined) return undefined;\r\n\t\t\tobj[prop] = {};\r\n\t\t}\r\n\t\tif(set !== undefined && i == arr.length - 1)\r\n\t\t\treturn obj[prop] = set;\r\n\t\treturn obj[prop];\r\n\t}, obj);\r\n}\r\n\r\n/**\r\n * Recursively flatten a nested object, while maintaining key structure.\r\n *\r\n * @example\r\n * ```ts\r\n * const car = {honda: {model: \"Civic\"}};\r\n * console.log(flattenObj(car)); //Output {honda.model: \"Civic\"}\r\n * ```\r\n *\r\n * @param obj - Object to flatten\r\n * @param parent - Recursively check if key is a parent key or not\r\n * @param result - Result\r\n * @returns {object} - Flattened object\r\n */\r\nexport function flattenObj(obj: any, parent?: any, result: any = {}) {\r\n\tif(typeof obj === \"object\" && !Array.isArray(obj)) {\r\n\t\tfor(const key of Object.keys(obj)) {\r\n\t\t\tconst propName = parent ? parent + '.' + key : key;\r\n\t\t\tif(typeof obj[key] === 'object') {\r\n\t\t\t\tflattenObj(obj[key], propName, result);\r\n\t\t\t} else {\r\n\t\t\t\tresult[propName] = obj[key];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn result;\r\n\t}\r\n}\r\n\r\n/**\r\n * Check that an object has the following values\r\n *\r\n * @example\r\n * ```ts\r\n * const test = {a: 2, b: 2};\r\n * includes(test, {a: 1}); // true\r\n * includes(test, {b: 1, c: 3}); // false\r\n * ```\r\n *\r\n * @param target Object to search\r\n * @param values Criteria to check against\r\n * @param allowMissing Only check the keys that are available on the target\r\n * @returns {boolean} Does target include all the values\r\n */\r\nexport function includes(target: any, values: any, allowMissing = false): boolean {\r\n\tif(target == undefined) return allowMissing;\r\n\tif(Array.isArray(values)) return values.findIndex((e: any, i: number) => !includes(target[i], values[i], allowMissing)) == -1;\r\n\tconst type = typeof values;\r\n\tif(type != typeof target) return false;\r\n\tif(type == 'object') {\r\n\t\treturn Object.keys(values).find(key => !includes(target[key], values[key], allowMissing)) == null;\r\n\t}\r\n\tif(type == 'function') return target.toString() == values.toString();\r\n\treturn target == values;\r\n}\r\n\r\n/**\r\n * Deep check if two objects are equal\r\n *\r\n * @param {any} a - first item to compare\r\n * @param {any} b - second item to compare\r\n * @returns {boolean} True if they match\r\n */\r\nexport function isEqual(a: any, b: any): boolean {\r\n\tconst ta = typeof a, tb = typeof b;\r\n\tif((ta != 'object' || a == null) || (tb != 'object' || b == null))\r\n\t\treturn ta == 'function' && tb == 'function' ? a.toString() == b.toString() : a === b;\r\n\tconst keys = Object.keys(a);\r\n\tif(keys.length != Object.keys(b).length) return false;\r\n\treturn Object.keys(a).every(key => isEqual(a[key], b[key]));\r\n}\r\n\r\nexport function mixin(target: any, constructors: any[]) {\r\n\tconstructors.forEach(c => {\r\n\t\tObject.getOwnPropertyNames(c.prototype).forEach((name) => {\r\n\t\t\tObject.defineProperty(\r\n\t\t\t\ttarget.prototype,\r\n\t\t\t\tname,\r\n\t\t\t\tObject.getOwnPropertyDescriptor(c.prototype, name) ||\r\n\t\t\t\tObject.create(null)\r\n\t\t\t);\r\n\t\t});\r\n\t});\r\n}\r\n","import {dotNotation, isEqual} from './objects';\n\nexport function addUnique<T>(array: T[], el: T): T[] {\n\tif(array.indexOf(el) === -1) array.push(el);\n\treturn array;\n}\n\nexport function arrayDiff(a: any[], b: any[]): any[] {\n\treturn makeUnique([\n\t\t...a.filter(v1 => !b.includes((v2: any) => isEqual(v1, v2))),\n\t\t...b.filter(v1 => !a.includes((v2: any) => isEqual(v1, v2))),\n\t]);\n}\n\n/**\n * Provides a shorthand for sorting arrays of complex objects by a string property\n *\n * @example\n * ```ts\n * let arr = [{a: 'Apple', b: 123}, {a: 'Carrot', b: 789}, {a: 'banana', b: 456}];\n * arr.sort(caseInsensitiveSort('a'));\n * ```\n *\n * @param {string} prop - Name of property to use, supports dot notation\n * @returns {(a, b) => (number)} - Function to handle sort (Meant to be passed to Array.prototype.sort or used in sortFn)\n */\nexport function caseInsensitiveSort(prop: string) {\n\treturn function (a: any, b: any) {\n\t\tconst aVal = dotNotation<string>(a, prop);\n\t\tconst bVal = dotNotation<string>(b, prop);\n\t\tif(typeof aVal !== 'string' || typeof bVal !== 'string') return 1;\n\t\treturn aVal.toLowerCase().localeCompare(bVal.toLowerCase());\n\t};\n}\n\n/**\n * Recursively flatten nested arrays\n *\n * @example\n * ```ts\n * const arr = [\n * {label: null, url: '/'},\n * {label: 'Model Admin', url: '/model-admin'},\n * [\n * {label: 'Elements', url: '/model-admin/elements'},\n * {label: 'Example', url: null}\n * ]\n * ];\n *\n * console.log(flattenArr(arr));\n * // Output:\n * [\n * {label: null, url: '/'},\n * {label: 'Model Admin', url: '/model-admin'},\n * {label: 'Elements', url: '/model-admin/elements'},\n * {label: 'Example', url: null}\n * ]\n * ```\n *\n * @param {any[]} arr - n-dimensional array\n * @param {any[]} result - Internal use only -- Keeps track of recursion\n * @returns {any[]} - Flattened array\n */\nexport function flattenArr(arr: any[], result: any[] = []): any[] {\n\tarr.forEach(el => Array.isArray(el) ? flattenArr(el, result) : result.push(el));\n\treturn result;\n}\n\n/**\n * Provides a shorthand for sorting arrays of complex objects\n *\n * @example\n * ```ts\n * let arr = [{a: {b: 2}}, {a: {b: 3}}, {a: {b: 1}}];\n * arr.sort(sortByProp('a.b'));\n * ```\n *\n * @param {string} prop - Name of property to use, supports dot notation\n * @param {boolean} reverse - Reverse the order of the sort\n * @returns {(a, b) => (number)} - Function to handle sort (Meant to be passed to Array.prototype.sort)\n */\nexport function sortByProp(prop: string, reverse = false) {\n\treturn function (a: any, b: any) {\n\t\tconst aVal = dotNotation<any>(a, prop);\n\t\tconst bVal = dotNotation<any>(b, prop);\n\t\tif(typeof aVal == 'number' && typeof bVal == 'number')\n\t\t\treturn (reverse ? -1 : 1) * (aVal - bVal);\n\t\tif(aVal > bVal) return reverse ? -1 : 1;\n\t\tif(aVal < bVal) return reverse ? 1 : -1;\n\t\treturn 0;\n\t};\n}\n\nexport function findByProp(prop: string, value: any) {\n\treturn (v: any) => isEqual(v[prop], value);\n}\n\nexport function makeUnique(arr: any[]) {\n\tfor(let i = arr.length - 1; i >= 0; i--) {\n\t\tif(arr.slice(0, i).find(n => isEqual(n, arr[i]))) arr.splice(i, 1);\n\t}\n\treturn arr;\n}\n\n/**\n * Make sure value is an array, if it isn't wrap it in one.\n * @param {T[] | T} value Value that should be an array\n * @returns {T[]} Value in an array\n */\nexport function makeArray<T>(value: T | T[]): T[] {\n\treturn Array.isArray(value) ? value : [value];\n}\n","export type Listener = (...args: any[]) => any;\r\nexport type TypedEvents = {[k in string | symbol]: Listener} & {'*': (event: string, ...args: any[]) => any};\r\n\r\nexport class TypedEmitter<T extends TypedEvents = TypedEvents> {\r\n\tprivate static listeners: {[key: string]: Listener[]} = {};\r\n\r\n\tprivate listeners: { [key in keyof T]?: Listener[] } = {};\r\n\r\n\tstatic emit(event: any, ...args: any[]) {\r\n\t\t(this.listeners['*'] || []).forEach(l => l(event, ...args));\r\n\t\t(this.listeners[event.toString()] || []).forEach(l => l(...args));\r\n\t};\r\n\r\n\tstatic off(event: any, listener: Listener) {\r\n\t\tconst e = event.toString();\r\n\t\tthis.listeners[e] = (this.listeners[e] || []).filter(l => l === listener);\r\n\t}\r\n\r\n\tstatic on(event: any, listener: Listener) {\r\n\t\tconst e = event.toString();\r\n\t\tif(!this.listeners[e]) this.listeners[e] = [];\r\n\t\tthis.listeners[e]?.push(listener);\r\n\t\treturn () => this.off(event, listener);\r\n\t}\r\n\r\n\tstatic once(event: any, listener?: Listener): Promise<any> {\r\n\t\treturn new Promise(res => {\r\n\t\t\tconst unsubscribe = this.on(event, <any>((...args: any) => {\r\n\t\t\t\tres(args.length == 1 ? args[0] : args);\r\n\t\t\t\tif(listener) listener(...args);\r\n\t\t\t\tunsubscribe();\r\n\t\t\t}));\r\n\t\t});\r\n\t}\r\n\r\n\temit<K extends keyof T>(event: K, ...args: Parameters<T[K]>) {\r\n\t\t(this.listeners['*'] || []).forEach(l => l(event, ...args));\r\n\t\t(this.listeners[event] || []).forEach(l => l(...args));\r\n\t};\r\n\r\n\toff<K extends keyof T = string>(event: K, listener: T[K]) {\r\n\t\tthis.listeners[event] = (this.listeners[event] || []).filter(l => l === listener);\r\n\t}\r\n\r\n\ton<K extends keyof T = string>(event: K, listener: T[K]) {\r\n\t\tif(!this.listeners[event]) this.listeners[event] = [];\r\n\t\tthis.listeners[event]?.push(listener);\r\n\t\treturn () => this.off(event, listener);\r\n\t}\r\n\r\n\tonce<K extends keyof T = string>(event: K, listener?: T[K]): Promise<any> {\r\n\t\treturn new Promise(res => {\r\n\t\t\tconst unsubscribe = this.on(event, <any>((...args: any) => {\r\n\t\t\t\tres(args.length == 1 ? args[0] : args);\r\n\t\t\t\tif(listener) listener(...args);\r\n\t\t\t\tunsubscribe();\r\n\t\t\t}));\r\n\t\t});\r\n\t}\r\n}\r\n","import {clean} from './objects';\r\n\r\nexport type Interceptor = (request: Response, next: () => void) => void;\r\n\r\nexport type RequestOptions = {\r\n\turl?: string;\r\n\tmethod?: 'GET' | 'POST' | 'PATCH' | 'DELETE';\r\n\tbody?: any;\r\n\theaders?: {[key: string | symbol]: string | null | undefined};\r\n\t[key: string]: any;\r\n}\r\n\r\nexport type XhrOptions = {\r\n\theaders?: {[key: string | symbol]: string | null | undefined};\r\n\tinterceptors?: Interceptor[];\r\n\turl?: string;\r\n}\r\n\r\nexport class XHR {\r\n\tprivate static interceptors: {[key: string]: Interceptor} = {};\r\n\r\n\tstatic headers: {[key: string]: string | null | undefined} = {};\r\n\r\n\tprivate interceptors: {[key: string]: Interceptor} = {}\r\n\r\n\theaders: {[key: string]: string | null | undefined} = {}\r\n\r\n\tconstructor(public readonly opts: XhrOptions = {}) {\r\n\t\tthis.headers = opts.headers || {};\r\n\t\tif(opts.interceptors) {\r\n\t\t\topts.interceptors.forEach(i => XHR.addInterceptor(i));\r\n\t\t}\r\n\t}\r\n\r\n\tstatic addInterceptor(fn: Interceptor): () => void {\r\n\t\tconst key = Object.keys(XHR.interceptors).length.toString();\r\n\t\tXHR.interceptors[key] = fn;\r\n\t\treturn () => { XHR.interceptors[key] = <any>null; }\r\n\t}\r\n\r\n\taddInterceptor(fn: Interceptor): () => void {\r\n\t\tconst key = Object.keys(this.interceptors).length.toString();\r\n\t\tthis.interceptors[key] = fn;\r\n\t\treturn () => { this.interceptors[key] = <any>null; }\r\n\t}\r\n\r\n\tasync request<T>(opts: RequestOptions = {}): Promise<T> {\r\n\t\tif(!this.opts.url && !opts.url) throw new Error('Momentum server URL needs to be set');\r\n\t\tconst url = (opts.url?.startsWith('http') ? opts.url : (this.opts.url || '') + opts.url).replace(/([^:]\\/)\\/+/g, '$1');\r\n\r\n\t\t// Prep headers\r\n\t\tconst headers = <any>clean({\r\n\t\t\t'Content-Type': (opts.body && !(opts.body instanceof FormData)) ? 'application/json' : undefined,\r\n\t\t\t...XHR.headers,\r\n\t\t\t...this.headers,\r\n\t\t\t...opts.headers\r\n\t\t});\r\n\r\n\t\t// Send request\r\n\t\tconst req = fetch(url, {\r\n\t\t\theaders,\r\n\t\t\tmethod: opts.method || (opts.body ? 'POST' : 'GET'),\r\n\t\t\tbody: (headers['Content-Type']?.startsWith('application/json') && opts.body) ? JSON.stringify(opts.body) : opts.body\r\n\t\t}).then(async resp => {\r\n\t\t\tfor(let fn of [...Object.values(XHR.interceptors), ...Object.values(this.interceptors)]) {\r\n\t\t\t\tconst wait = new Promise(res => fn(resp, () => res(null)));\r\n\t\t\t\tawait wait;\r\n\t\t\t}\r\n\r\n\t\t\tif(!resp.ok) throw Error(resp.statusText);\r\n\t\t\tif(resp.headers.get('Content-Type')?.startsWith('application/json')) return await resp.json();\r\n\t\t\tif(resp.headers.get('Content-Type')?.startsWith('text/plain')) return await <any>resp.text();\r\n\t\t\treturn resp;\r\n\t\t}).catch((err: Error) => {\r\n\t\t\tthrow err;\r\n\t\t});\r\n\t\treturn req;\r\n\t}\r\n}\r\n","import {XHR} from './xhr';\r\n\r\nXHR.addInterceptor((resp: Response, next: () => void) => {\r\n\tif(resp.status == 200) return next();\r\n\tif(resp.status == 400) throw new BadRequestError(resp.statusText);\r\n\tif(resp.status == 401) throw new UnauthorizedError(resp.statusText);\r\n\tif(resp.status == 403) throw new ForbiddenError(resp.statusText);\r\n\tif(resp.status == 404) throw new NotFoundError(resp.statusText);\r\n\tif(resp.status == 500) throw new InternalServerError(resp.statusText);\r\n\tthrow new CustomError(resp.statusText, resp.status);\r\n});\r\n\r\nexport class CustomError extends Error {\r\n\tstatic code = 500;\r\n\r\n\tprivate _code?: number;\r\n\tget code(): number { return this._code || (<any>this).constructor.code; }\r\n\tset code(c: number) { this._code = c; }\r\n\r\n\tconstructor(message?: string, code?: number) {\r\n\t\tsuper(message);\r\n\t\tif(code != null) this._code = code;\r\n\t}\r\n\r\n\tstatic from(err: Error): CustomError {\r\n\t\tconst code = Number((<any>err).statusCode) ?? Number((<any>err).code);\r\n\t\tconst newErr = new this(err.message || err.toString());\r\n\t\treturn Object.assign(newErr, {\r\n\t\t\tstack: err.stack,\r\n\t\t\t...err,\r\n\t\t\tcode: code ?? undefined\r\n\t\t});\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code != undefined;\r\n\t}\r\n\r\n\ttoString() {\r\n\t\treturn this.message || super.toString();\r\n\t}\r\n}\r\n\r\nexport class BadRequestError extends CustomError {\r\n\tstatic code = 400;\r\n\r\n\tconstructor(message: string = 'Bad Request') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class UnauthorizedError extends CustomError {\r\n\tstatic code = 401;\r\n\r\n\tconstructor(message: string = 'Unauthorized') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class ForbiddenError extends CustomError {\r\n\tstatic code = 403;\r\n\r\n\tconstructor(message: string = 'Forbidden') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class NotFoundError extends CustomError {\r\n\tstatic code = 404;\r\n\r\n\tconstructor(message: string = 'Not Found') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class InternalServerError extends CustomError {\r\n\tstatic code = 500;\r\n\r\n\tconstructor(message: string = 'Internal Server Error') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n","import {TypedEmitter, TypedEvents} from './emitter';\r\n\r\nexport const CliEffects = {\r\n\tCLEAR: \"\\x1b[0m\",\r\n\tBRIGHT: \"\\x1b[1m\",\r\n\tDIM: \"\\x1b[2m\",\r\n\tUNDERSCORE: \"\\x1b[4m\",\r\n\tBLINK: \"\\x1b[5m\",\r\n\tREVERSE: \"\\x1b[7m\",\r\n\tHIDDEN: \"\\x1b[8m\",\r\n}\r\n\r\nexport const CliForeground = {\r\n\tBLACK: '\\x1b[30m',\r\n\tRED: '\\x1b[31m',\r\n\tGREEN: '\\x1b[32m',\r\n\tYELLOW: '\\x1b[33m',\r\n\tBLUE: '\\x1b[34m',\r\n\tMAGENTA: '\\x1b[35m',\r\n\tCYAN: '\\x1b[36m',\r\n\tLIGHT_GREY: '\\x1b[37m',\r\n\tGREY: '\\x1b[90m',\r\n\tLIGHT_RED: '\\x1b[91m',\r\n\tLIGHT_GREEN: '\\x1b[92m',\r\n\tLIGHT_YELLOW: '\\x1b[93m',\r\n\tLIGHT_BLUE: '\\x1b[94m',\r\n\tLIGHT_MAGENTA: '\\x1b[95m',\r\n\tLIGHT_CYAN: '\\x1b[96m',\r\n\tWHITE: '\\x1b[97m',\r\n}\r\n\r\nexport const CliBackground = {\r\n\tBLACK: \"\\x1b[40m\",\r\n\tRED: \"\\x1b[41m\",\r\n\tGREEN: \"\\x1b[42m\",\r\n\tYELLOW: \"\\x1b[43m\",\r\n\tBLUE: \"\\x1b[44m\",\r\n\tMAGENTA: \"\\x1b[45m\",\r\n\tCYAN: \"\\x1b[46m\",\r\n\tWHITE: \"\\x1b[47m\",\r\n\tGREY: \"\\x1b[100m\",\r\n}\r\n\r\nexport enum LOG_LEVEL {\r\n\tERROR = 0,\r\n\tWARN = 1,\r\n\tINFO = 2,\r\n\tLOG = 3,\r\n\tDEBUG = 4,\r\n}\r\n\r\nexport type LoggerEvents = TypedEvents & {\r\n\t'ERROR': (...args: any[]) => any;\r\n\t'WARN': (...args: any[]) => any;\r\n\t'INFO': (...args: any[]) => any;\r\n\t'LOG': (...args: any[]) => any;\r\n\t'DEBUG': (...args: any[]) => any;\r\n};\r\n\r\nexport class Logger extends TypedEmitter<LoggerEvents> {\r\n\tstatic LOG_LEVEL: LOG_LEVEL = LOG_LEVEL.DEBUG;\r\n\r\n\tconstructor(public readonly namespace?: string) {\r\n\t\tsuper();\r\n\t}\r\n\r\n\tprivate pad(text: any, length: number, char: string, end = false) {\r\n\t\tconst t = text.toString();\r\n\t\tconst l = length - t.length;\r\n\t\tif(l <= 0) return t;\r\n\t\tconst padding = Array(~~(l / char.length)).fill(char).join('');\r\n\t\treturn !end ? padding + t : t + padding;\r\n\t}\r\n\r\n\tprivate format(...text: string[]): string {\r\n\t\tconst now = new Date();\r\n\t\tconst timestamp = `${now.getFullYear()}-${now.getMonth() + 1}-${now.getDate()} ${this.pad(now.getHours().toString(), 2, '0')}:${this.pad(now.getMinutes().toString(), 2, '0')}:${this.pad(now.getSeconds().toString(), 2, '0')}.${this.pad(now.getMilliseconds().toString(), 3, '0', true)}`;\r\n\t\treturn `${timestamp}${this.namespace ? ` [${this.namespace}]` : ''} ${text.join(' ')}`;\r\n\t}\r\n\r\n\tdebug(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.DEBUG) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.DEBUG, str);\r\n\t\tconsole.debug(CliForeground.LIGHT_GREY + str + CliEffects.CLEAR);\r\n\t}\r\n\r\n\tlog(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.LOG) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.LOG, str);\r\n\t\tconsole.log(CliEffects.CLEAR + str);\r\n\t}\r\n\r\n\tinfo(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.INFO) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.INFO, str);\r\n\t\tconsole.info(CliForeground.BLUE + str + CliEffects.CLEAR);\r\n\t}\r\n\r\n\twarn(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.WARN) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.WARN, str);\r\n\t\tconsole.warn(CliForeground.YELLOW + str + CliEffects.CLEAR);\r\n\t}\r\n\r\n\terror(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.ERROR) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.ERROR, str);\r\n\t\tconsole.error(CliForeground.RED + str + CliEffects.CLEAR);\r\n\t}\r\n}\r\n","export function countChars(text: string, pattern: RegExp) {\r\n\treturn text.length - text.replaceAll(pattern, '').length;\r\n}\r\n\r\nexport function createHex(length: number) {\r\n\treturn Array(length).fill(null).map(() => Math.round(Math.random() * 0xF).toString(16)).join('');\r\n}\r\n\r\n/**\r\n * String of all letters\r\n *\r\n */\r\nconst LETTER_LIST = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\r\n\r\n/**\r\n * String of all numbers\r\n *\r\n */\r\nconst NUMBER_LIST = '0123456789';\r\n\r\n/**\r\n * String of all symbols\r\n */\r\nconst SYMBOL_LIST = '~`!@#$%^&*()_-+={[}]|\\\\:;\"\\'<,>.?/';\r\n\r\n/**\r\n * String of all letters, numbers & symbols\r\n */\r\nconst CHAR_LIST = LETTER_LIST + NUMBER_LIST + SYMBOL_LIST;\r\n\r\nexport function formatPhoneNumber(number: string) {\r\n\tconst parts = /(\\+?1)?.*?(\\d{3}).*?(\\d{3}).*?(\\d{4})/g.exec(number);\r\n\tif(!parts) throw new Error(`Number cannot be parsed: ${number}`);\r\n\treturn `${parts[1] ?? ''} (${parts[2]}) ${parts[3]}-${parts[4]}`.trim();\r\n}\r\n\r\n/**\r\n * Insert a string into another string at a given position\r\n *\r\n * @example\r\n * ```\r\n * console.log(insertAt('Hello world!', ' glorious', 5);\r\n * // Output: Hello glorious world!\r\n * ```\r\n *\r\n * @param {string} target - Parent string you want to modify\r\n * @param {string} str - Value that will be injected to parent\r\n * @param {number} index - Position to inject string at\r\n * @returns {string} - New string\r\n */\r\nexport function insertAt(target: string, str: string, index: number): String {\r\n\treturn `${target.slice(0, index)}${str}${target.slice(index + 1)}`;\r\n}\r\n\r\nexport function pad(text: any, length: number, char: string, start = true) {\r\n\tconst t = text.toString();\r\n\tconst l = length - t.length;\r\n\tif(l <= 0) return t;\r\n\tconst padding = Array(~~(l / char.length)).fill(char).join('');\r\n\treturn start ? padding + t : t + padding;\r\n}\r\n\r\n/**\r\n * Generate a string of random characters.\r\n *\r\n * @example\r\n * ```ts\r\n * const random = randomString();\r\n * const randomByte = randomString(8, \"01\")\r\n * ```\r\n *\r\n * @param {number} length - length of generated string\r\n * @param {string} pool - character pool to generate string from\r\n * @return {string} generated string\r\n */\r\nexport function randomString(length: number, pool: string = CHAR_LIST): string {\r\n\treturn Array(length).fill(null).map(() => {\r\n\t\tconst n = ~~(Math.random() * pool.length);\r\n\t\treturn pool[n];\r\n\t}).join('');\r\n}\r\n\r\n/**\r\n * Generate a random string with fine control over letters, numbers & symbols\r\n *\r\n * @example\r\n * ```ts\r\n * const randomLetter = randomString(1, true);\r\n * const randomChar = randomString(1, true, true, true);\r\n * ```\r\n *\r\n * @param {number} length - length of generated string\r\n * @param {boolean} letters - Add letters to pool\r\n * @param {boolean} numbers - Add numbers to pool\r\n * @param {boolean} symbols - Add symbols to pool\r\n * @return {string} generated string\r\n */\r\nexport function randomStringBuilder(length: number, letters = false, numbers = false, symbols = false): string {\r\n\tif(!letters && !numbers && !symbols) throw new Error('Must enable at least one: letters, numbers, symbols');\r\n\treturn Array(length).fill(null).map(() => {\r\n\t\tlet c;\r\n\t\tdo {\r\n\t\t\tconst type = ~~(Math.random() * 3);\r\n\t\t\tif(letters && type == 0) {\r\n\t\t\t\tc = LETTER_LIST[~~(Math.random() * LETTER_LIST.length)];\r\n\t\t\t} else if(numbers && type == 1) {\r\n\t\t\t\tc = NUMBER_LIST[~~(Math.random() * NUMBER_LIST.length)];\r\n\t\t\t} else if(symbols && type == 2) {\r\n\t\t\t\tc = SYMBOL_LIST[~~(Math.random() * SYMBOL_LIST.length)];\r\n\t\t\t}\r\n\t\t} while(!c);\r\n\t\treturn c;\r\n\t}).join('');\r\n}\r\n\r\n/**\r\n * Find all substrings that match a given pattern.\r\n *\r\n * Roughly based on `String.prototype.matchAll`.\r\n *\r\n * @param {string} value - String to search.\r\n * @param {RegExp | string} regex - Regular expression to match.\r\n * @return {RegExpExecArray[]} Found matches.\r\n */\r\nexport function matchAll(value: string, regex: RegExp | string): RegExpExecArray[] {\r\n\tif(typeof regex === 'string') {\r\n\t\tregex = new RegExp(regex, 'g');\r\n\t}\r\n\r\n\t// https://stackoverflow.com/a/60290199\r\n\tif(!regex.global) {\r\n\t\tthrow new TypeError('Regular expression must be global.');\r\n\t}\r\n\r\n\tlet ret: RegExpExecArray[] = [];\r\n\tlet match: RegExpExecArray | null;\r\n\twhile((match = regex.exec(value)) !== null) {\r\n\t\tret.push(match);\r\n\t}\r\n\r\n\treturn ret;\r\n}\r\n\r\n/**\r\n * Create MD5 hash using native javascript\r\n * @param d String to hash\r\n * @returns {string} Hashed string\r\n */\r\nexport function md5(d: string) {\r\n\tvar r = M(V(Y(X(d),8*d.length)));return r.toLowerCase()};\r\n\tfunction M(d:any){for(var _,m=\"0123456789ABCDEF\",f=\"\",r=0;r<d.length;r++)_=d.charCodeAt(r),f+=m.charAt(_>>>4&15)+m.charAt(15&_);return f}\r\n\tfunction X(d:any){for(var _=Array(d.length>>2),m=0;m<_.length;m++)_[m]=0;for(m=0;m<8*d.length;m+=8)_[m>>5]|=(255&d.charCodeAt(m/8))<<m%32;return _}\r\n\tfunction V(d:any){for(var _=\"\",m=0;m<32*d.length;m+=8)_+=String.fromCharCode(d[m>>5]>>>m%32&255);return _}\r\n\tfunction Y(d:any,_:any){d[_>>5]|=128<<_%32,d[14+(_+64>>>9<<4)]=_;for(var m=1732584193,f=-271733879,r=-1732584194,i=271733878,n=0;n<d.length;n+=16){var h=m,t=f,g=r,e=i;f=md5_ii(f=md5_ii(f=md5_ii(f=md5_ii(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_ff(f=md5_ff(f=md5_ff(f=md5_ff(f,r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+0],7,-680876936),f,r,d[n+1],12,-389564586),m,f,d[n+2],17,606105819),i,m,d[n+3],22,-1044525330),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+4],7,-176418897),f,r,d[n+5],12,1200080426),m,f,d[n+6],17,-1473231341),i,m,d[n+7],22,-45705983),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+8],7,1770035416),f,r,d[n+9],12,-1958414417),m,f,d[n+10],17,-42063),i,m,d[n+11],22,-1990404162),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+12],7,1804603682),f,r,d[n+13],12,-40341101),m,f,d[n+14],17,-1502002290),i,m,d[n+15],22,1236535329),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+1],5,-165796510),f,r,d[n+6],9,-1069501632),m,f,d[n+11],14,643717713),i,m,d[n+0],20,-373897302),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+5],5,-701558691),f,r,d[n+10],9,38016083),m,f,d[n+15],14,-660478335),i,m,d[n+4],20,-405537848),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+9],5,568446438),f,r,d[n+14],9,-1019803690),m,f,d[n+3],14,-187363961),i,m,d[n+8],20,1163531501),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+13],5,-1444681467),f,r,d[n+2],9,-51403784),m,f,d[n+7],14,1735328473),i,m,d[n+12],20,-1926607734),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+5],4,-378558),f,r,d[n+8],11,-2022574463),m,f,d[n+11],16,1839030562),i,m,d[n+14],23,-35309556),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+1],4,-1530992060),f,r,d[n+4],11,1272893353),m,f,d[n+7],16,-155497632),i,m,d[n+10],23,-1094730640),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+13],4,681279174),f,r,d[n+0],11,-358537222),m,f,d[n+3],16,-722521979),i,m,d[n+6],23,76029189),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+9],4,-640364487),f,r,d[n+12],11,-421815835),m,f,d[n+15],16,530742520),i,m,d[n+2],23,-995338651),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+0],6,-198630844),f,r,d[n+7],10,1126891415),m,f,d[n+14],15,-1416354905),i,m,d[n+5],21,-57434055),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+12],6,1700485571),f,r,d[n+3],10,-1894986606),m,f,d[n+10],15,-1051523),i,m,d[n+1],21,-2054922799),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+8],6,1873313359),f,r,d[n+15],10,-30611744),m,f,d[n+6],15,-1560198380),i,m,d[n+13],21,1309151649),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+4],6,-145523070),f,r,d[n+11],10,-1120210379),m,f,d[n+2],15,718787259),i,m,d[n+9],21,-343485551),m=safe_add(m,h),f=safe_add(f,t),r=safe_add(r,g),i=safe_add(i,e)}return Array(m,f,r,i)}\r\n\tfunction md5_cmn(d:any,_:any,m:any,f:any,r:any,i:any){return safe_add(bit_rol(safe_add(safe_add(_,d),safe_add(f,i)),r),m)}\r\n\tfunction md5_ff(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(_&m|~_&f,d,_,r,i,n)}\r\n\tfunction md5_gg(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(_&f|m&~f,d,_,r,i,n)}\r\n\tfunction md5_hh(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(_^m^f,d,_,r,i,n)}\r\n\tfunction md5_ii(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(m^(_|~f),d,_,r,i,n)}\r\n\tfunction safe_add(d:any,_:any){var m=(65535&d)+(65535&_);return(d>>16)+(_>>16)+(m>>16)<<16|65535&m}\r\n\tfunction bit_rol(d:any,_:any){return d<<_|d>>>32-_\r\n}\r\n\r\n/**\r\n * Check if email is valid\r\n *\r\n * @param {string} email - Target\r\n * @returns {boolean} - Follows format\r\n */\r\nexport function validateEmail(email: string) {\r\n\treturn /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/.test(email);\r\n}\r\n","import {md5} from './string';\r\n\r\n/**\r\n * Convert data into a form encoded format.\r\n *\r\n * @param {any} data - data to convert\r\n * @returns {string} - Ecodeded form data\r\n */\r\nexport function formEncode(data: any): string {\r\n\treturn Object.entries(data).map(([key, value]) =>\r\n\t\tencodeURIComponent(key) + '=' + encodeURIComponent(<any>value)\r\n\t).join('&');\r\n}\r\n\r\n/**\r\n * Get profile image from Gravatar\r\n *\r\n * @param {string} email Account email address\r\n * @param {string} def Default image, can be a link or '404', see: https://docs.gravatar.com/general/images/\r\n * @returns {string} Gravatar URL\r\n */\r\nexport function gravatar(email: string, def='mp') {\r\n\tif(!email) return '';\r\n\treturn `https://www.gravatar.com/avatar/${md5(email)}?d=${def}`;\r\n}\r\n\r\n/** Parts of a URL */\r\nexport type ParsedUrl = {\r\n\tprotocol?: string,\r\n\tsubdomain?: string,\r\n\tdomain: string,\r\n\thost: string,\r\n\tport?: number,\r\n\tpath?: string,\r\n\tquery?: {[name: string]: string}\r\n\tfragment?: string\r\n}\r\n\r\n/**\r\n *\r\n * @param {string} url\r\n * @returns {RegExpExecArray}\r\n */\r\nexport function urlParser(url: string): ParsedUrl {\r\n\tconst processed = new RegExp(\r\n\t\t'(?:(?<protocol>[\\\\w\\\\d]+)\\\\:\\\\/\\\\/)?(?:(?<user>.+)\\\\@)?(?<host>(?<domain>[^:\\\\/\\\\?#@\\\\n]+)(?:\\\\:(?<port>\\\\d*))?)(?<path>\\\\/.*?)?(?:\\\\?(?<query>.*?))?(?:#(?<fragment>.*?))?$',\r\n\t\t'gm').exec(url);\r\n\tconst groups: ParsedUrl = <any>processed?.groups ?? {};\r\n\tconst domains = groups.domain.split('.');\r\n\tif(groups['port'] != null) groups.port = Number(groups.port);\r\n\tif(domains.length > 2) {\r\n\t\tgroups.domain = domains.splice(-2, 2).join('.');\r\n\t\tgroups.subdomain = domains.join('.');\r\n\t}\r\n\tif(groups.query) {\r\n\t\tconst split = (<any>groups.query).split('&'), query: any = {};\r\n\t\tsplit.forEach((q: any) => {\r\n\t\t\tconst [key, val] = q.split('=');\r\n\t\t\tquery[key] = val;\r\n\t\t});\r\n\t\tgroups.query = query;\r\n\t}\r\n\treturn groups;\r\n}\r\n","/**\r\n * Calculate the number of milliseconds until date/time\r\n *\r\n * @param {Date | number} date - Target\r\n * @returns {number} - Number of milliseconds until target\r\n */\r\nexport function timeUntil(date: Date | number): number {\r\n\treturn (date instanceof Date ? date.getTime() : date) - (new Date()).getTime();\r\n}\r\n\r\n/**\r\n * Use in conjunction with `await` to pause an async script\r\n *\r\n * @example\r\n * ```ts\r\n * async () => {\r\n * ...\r\n * await sleep(1000) // Pause for 1 second\r\n *\t ...\r\n * }\r\n * ```\r\n *\r\n * @param {number} ms - Time to pause for in milliseconds\r\n * @returns {Promise<unknown>} - Resolves promise when it's time to resume\r\n */\r\nexport function sleep(ms: number) {\r\n\treturn new Promise(res => setTimeout(res, ms));\r\n}\r\n\r\nexport function formatDate(date: Date | number | string) {\r\n\tconst d = date instanceof Date ? date : new Date(date);\r\n\treturn new Intl.DateTimeFormat(\"en-us\", {\r\n\t\tweekday: \"long\",\r\n\t\tmonth: \"short\",\r\n\t\tday: \"numeric\",\r\n\t\thour: \"numeric\",\r\n\t\tminute: \"numeric\",\r\n\t\thour12: true\r\n\t}).format(d);\r\n}\r\n"],"names":["clean","obj","undefinedOnly","o","key","value","deepCopy","dotNotation","prop","set","arr","flattenObj","parent","result","propName","includes","target","values","allowMissing","e","type","isEqual","a","b","ta","tb","mixin","constructors","c","name","addUnique","array","el","arrayDiff","makeUnique","v1","v2","caseInsensitiveSort","aVal","bVal","flattenArr","sortByProp","reverse","findByProp","v","i","n","makeArray","TypedEmitter","__publicField","event","args","l","listener","_a","res","unsubscribe","_XHR","opts","fn","url","headers","_b","resp","err","XHR","next","BadRequestError","UnauthorizedError","ForbiddenError","NotFoundError","InternalServerError","CustomError","message","code","newErr","CliEffects","CliForeground","CliBackground","LOG_LEVEL","_Logger","namespace","text","length","char","end","t","padding","now","str","Logger","countChars","pattern","createHex","LETTER_LIST","NUMBER_LIST","SYMBOL_LIST","CHAR_LIST","formatPhoneNumber","number","parts","insertAt","index","pad","start","randomString","pool","randomStringBuilder","letters","numbers","symbols","matchAll","regex","ret","match","md5","d","r","M","V","Y","X","_","m","f","h","g","md5_ii","md5_hh","md5_gg","md5_ff","safe_add","md5_cmn","bit_rol","validateEmail","email","formEncode","data","gravatar","def","urlParser","processed","groups","domains","split","query","q","val","timeUntil","date","sleep","ms","formatDate"],"mappings":"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"}
1
+ {"version":3,"file":"utils.cjs","sources":["../src/objects.ts","../src/array.ts","../src/emitter.ts","../src/xhr.ts","../src/errors.ts","../src/logger.ts","../src/string.ts","../src/misc.ts","../src/time.ts"],"sourcesContent":["/**\r\n * Removes any null values from an object in-place\r\n *\r\n * @example\r\n * ```ts\r\n * let test = {a: 0, b: false, c: null, d: 'abc'}\r\n * console.log(clean(test)); // Output: {a: 0, b: false, d: 'abc'}\r\n * ```\r\n *\r\n * @param {T} obj Object reference that will be cleaned\r\n * @param undefinedOnly Ignore null values\r\n * @returns {Partial<T>} Cleaned object\r\n */\r\nexport function clean<T>(obj: T, undefinedOnly = false): Partial<T> {\r\n\tif(obj == null) throw new Error(\"Cannot clean a NULL value\");\r\n\tif(Array.isArray(obj)) {\r\n\t\tobj = <any>obj.filter(o => o != null);\r\n\t} else {\r\n\t\tObject.entries(obj).forEach(([key, value]) => {\r\n\t\t\tif((undefinedOnly && value === undefined) || (!undefinedOnly && value == null)) delete (<any>obj)[key];\r\n\t\t});\r\n\t}\r\n\treturn <any>obj;\r\n}\r\n\r\n/**\r\n * Create a deep copy of an object (vs. a shallow copy of references)\r\n *\r\n * Should be replaced by `structuredClone` once released.\r\n *\r\n * @param {T} value Object to copy\r\n * @returns {T} Type\r\n */\r\nexport function deepCopy<T>(value: T): T {\r\n\treturn JSON.parse(JSON.stringify(value));\r\n}\r\n\r\n/**\r\n * Get/set a property of an object using dot notation\r\n *\r\n * @example\r\n * ```ts\r\n * // Get a value\r\n * const name = dotNotation<string>(person, 'firstName');\r\n * const familyCarMake = dotNotation(family, 'cars[0].make');\r\n * // Set a value\r\n * dotNotation(family, 'cars[0].make', 'toyota');\r\n * ```\r\n *\r\n * @type T Return type\r\n * @param {Object} obj source object to search\r\n * @param {string} prop property name (Dot notation & indexing allowed)\r\n * @param {any} set Set object property to value, omit to fetch value instead\r\n * @return {T} property value\r\n */\r\nexport function dotNotation<T>(obj: any, prop: string, set: T): T;\r\nexport function dotNotation<T>(obj: any, prop: string): T | undefined;\r\nexport function dotNotation<T>(obj: any, prop: string, set?: T): T | undefined {\r\n\tif(obj == null || !prop) return undefined;\r\n\t// Split property string by '.' or [index]\r\n\treturn <T>prop.split(/[.[\\]]/g).filter(prop => prop.length).reduce((obj, prop, i, arr) => {\r\n\t\tif(prop[0] == '\"' || prop[0] == \"'\") prop = prop.slice(1, -1); // Take quotes out\r\n\t\tif(!obj?.hasOwnProperty(prop)) {\r\n\t\t\tif(set == undefined) return undefined;\r\n\t\t\tobj[prop] = {};\r\n\t\t}\r\n\t\tif(set !== undefined && i == arr.length - 1)\r\n\t\t\treturn obj[prop] = set;\r\n\t\treturn obj[prop];\r\n\t}, obj);\r\n}\r\n\r\n/**\r\n * Recursively flatten a nested object, while maintaining key structure.\r\n *\r\n * @example\r\n * ```ts\r\n * const car = {honda: {model: \"Civic\"}};\r\n * console.log(flattenObj(car)); //Output {honda.model: \"Civic\"}\r\n * ```\r\n *\r\n * @param obj - Object to flatten\r\n * @param parent - Recursively check if key is a parent key or not\r\n * @param result - Result\r\n * @returns {object} - Flattened object\r\n */\r\nexport function flattenObj(obj: any, parent?: any, result: any = {}) {\r\n\tif(typeof obj === \"object\" && !Array.isArray(obj)) {\r\n\t\tfor(const key of Object.keys(obj)) {\r\n\t\t\tconst propName = parent ? parent + '.' + key : key;\r\n\t\t\tif(typeof obj[key] === 'object') {\r\n\t\t\t\tflattenObj(obj[key], propName, result);\r\n\t\t\t} else {\r\n\t\t\t\tresult[propName] = obj[key];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn result;\r\n\t}\r\n}\r\n\r\n/**\r\n * Check that an object has the following values\r\n *\r\n * @example\r\n * ```ts\r\n * const test = {a: 2, b: 2};\r\n * includes(test, {a: 1}); // true\r\n * includes(test, {b: 1, c: 3}); // false\r\n * ```\r\n *\r\n * @param target Object to search\r\n * @param values Criteria to check against\r\n * @param allowMissing Only check the keys that are available on the target\r\n * @returns {boolean} Does target include all the values\r\n */\r\nexport function includes(target: any, values: any, allowMissing = false): boolean {\r\n\tif(target == undefined) return allowMissing;\r\n\tif(Array.isArray(values)) return values.findIndex((e: any, i: number) => !includes(target[i], values[i], allowMissing)) == -1;\r\n\tconst type = typeof values;\r\n\tif(type != typeof target) return false;\r\n\tif(type == 'object') {\r\n\t\treturn Object.keys(values).find(key => !includes(target[key], values[key], allowMissing)) == null;\r\n\t}\r\n\tif(type == 'function') return target.toString() == values.toString();\r\n\treturn target == values;\r\n}\r\n\r\n/**\r\n * Deep check if two objects are equal\r\n *\r\n * @param {any} a - first item to compare\r\n * @param {any} b - second item to compare\r\n * @returns {boolean} True if they match\r\n */\r\nexport function isEqual(a: any, b: any): boolean {\r\n\tconst ta = typeof a, tb = typeof b;\r\n\tif((ta != 'object' || a == null) || (tb != 'object' || b == null))\r\n\t\treturn ta == 'function' && tb == 'function' ? a.toString() == b.toString() : a === b;\r\n\tconst keys = Object.keys(a);\r\n\tif(keys.length != Object.keys(b).length) return false;\r\n\treturn Object.keys(a).every(key => isEqual(a[key], b[key]));\r\n}\r\n\r\nexport function mixin(target: any, constructors: any[]) {\r\n\tconstructors.forEach(c => {\r\n\t\tObject.getOwnPropertyNames(c.prototype).forEach((name) => {\r\n\t\t\tObject.defineProperty(\r\n\t\t\t\ttarget.prototype,\r\n\t\t\t\tname,\r\n\t\t\t\tObject.getOwnPropertyDescriptor(c.prototype, name) ||\r\n\t\t\t\tObject.create(null)\r\n\t\t\t);\r\n\t\t});\r\n\t});\r\n}\r\n","import {dotNotation, isEqual} from './objects';\n\nexport function addUnique<T>(array: T[], el: T): T[] {\n\tif(array.indexOf(el) === -1) array.push(el);\n\treturn array;\n}\n\nexport function arrayDiff(a: any[], b: any[]): any[] {\n\treturn makeUnique([\n\t\t...a.filter(v1 => !b.includes((v2: any) => isEqual(v1, v2))),\n\t\t...b.filter(v1 => !a.includes((v2: any) => isEqual(v1, v2))),\n\t]);\n}\n\n/**\n * Provides a shorthand for sorting arrays of complex objects by a string property\n *\n * @example\n * ```ts\n * let arr = [{a: 'Apple', b: 123}, {a: 'Carrot', b: 789}, {a: 'banana', b: 456}];\n * arr.sort(caseInsensitiveSort('a'));\n * ```\n *\n * @param {string} prop - Name of property to use, supports dot notation\n * @returns {(a, b) => (number)} - Function to handle sort (Meant to be passed to Array.prototype.sort or used in sortFn)\n */\nexport function caseInsensitiveSort(prop: string) {\n\treturn function (a: any, b: any) {\n\t\tconst aVal = dotNotation<string>(a, prop);\n\t\tconst bVal = dotNotation<string>(b, prop);\n\t\tif(typeof aVal !== 'string' || typeof bVal !== 'string') return 1;\n\t\treturn aVal.toLowerCase().localeCompare(bVal.toLowerCase());\n\t};\n}\n\n/**\n * Recursively flatten nested arrays\n *\n * @example\n * ```ts\n * const arr = [\n * {label: null, url: '/'},\n * {label: 'Model Admin', url: '/model-admin'},\n * [\n * {label: 'Elements', url: '/model-admin/elements'},\n * {label: 'Example', url: null}\n * ]\n * ];\n *\n * console.log(flattenArr(arr));\n * // Output:\n * [\n * {label: null, url: '/'},\n * {label: 'Model Admin', url: '/model-admin'},\n * {label: 'Elements', url: '/model-admin/elements'},\n * {label: 'Example', url: null}\n * ]\n * ```\n *\n * @param {any[]} arr - n-dimensional array\n * @param {any[]} result - Internal use only -- Keeps track of recursion\n * @returns {any[]} - Flattened array\n */\nexport function flattenArr(arr: any[], result: any[] = []): any[] {\n\tarr.forEach(el => Array.isArray(el) ? flattenArr(el, result) : result.push(el));\n\treturn result;\n}\n\n/**\n * Provides a shorthand for sorting arrays of complex objects\n *\n * @example\n * ```ts\n * let arr = [{a: {b: 2}}, {a: {b: 3}}, {a: {b: 1}}];\n * arr.sort(sortByProp('a.b'));\n * ```\n *\n * @param {string} prop - Name of property to use, supports dot notation\n * @param {boolean} reverse - Reverse the order of the sort\n * @returns {(a, b) => (number)} - Function to handle sort (Meant to be passed to Array.prototype.sort)\n */\nexport function sortByProp(prop: string, reverse = false) {\n\treturn function (a: any, b: any) {\n\t\tconst aVal = dotNotation<any>(a, prop);\n\t\tconst bVal = dotNotation<any>(b, prop);\n\t\tif(typeof aVal == 'number' && typeof bVal == 'number')\n\t\t\treturn (reverse ? -1 : 1) * (aVal - bVal);\n\t\tif(aVal > bVal) return reverse ? -1 : 1;\n\t\tif(aVal < bVal) return reverse ? 1 : -1;\n\t\treturn 0;\n\t};\n}\n\nexport function findByProp(prop: string, value: any) {\n\treturn (v: any) => isEqual(v[prop], value);\n}\n\nexport function makeUnique(arr: any[]) {\n\tfor(let i = arr.length - 1; i >= 0; i--) {\n\t\tif(arr.slice(0, i).find(n => isEqual(n, arr[i]))) arr.splice(i, 1);\n\t}\n\treturn arr;\n}\n\n/**\n * Make sure value is an array, if it isn't wrap it in one.\n * @param {T[] | T} value Value that should be an array\n * @returns {T[]} Value in an array\n */\nexport function makeArray<T>(value: T | T[]): T[] {\n\treturn Array.isArray(value) ? value : [value];\n}\n","export type Listener = (...args: any[]) => any;\r\nexport type TypedEvents = {[k in string | symbol]: Listener} & {'*': (event: string, ...args: any[]) => any};\r\n\r\nexport class TypedEmitter<T extends TypedEvents = TypedEvents> {\r\n\tprivate static listeners: {[key: string]: Listener[]} = {};\r\n\r\n\tprivate listeners: { [key in keyof T]?: Listener[] } = {};\r\n\r\n\tstatic emit(event: any, ...args: any[]) {\r\n\t\t(this.listeners['*'] || []).forEach(l => l(event, ...args));\r\n\t\t(this.listeners[event.toString()] || []).forEach(l => l(...args));\r\n\t};\r\n\r\n\tstatic off(event: any, listener: Listener) {\r\n\t\tconst e = event.toString();\r\n\t\tthis.listeners[e] = (this.listeners[e] || []).filter(l => l === listener);\r\n\t}\r\n\r\n\tstatic on(event: any, listener: Listener) {\r\n\t\tconst e = event.toString();\r\n\t\tif(!this.listeners[e]) this.listeners[e] = [];\r\n\t\tthis.listeners[e]?.push(listener);\r\n\t\treturn () => this.off(event, listener);\r\n\t}\r\n\r\n\tstatic once(event: any, listener?: Listener): Promise<any> {\r\n\t\treturn new Promise(res => {\r\n\t\t\tconst unsubscribe = this.on(event, <any>((...args: any) => {\r\n\t\t\t\tres(args.length == 1 ? args[0] : args);\r\n\t\t\t\tif(listener) listener(...args);\r\n\t\t\t\tunsubscribe();\r\n\t\t\t}));\r\n\t\t});\r\n\t}\r\n\r\n\temit<K extends keyof T>(event: K, ...args: Parameters<T[K]>) {\r\n\t\t(this.listeners['*'] || []).forEach(l => l(event, ...args));\r\n\t\t(this.listeners[event] || []).forEach(l => l(...args));\r\n\t};\r\n\r\n\toff<K extends keyof T = string>(event: K, listener: T[K]) {\r\n\t\tthis.listeners[event] = (this.listeners[event] || []).filter(l => l === listener);\r\n\t}\r\n\r\n\ton<K extends keyof T = string>(event: K, listener: T[K]) {\r\n\t\tif(!this.listeners[event]) this.listeners[event] = [];\r\n\t\tthis.listeners[event]?.push(listener);\r\n\t\treturn () => this.off(event, listener);\r\n\t}\r\n\r\n\tonce<K extends keyof T = string>(event: K, listener?: T[K]): Promise<any> {\r\n\t\treturn new Promise(res => {\r\n\t\t\tconst unsubscribe = this.on(event, <any>((...args: any) => {\r\n\t\t\t\tres(args.length == 1 ? args[0] : args);\r\n\t\t\t\tif(listener) listener(...args);\r\n\t\t\t\tunsubscribe();\r\n\t\t\t}));\r\n\t\t});\r\n\t}\r\n}\r\n","import {clean} from './objects';\r\n\r\nexport type Interceptor = (request: Response, next: () => void) => void;\r\n\r\nexport type RequestOptions = {\r\n\turl?: string;\r\n\tmethod?: 'GET' | 'POST' | 'PATCH' | 'DELETE';\r\n\tbody?: any;\r\n\theaders?: {[key: string | symbol]: string | null | undefined};\r\n\t[key: string]: any;\r\n}\r\n\r\nexport type XhrOptions = {\r\n\theaders?: {[key: string | symbol]: string | null | undefined};\r\n\tinterceptors?: Interceptor[];\r\n\turl?: string;\r\n}\r\n\r\nexport class XHR {\r\n\tprivate static interceptors: {[key: string]: Interceptor} = {};\r\n\r\n\tstatic headers: {[key: string]: string | null | undefined} = {};\r\n\r\n\tprivate interceptors: {[key: string]: Interceptor} = {}\r\n\r\n\theaders: {[key: string]: string | null | undefined} = {}\r\n\r\n\tconstructor(public readonly opts: XhrOptions = {}) {\r\n\t\tthis.headers = opts.headers || {};\r\n\t\tif(opts.interceptors) {\r\n\t\t\topts.interceptors.forEach(i => XHR.addInterceptor(i));\r\n\t\t}\r\n\t}\r\n\r\n\tstatic addInterceptor(fn: Interceptor): () => void {\r\n\t\tconst key = Object.keys(XHR.interceptors).length.toString();\r\n\t\tXHR.interceptors[key] = fn;\r\n\t\treturn () => { XHR.interceptors[key] = <any>null; }\r\n\t}\r\n\r\n\taddInterceptor(fn: Interceptor): () => void {\r\n\t\tconst key = Object.keys(this.interceptors).length.toString();\r\n\t\tthis.interceptors[key] = fn;\r\n\t\treturn () => { this.interceptors[key] = <any>null; }\r\n\t}\r\n\r\n\tasync request<T>(opts: RequestOptions = {}): Promise<T> {\r\n\t\tif(!this.opts.url && !opts.url) throw new Error('URL needs to be set');\r\n\t\tconst url = (opts.url?.startsWith('http') ? opts.url : (this.opts.url || '') + opts.url).replace(/([^:]\\/)\\/+/g, '$1');\r\n\r\n\t\t// Prep headers\r\n\t\tconst headers = <any>clean({\r\n\t\t\t'Content-Type': (opts.body && !(opts.body instanceof FormData)) ? 'application/json' : undefined,\r\n\t\t\t...XHR.headers,\r\n\t\t\t...this.headers,\r\n\t\t\t...opts.headers\r\n\t\t});\r\n\r\n\t\t// Send request\r\n\t\treturn fetch(url, {\r\n\t\t\theaders,\r\n\t\t\tmethod: opts.method || (opts.body ? 'POST' : 'GET'),\r\n\t\t\tbody: (headers['Content-Type']?.startsWith('application/json') && opts.body) ? JSON.stringify(opts.body) : opts.body\r\n\t\t}).then(async resp => {\r\n\t\t\tfor(let fn of [...Object.values(XHR.interceptors), ...Object.values(this.interceptors)]) {\r\n\t\t\t\tawait new Promise<void>(res => fn(resp, () => res()));\r\n\t\t\t}\r\n\r\n\t\t\tif(!resp.ok) throw Error(resp.statusText);\r\n\t\t\tif(resp.headers.get('Content-Type')?.startsWith('application/json')) return await resp.json();\r\n\t\t\tif(resp.headers.get('Content-Type')?.startsWith('text/plain')) return await <any>resp.text();\r\n\t\t\treturn resp;\r\n\t\t});\r\n\t}\r\n}\r\n","import {XHR} from './xhr';\r\n\r\nXHR.addInterceptor((resp: Response, next: () => void) => {\r\n\tif(resp.status == 200) return next();\r\n\tif(resp.status == 400) throw new BadRequestError(resp.statusText);\r\n\tif(resp.status == 401) throw new UnauthorizedError(resp.statusText);\r\n\tif(resp.status == 403) throw new ForbiddenError(resp.statusText);\r\n\tif(resp.status == 404) throw new NotFoundError(resp.statusText);\r\n\tif(resp.status == 500) throw new InternalServerError(resp.statusText);\r\n\tthrow new CustomError(resp.statusText, resp.status);\r\n});\r\n\r\nexport class CustomError extends Error {\r\n\tstatic code = 500;\r\n\r\n\tprivate _code?: number;\r\n\tget code(): number { return this._code || (<any>this).constructor.code; }\r\n\tset code(c: number) { this._code = c; }\r\n\r\n\tconstructor(message?: string, code?: number) {\r\n\t\tsuper(message);\r\n\t\tif(code != null) this._code = code;\r\n\t}\r\n\r\n\tstatic from(err: Error): CustomError {\r\n\t\tconst code = Number((<any>err).statusCode) ?? Number((<any>err).code);\r\n\t\tconst newErr = new this(err.message || err.toString());\r\n\t\treturn Object.assign(newErr, {\r\n\t\t\tstack: err.stack,\r\n\t\t\t...err,\r\n\t\t\tcode: code ?? undefined\r\n\t\t});\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code != undefined;\r\n\t}\r\n\r\n\ttoString() {\r\n\t\treturn this.message || super.toString();\r\n\t}\r\n}\r\n\r\nexport class BadRequestError extends CustomError {\r\n\tstatic code = 400;\r\n\r\n\tconstructor(message: string = 'Bad Request') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class UnauthorizedError extends CustomError {\r\n\tstatic code = 401;\r\n\r\n\tconstructor(message: string = 'Unauthorized') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class ForbiddenError extends CustomError {\r\n\tstatic code = 403;\r\n\r\n\tconstructor(message: string = 'Forbidden') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class NotFoundError extends CustomError {\r\n\tstatic code = 404;\r\n\r\n\tconstructor(message: string = 'Not Found') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class InternalServerError extends CustomError {\r\n\tstatic code = 500;\r\n\r\n\tconstructor(message: string = 'Internal Server Error') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n","import {TypedEmitter, TypedEvents} from './emitter';\r\n\r\nexport const CliEffects = {\r\n\tCLEAR: \"\\x1b[0m\",\r\n\tBRIGHT: \"\\x1b[1m\",\r\n\tDIM: \"\\x1b[2m\",\r\n\tUNDERSCORE: \"\\x1b[4m\",\r\n\tBLINK: \"\\x1b[5m\",\r\n\tREVERSE: \"\\x1b[7m\",\r\n\tHIDDEN: \"\\x1b[8m\",\r\n}\r\n\r\nexport const CliForeground = {\r\n\tBLACK: '\\x1b[30m',\r\n\tRED: '\\x1b[31m',\r\n\tGREEN: '\\x1b[32m',\r\n\tYELLOW: '\\x1b[33m',\r\n\tBLUE: '\\x1b[34m',\r\n\tMAGENTA: '\\x1b[35m',\r\n\tCYAN: '\\x1b[36m',\r\n\tLIGHT_GREY: '\\x1b[37m',\r\n\tGREY: '\\x1b[90m',\r\n\tLIGHT_RED: '\\x1b[91m',\r\n\tLIGHT_GREEN: '\\x1b[92m',\r\n\tLIGHT_YELLOW: '\\x1b[93m',\r\n\tLIGHT_BLUE: '\\x1b[94m',\r\n\tLIGHT_MAGENTA: '\\x1b[95m',\r\n\tLIGHT_CYAN: '\\x1b[96m',\r\n\tWHITE: '\\x1b[97m',\r\n}\r\n\r\nexport const CliBackground = {\r\n\tBLACK: \"\\x1b[40m\",\r\n\tRED: \"\\x1b[41m\",\r\n\tGREEN: \"\\x1b[42m\",\r\n\tYELLOW: \"\\x1b[43m\",\r\n\tBLUE: \"\\x1b[44m\",\r\n\tMAGENTA: \"\\x1b[45m\",\r\n\tCYAN: \"\\x1b[46m\",\r\n\tWHITE: \"\\x1b[47m\",\r\n\tGREY: \"\\x1b[100m\",\r\n}\r\n\r\nexport enum LOG_LEVEL {\r\n\tERROR = 0,\r\n\tWARN = 1,\r\n\tINFO = 2,\r\n\tLOG = 3,\r\n\tDEBUG = 4,\r\n}\r\n\r\nexport type LoggerEvents = TypedEvents & {\r\n\t'ERROR': (...args: any[]) => any;\r\n\t'WARN': (...args: any[]) => any;\r\n\t'INFO': (...args: any[]) => any;\r\n\t'LOG': (...args: any[]) => any;\r\n\t'DEBUG': (...args: any[]) => any;\r\n};\r\n\r\nexport class Logger extends TypedEmitter<LoggerEvents> {\r\n\tstatic LOG_LEVEL: LOG_LEVEL = LOG_LEVEL.DEBUG;\r\n\r\n\tconstructor(public readonly namespace?: string) {\r\n\t\tsuper();\r\n\t}\r\n\r\n\tprivate pad(text: any, length: number, char: string, end = false) {\r\n\t\tconst t = text.toString();\r\n\t\tconst l = length - t.length;\r\n\t\tif(l <= 0) return t;\r\n\t\tconst padding = Array(~~(l / char.length)).fill(char).join('');\r\n\t\treturn !end ? padding + t : t + padding;\r\n\t}\r\n\r\n\tprivate format(...text: string[]): string {\r\n\t\tconst now = new Date();\r\n\t\tconst timestamp = `${now.getFullYear()}-${now.getMonth() + 1}-${now.getDate()} ${this.pad(now.getHours().toString(), 2, '0')}:${this.pad(now.getMinutes().toString(), 2, '0')}:${this.pad(now.getSeconds().toString(), 2, '0')}.${this.pad(now.getMilliseconds().toString(), 3, '0', true)}`;\r\n\t\treturn `${timestamp}${this.namespace ? ` [${this.namespace}]` : ''} ${text.join(' ')}`;\r\n\t}\r\n\r\n\tdebug(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.DEBUG) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.DEBUG, str);\r\n\t\tconsole.debug(CliForeground.LIGHT_GREY + str + CliEffects.CLEAR);\r\n\t}\r\n\r\n\tlog(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.LOG) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.LOG, str);\r\n\t\tconsole.log(CliEffects.CLEAR + str);\r\n\t}\r\n\r\n\tinfo(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.INFO) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.INFO, str);\r\n\t\tconsole.info(CliForeground.BLUE + str + CliEffects.CLEAR);\r\n\t}\r\n\r\n\twarn(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.WARN) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.WARN, str);\r\n\t\tconsole.warn(CliForeground.YELLOW + str + CliEffects.CLEAR);\r\n\t}\r\n\r\n\terror(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.ERROR) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.ERROR, str);\r\n\t\tconsole.error(CliForeground.RED + str + CliEffects.CLEAR);\r\n\t}\r\n}\r\n","export function countChars(text: string, pattern: RegExp) {\r\n\treturn text.length - text.replaceAll(pattern, '').length;\r\n}\r\n\r\nexport function createHex(length: number) {\r\n\treturn Array(length).fill(null).map(() => Math.round(Math.random() * 0xF).toString(16)).join('');\r\n}\r\n\r\n/**\r\n * String of all letters\r\n *\r\n */\r\nconst LETTER_LIST = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\r\n\r\n/**\r\n * String of all numbers\r\n *\r\n */\r\nconst NUMBER_LIST = '0123456789';\r\n\r\n/**\r\n * String of all symbols\r\n */\r\nconst SYMBOL_LIST = '~`!@#$%^&*()_-+={[}]|\\\\:;\"\\'<,>.?/';\r\n\r\n/**\r\n * String of all letters, numbers & symbols\r\n */\r\nconst CHAR_LIST = LETTER_LIST + NUMBER_LIST + SYMBOL_LIST;\r\n\r\nexport function formatPhoneNumber(number: string) {\r\n\tconst parts = /(\\+?1)?.*?(\\d{3}).*?(\\d{3}).*?(\\d{4})/g.exec(number);\r\n\tif(!parts) throw new Error(`Number cannot be parsed: ${number}`);\r\n\treturn `${parts[1] ?? ''} (${parts[2]}) ${parts[3]}-${parts[4]}`.trim();\r\n}\r\n\r\n/**\r\n * Insert a string into another string at a given position\r\n *\r\n * @example\r\n * ```\r\n * console.log(insertAt('Hello world!', ' glorious', 5);\r\n * // Output: Hello glorious world!\r\n * ```\r\n *\r\n * @param {string} target - Parent string you want to modify\r\n * @param {string} str - Value that will be injected to parent\r\n * @param {number} index - Position to inject string at\r\n * @returns {string} - New string\r\n */\r\nexport function insertAt(target: string, str: string, index: number): String {\r\n\treturn `${target.slice(0, index)}${str}${target.slice(index + 1)}`;\r\n}\r\n\r\nexport function pad(text: any, length: number, char: string, start = true) {\r\n\tconst t = text.toString();\r\n\tconst l = length - t.length;\r\n\tif(l <= 0) return t;\r\n\tconst padding = Array(~~(l / char.length)).fill(char).join('');\r\n\treturn start ? padding + t : t + padding;\r\n}\r\n\r\n/**\r\n * Generate a string of random characters.\r\n *\r\n * @example\r\n * ```ts\r\n * const random = randomString();\r\n * const randomByte = randomString(8, \"01\")\r\n * ```\r\n *\r\n * @param {number} length - length of generated string\r\n * @param {string} pool - character pool to generate string from\r\n * @return {string} generated string\r\n */\r\nexport function randomString(length: number, pool: string = CHAR_LIST): string {\r\n\treturn Array(length).fill(null).map(() => {\r\n\t\tconst n = ~~(Math.random() * pool.length);\r\n\t\treturn pool[n];\r\n\t}).join('');\r\n}\r\n\r\n/**\r\n * Generate a random string with fine control over letters, numbers & symbols\r\n *\r\n * @example\r\n * ```ts\r\n * const randomLetter = randomString(1, true);\r\n * const randomChar = randomString(1, true, true, true);\r\n * ```\r\n *\r\n * @param {number} length - length of generated string\r\n * @param {boolean} letters - Add letters to pool\r\n * @param {boolean} numbers - Add numbers to pool\r\n * @param {boolean} symbols - Add symbols to pool\r\n * @return {string} generated string\r\n */\r\nexport function randomStringBuilder(length: number, letters = false, numbers = false, symbols = false): string {\r\n\tif(!letters && !numbers && !symbols) throw new Error('Must enable at least one: letters, numbers, symbols');\r\n\treturn Array(length).fill(null).map(() => {\r\n\t\tlet c;\r\n\t\tdo {\r\n\t\t\tconst type = ~~(Math.random() * 3);\r\n\t\t\tif(letters && type == 0) {\r\n\t\t\t\tc = LETTER_LIST[~~(Math.random() * LETTER_LIST.length)];\r\n\t\t\t} else if(numbers && type == 1) {\r\n\t\t\t\tc = NUMBER_LIST[~~(Math.random() * NUMBER_LIST.length)];\r\n\t\t\t} else if(symbols && type == 2) {\r\n\t\t\t\tc = SYMBOL_LIST[~~(Math.random() * SYMBOL_LIST.length)];\r\n\t\t\t}\r\n\t\t} while(!c);\r\n\t\treturn c;\r\n\t}).join('');\r\n}\r\n\r\n/**\r\n * Find all substrings that match a given pattern.\r\n *\r\n * Roughly based on `String.prototype.matchAll`.\r\n *\r\n * @param {string} value - String to search.\r\n * @param {RegExp | string} regex - Regular expression to match.\r\n * @return {RegExpExecArray[]} Found matches.\r\n */\r\nexport function matchAll(value: string, regex: RegExp | string): RegExpExecArray[] {\r\n\tif(typeof regex === 'string') {\r\n\t\tregex = new RegExp(regex, 'g');\r\n\t}\r\n\r\n\t// https://stackoverflow.com/a/60290199\r\n\tif(!regex.global) {\r\n\t\tthrow new TypeError('Regular expression must be global.');\r\n\t}\r\n\r\n\tlet ret: RegExpExecArray[] = [];\r\n\tlet match: RegExpExecArray | null;\r\n\twhile((match = regex.exec(value)) !== null) {\r\n\t\tret.push(match);\r\n\t}\r\n\r\n\treturn ret;\r\n}\r\n\r\n/**\r\n * Create MD5 hash using native javascript\r\n * @param d String to hash\r\n * @returns {string} Hashed string\r\n */\r\nexport function md5(d: string) {\r\n\tvar r = M(V(Y(X(d),8*d.length)));return r.toLowerCase()};\r\n\tfunction M(d:any){for(var _,m=\"0123456789ABCDEF\",f=\"\",r=0;r<d.length;r++)_=d.charCodeAt(r),f+=m.charAt(_>>>4&15)+m.charAt(15&_);return f}\r\n\tfunction X(d:any){for(var _=Array(d.length>>2),m=0;m<_.length;m++)_[m]=0;for(m=0;m<8*d.length;m+=8)_[m>>5]|=(255&d.charCodeAt(m/8))<<m%32;return _}\r\n\tfunction V(d:any){for(var _=\"\",m=0;m<32*d.length;m+=8)_+=String.fromCharCode(d[m>>5]>>>m%32&255);return _}\r\n\tfunction Y(d:any,_:any){d[_>>5]|=128<<_%32,d[14+(_+64>>>9<<4)]=_;for(var m=1732584193,f=-271733879,r=-1732584194,i=271733878,n=0;n<d.length;n+=16){var h=m,t=f,g=r,e=i;f=md5_ii(f=md5_ii(f=md5_ii(f=md5_ii(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_ff(f=md5_ff(f=md5_ff(f=md5_ff(f,r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+0],7,-680876936),f,r,d[n+1],12,-389564586),m,f,d[n+2],17,606105819),i,m,d[n+3],22,-1044525330),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+4],7,-176418897),f,r,d[n+5],12,1200080426),m,f,d[n+6],17,-1473231341),i,m,d[n+7],22,-45705983),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+8],7,1770035416),f,r,d[n+9],12,-1958414417),m,f,d[n+10],17,-42063),i,m,d[n+11],22,-1990404162),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+12],7,1804603682),f,r,d[n+13],12,-40341101),m,f,d[n+14],17,-1502002290),i,m,d[n+15],22,1236535329),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+1],5,-165796510),f,r,d[n+6],9,-1069501632),m,f,d[n+11],14,643717713),i,m,d[n+0],20,-373897302),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+5],5,-701558691),f,r,d[n+10],9,38016083),m,f,d[n+15],14,-660478335),i,m,d[n+4],20,-405537848),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+9],5,568446438),f,r,d[n+14],9,-1019803690),m,f,d[n+3],14,-187363961),i,m,d[n+8],20,1163531501),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+13],5,-1444681467),f,r,d[n+2],9,-51403784),m,f,d[n+7],14,1735328473),i,m,d[n+12],20,-1926607734),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+5],4,-378558),f,r,d[n+8],11,-2022574463),m,f,d[n+11],16,1839030562),i,m,d[n+14],23,-35309556),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+1],4,-1530992060),f,r,d[n+4],11,1272893353),m,f,d[n+7],16,-155497632),i,m,d[n+10],23,-1094730640),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+13],4,681279174),f,r,d[n+0],11,-358537222),m,f,d[n+3],16,-722521979),i,m,d[n+6],23,76029189),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+9],4,-640364487),f,r,d[n+12],11,-421815835),m,f,d[n+15],16,530742520),i,m,d[n+2],23,-995338651),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+0],6,-198630844),f,r,d[n+7],10,1126891415),m,f,d[n+14],15,-1416354905),i,m,d[n+5],21,-57434055),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+12],6,1700485571),f,r,d[n+3],10,-1894986606),m,f,d[n+10],15,-1051523),i,m,d[n+1],21,-2054922799),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+8],6,1873313359),f,r,d[n+15],10,-30611744),m,f,d[n+6],15,-1560198380),i,m,d[n+13],21,1309151649),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+4],6,-145523070),f,r,d[n+11],10,-1120210379),m,f,d[n+2],15,718787259),i,m,d[n+9],21,-343485551),m=safe_add(m,h),f=safe_add(f,t),r=safe_add(r,g),i=safe_add(i,e)}return Array(m,f,r,i)}\r\n\tfunction md5_cmn(d:any,_:any,m:any,f:any,r:any,i:any){return safe_add(bit_rol(safe_add(safe_add(_,d),safe_add(f,i)),r),m)}\r\n\tfunction md5_ff(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(_&m|~_&f,d,_,r,i,n)}\r\n\tfunction md5_gg(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(_&f|m&~f,d,_,r,i,n)}\r\n\tfunction md5_hh(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(_^m^f,d,_,r,i,n)}\r\n\tfunction md5_ii(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(m^(_|~f),d,_,r,i,n)}\r\n\tfunction safe_add(d:any,_:any){var m=(65535&d)+(65535&_);return(d>>16)+(_>>16)+(m>>16)<<16|65535&m}\r\n\tfunction bit_rol(d:any,_:any){return d<<_|d>>>32-_\r\n}\r\n\r\n/**\r\n * Check if email is valid\r\n *\r\n * @param {string} email - Target\r\n * @returns {boolean} - Follows format\r\n */\r\nexport function validateEmail(email: string) {\r\n\treturn /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/.test(email);\r\n}\r\n","import {md5} from './string';\r\n\r\n/**\r\n * Convert data into a form encoded format.\r\n *\r\n * @param {any} data - data to convert\r\n * @returns {string} - Ecodeded form data\r\n */\r\nexport function formEncode(data: any): string {\r\n\treturn Object.entries(data).map(([key, value]) =>\r\n\t\tencodeURIComponent(key) + '=' + encodeURIComponent(<any>value)\r\n\t).join('&');\r\n}\r\n\r\n/**\r\n * Get profile image from Gravatar\r\n *\r\n * @param {string} email Account email address\r\n * @param {string} def Default image, can be a link or '404', see: https://docs.gravatar.com/general/images/\r\n * @returns {string} Gravatar URL\r\n */\r\nexport function gravatar(email: string, def='mp') {\r\n\tif(!email) return '';\r\n\treturn `https://www.gravatar.com/avatar/${md5(email)}?d=${def}`;\r\n}\r\n\r\n/** Parts of a URL */\r\nexport type ParsedUrl = {\r\n\tprotocol?: string,\r\n\tsubdomain?: string,\r\n\tdomain: string,\r\n\thost: string,\r\n\tport?: number,\r\n\tpath?: string,\r\n\tquery?: {[name: string]: string}\r\n\tfragment?: string\r\n}\r\n\r\n/**\r\n *\r\n * @param {string} url\r\n * @returns {RegExpExecArray}\r\n */\r\nexport function urlParser(url: string): ParsedUrl {\r\n\tconst processed = new RegExp(\r\n\t\t'(?:(?<protocol>[\\\\w\\\\d]+)\\\\:\\\\/\\\\/)?(?:(?<user>.+)\\\\@)?(?<host>(?<domain>[^:\\\\/\\\\?#@\\\\n]+)(?:\\\\:(?<port>\\\\d*))?)(?<path>\\\\/.*?)?(?:\\\\?(?<query>.*?))?(?:#(?<fragment>.*?))?$',\r\n\t\t'gm').exec(url);\r\n\tconst groups: ParsedUrl = <any>processed?.groups ?? {};\r\n\tconst domains = groups.domain.split('.');\r\n\tif(groups['port'] != null) groups.port = Number(groups.port);\r\n\tif(domains.length > 2) {\r\n\t\tgroups.domain = domains.splice(-2, 2).join('.');\r\n\t\tgroups.subdomain = domains.join('.');\r\n\t}\r\n\tif(groups.query) {\r\n\t\tconst split = (<any>groups.query).split('&'), query: any = {};\r\n\t\tsplit.forEach((q: any) => {\r\n\t\t\tconst [key, val] = q.split('=');\r\n\t\t\tquery[key] = val;\r\n\t\t});\r\n\t\tgroups.query = query;\r\n\t}\r\n\treturn groups;\r\n}\r\n","/**\r\n * Calculate the number of milliseconds until date/time\r\n *\r\n * @param {Date | number} date - Target\r\n * @returns {number} - Number of milliseconds until target\r\n */\r\nexport function timeUntil(date: Date | number): number {\r\n\treturn (date instanceof Date ? date.getTime() : date) - (new Date()).getTime();\r\n}\r\n\r\n/**\r\n * Use in conjunction with `await` to pause an async script\r\n *\r\n * @example\r\n * ```ts\r\n * async () => {\r\n * ...\r\n * await sleep(1000) // Pause for 1 second\r\n *\t ...\r\n * }\r\n * ```\r\n *\r\n * @param {number} ms - Time to pause for in milliseconds\r\n * @returns {Promise<unknown>} - Resolves promise when it's time to resume\r\n */\r\nexport function sleep(ms: number) {\r\n\treturn new Promise(res => setTimeout(res, ms));\r\n}\r\n\r\nexport function formatDate(date: Date | number | string) {\r\n\tconst d = date instanceof Date ? date : new Date(date);\r\n\treturn new Intl.DateTimeFormat(\"en-us\", {\r\n\t\tweekday: \"long\",\r\n\t\tmonth: \"short\",\r\n\t\tday: \"numeric\",\r\n\t\thour: \"numeric\",\r\n\t\tminute: \"numeric\",\r\n\t\thour12: true\r\n\t}).format(d);\r\n}\r\n"],"names":["clean","obj","undefinedOnly","o","key","value","deepCopy","dotNotation","prop","set","arr","flattenObj","parent","result","propName","includes","target","values","allowMissing","e","type","isEqual","a","b","ta","tb","mixin","constructors","c","name","addUnique","array","el","arrayDiff","makeUnique","v1","v2","caseInsensitiveSort","aVal","bVal","flattenArr","sortByProp","reverse","findByProp","v","i","n","makeArray","TypedEmitter","__publicField","event","args","l","listener","_a","res","unsubscribe","_XHR","opts","fn","url","headers","_b","resp","XHR","next","BadRequestError","UnauthorizedError","ForbiddenError","NotFoundError","InternalServerError","CustomError","message","code","err","newErr","CliEffects","CliForeground","CliBackground","LOG_LEVEL","_Logger","namespace","text","length","char","end","t","padding","now","str","Logger","countChars","pattern","createHex","LETTER_LIST","NUMBER_LIST","SYMBOL_LIST","CHAR_LIST","formatPhoneNumber","number","parts","insertAt","index","pad","start","randomString","pool","randomStringBuilder","letters","numbers","symbols","matchAll","regex","ret","match","md5","d","r","M","V","Y","X","_","m","f","h","g","md5_ii","md5_hh","md5_gg","md5_ff","safe_add","md5_cmn","bit_rol","validateEmail","email","formEncode","data","gravatar","def","urlParser","processed","groups","domains","split","query","q","val","timeUntil","date","sleep","ms","formatDate"],"mappings":"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"}
package/dist/utils.mjs CHANGED
@@ -1,17 +1,17 @@
1
- var U = Object.defineProperty;
2
- var Y = (e, n, t) => n in e ? U(e, n, { enumerable: !0, configurable: !0, writable: !0, value: t }) : e[n] = t;
3
- var f = (e, n, t) => (Y(e, typeof n != "symbol" ? n + "" : n, t), t);
4
- function P(e, n = !1) {
1
+ var M = Object.defineProperty;
2
+ var U = (e, n, t) => n in e ? M(e, n, { enumerable: !0, configurable: !0, writable: !0, value: t }) : e[n] = t;
3
+ var h = (e, n, t) => (U(e, typeof n != "symbol" ? n + "" : n, t), t);
4
+ function Y(e, n = !1) {
5
5
  if (e == null)
6
6
  throw new Error("Cannot clean a NULL value");
7
7
  return Array.isArray(e) ? e = e.filter((t) => t != null) : Object.entries(e).forEach(([t, r]) => {
8
8
  (n && r === void 0 || !n && r == null) && delete e[t];
9
9
  }), e;
10
10
  }
11
- function tt(e) {
11
+ function X(e) {
12
12
  return JSON.parse(JSON.stringify(e));
13
13
  }
14
- function m(e, n, t) {
14
+ function B(e, n, t) {
15
15
  if (!(e == null || !n))
16
16
  return n.split(/[.[\]]/g).filter((r) => r.length).reduce((r, o, s, c) => {
17
17
  if ((o[0] == '"' || o[0] == "'") && (o = o.slice(1, -1)), !(r != null && r.hasOwnProperty(o))) {
@@ -22,11 +22,11 @@ function m(e, n, t) {
22
22
  return t !== void 0 && s == c.length - 1 ? r[o] = t : r[o];
23
23
  }, e);
24
24
  }
25
- function q(e, n, t = {}) {
25
+ function P(e, n, t = {}) {
26
26
  if (typeof e == "object" && !Array.isArray(e)) {
27
27
  for (const r of Object.keys(e)) {
28
28
  const o = n ? n + "." + r : r;
29
- typeof e[r] == "object" ? q(e[r], o, t) : t[o] = e[r];
29
+ typeof e[r] == "object" ? P(e[r], o, t) : t[o] = e[r];
30
30
  }
31
31
  return t;
32
32
  }
@@ -39,11 +39,11 @@ function I(e, n, t = !1) {
39
39
  const r = typeof n;
40
40
  return r != typeof e ? !1 : r == "object" ? Object.keys(n).find((o) => !I(e[o], n[o], t)) == null : r == "function" ? e.toString() == n.toString() : e == n;
41
41
  }
42
- function x(e, n) {
42
+ function w(e, n) {
43
43
  const t = typeof e, r = typeof n;
44
- return t != "object" || e == null || r != "object" || n == null ? t == "function" && r == "function" ? e.toString() == n.toString() : e === n : Object.keys(e).length != Object.keys(n).length ? !1 : Object.keys(e).every((s) => x(e[s], n[s]));
44
+ return t != "object" || e == null || r != "object" || n == null ? t == "function" && r == "function" ? e.toString() == n.toString() : e === n : Object.keys(e).length != Object.keys(n).length ? !1 : Object.keys(e).every((s) => w(e[s], n[s]));
45
45
  }
46
- function et(e, n) {
46
+ function _(e, n) {
47
47
  n.forEach((t) => {
48
48
  Object.getOwnPropertyNames(t.prototype).forEach((r) => {
49
49
  Object.defineProperty(
@@ -54,44 +54,44 @@ function et(e, n) {
54
54
  });
55
55
  });
56
56
  }
57
- function nt(e, n) {
57
+ function tt(e, n) {
58
58
  return e.indexOf(n) === -1 && e.push(n), e;
59
59
  }
60
- function rt(e, n) {
60
+ function et(e, n) {
61
61
  return W([
62
- ...e.filter((t) => !n.includes((r) => x(t, r))),
63
- ...n.filter((t) => !e.includes((r) => x(t, r)))
62
+ ...e.filter((t) => !n.includes((r) => w(t, r))),
63
+ ...n.filter((t) => !e.includes((r) => w(t, r)))
64
64
  ]);
65
65
  }
66
- function ot(e) {
66
+ function nt(e) {
67
67
  return function(n, t) {
68
- const r = m(n, e), o = m(t, e);
68
+ const r = B(n, e), o = B(t, e);
69
69
  return typeof r != "string" || typeof o != "string" ? 1 : r.toLowerCase().localeCompare(o.toLowerCase());
70
70
  };
71
71
  }
72
72
  function H(e, n = []) {
73
73
  return e.forEach((t) => Array.isArray(t) ? H(t, n) : n.push(t)), n;
74
74
  }
75
- function st(e, n = !1) {
75
+ function rt(e, n = !1) {
76
76
  return function(t, r) {
77
- const o = m(t, e), s = m(r, e);
77
+ const o = B(t, e), s = B(r, e);
78
78
  return typeof o == "number" && typeof s == "number" ? (n ? -1 : 1) * (o - s) : o > s ? n ? -1 : 1 : o < s ? n ? 1 : -1 : 0;
79
79
  };
80
80
  }
81
- function ct(e, n) {
82
- return (t) => x(t[e], n);
81
+ function ot(e, n) {
82
+ return (t) => w(t[e], n);
83
83
  }
84
84
  function W(e) {
85
85
  for (let n = e.length - 1; n >= 0; n--)
86
- e.slice(0, n).find((t) => x(t, e[n])) && e.splice(n, 1);
86
+ e.slice(0, n).find((t) => w(t, e[n])) && e.splice(n, 1);
87
87
  return e;
88
88
  }
89
- function it(e) {
89
+ function st(e) {
90
90
  return Array.isArray(e) ? e : [e];
91
91
  }
92
92
  class b {
93
93
  constructor() {
94
- f(this, "listeners", {});
94
+ h(this, "listeners", {});
95
95
  }
96
96
  static emit(n, ...t) {
97
97
  (this.listeners["*"] || []).forEach((r) => r(n, ...t)), (this.listeners[n.toString()] || []).forEach((r) => r(...t));
@@ -130,17 +130,17 @@ class b {
130
130
  });
131
131
  }
132
132
  }
133
- f(b, "listeners", {});
134
- const g = class g {
133
+ h(b, "listeners", {});
134
+ const y = class y {
135
135
  constructor(n = {}) {
136
- f(this, "interceptors", {});
137
- f(this, "headers", {});
138
- this.opts = n, this.headers = n.headers || {}, n.interceptors && n.interceptors.forEach((t) => g.addInterceptor(t));
136
+ h(this, "interceptors", {});
137
+ h(this, "headers", {});
138
+ this.opts = n, this.headers = n.headers || {}, n.interceptors && n.interceptors.forEach((t) => y.addInterceptor(t));
139
139
  }
140
140
  static addInterceptor(n) {
141
- const t = Object.keys(g.interceptors).length.toString();
142
- return g.interceptors[t] = n, () => {
143
- g.interceptors[t] = null;
141
+ const t = Object.keys(y.interceptors).length.toString();
142
+ return y.interceptors[t] = n, () => {
143
+ y.interceptors[t] = null;
144
144
  };
145
145
  }
146
146
  addInterceptor(n) {
@@ -150,42 +150,40 @@ const g = class g {
150
150
  };
151
151
  }
152
152
  async request(n = {}) {
153
- var s, c;
153
+ var o, s;
154
154
  if (!this.opts.url && !n.url)
155
- throw new Error("Momentum server URL needs to be set");
156
- const t = ((s = n.url) != null && s.startsWith("http") ? n.url : (this.opts.url || "") + n.url).replace(/([^:]\/)\/+/g, "$1"), r = P({
155
+ throw new Error("URL needs to be set");
156
+ const t = ((o = n.url) != null && o.startsWith("http") ? n.url : (this.opts.url || "") + n.url).replace(/([^:]\/)\/+/g, "$1"), r = Y({
157
157
  "Content-Type": n.body && !(n.body instanceof FormData) ? "application/json" : void 0,
158
- ...g.headers,
158
+ ...y.headers,
159
159
  ...this.headers,
160
160
  ...n.headers
161
161
  });
162
162
  return fetch(t, {
163
163
  headers: r,
164
164
  method: n.method || (n.body ? "POST" : "GET"),
165
- body: (c = r["Content-Type"]) != null && c.startsWith("application/json") && n.body ? JSON.stringify(n.body) : n.body
166
- }).then(async (i) => {
167
- var p, A;
168
- for (let R of [...Object.values(g.interceptors), ...Object.values(this.interceptors)])
169
- await new Promise((j) => R(i, () => j(null)));
170
- if (!i.ok)
171
- throw Error(i.statusText);
172
- return (p = i.headers.get("Content-Type")) != null && p.startsWith("application/json") ? await i.json() : (A = i.headers.get("Content-Type")) != null && A.startsWith("text/plain") ? await i.text() : i;
173
- }).catch((i) => {
174
- throw i;
165
+ body: (s = r["Content-Type"]) != null && s.startsWith("application/json") && n.body ? JSON.stringify(n.body) : n.body
166
+ }).then(async (c) => {
167
+ var g, p;
168
+ for (let T of [...Object.values(y.interceptors), ...Object.values(this.interceptors)])
169
+ await new Promise((R) => T(c, () => R()));
170
+ if (!c.ok)
171
+ throw Error(c.statusText);
172
+ return (g = c.headers.get("Content-Type")) != null && g.startsWith("application/json") ? await c.json() : (p = c.headers.get("Content-Type")) != null && p.startsWith("text/plain") ? await c.text() : c;
175
173
  });
176
174
  }
177
175
  };
178
- f(g, "interceptors", {}), f(g, "headers", {});
179
- let S = g;
176
+ h(y, "interceptors", {}), h(y, "headers", {});
177
+ let S = y;
180
178
  S.addInterceptor((e, n) => {
181
179
  if (e.status == 200)
182
180
  return n();
183
- throw e.status == 400 ? new $(e.statusText) : e.status == 401 ? new D(e.statusText) : e.status == 403 ? new G(e.statusText) : e.status == 404 ? new k(e.statusText) : e.status == 500 ? new M(e.statusText) : new E(e.statusText, e.status);
181
+ throw e.status == 400 ? new $(e.statusText) : e.status == 401 ? new D(e.statusText) : e.status == 403 ? new G(e.statusText) : e.status == 404 ? new k(e.statusText) : e.status == 500 ? new j(e.statusText) : new E(e.statusText, e.status);
184
182
  });
185
183
  class E extends Error {
186
184
  constructor(t, r) {
187
185
  super(t);
188
- f(this, "_code");
186
+ h(this, "_code");
189
187
  r != null && (this._code = r);
190
188
  }
191
189
  get code() {
@@ -209,7 +207,7 @@ class E extends Error {
209
207
  return this.message || super.toString();
210
208
  }
211
209
  }
212
- f(E, "code", 500);
210
+ h(E, "code", 500);
213
211
  class $ extends E {
214
212
  constructor(n = "Bad Request") {
215
213
  super(n);
@@ -218,7 +216,7 @@ class $ extends E {
218
216
  return n.constructor.code == this.code;
219
217
  }
220
218
  }
221
- f($, "code", 400);
219
+ h($, "code", 400);
222
220
  class D extends E {
223
221
  constructor(n = "Unauthorized") {
224
222
  super(n);
@@ -227,7 +225,7 @@ class D extends E {
227
225
  return n.constructor.code == this.code;
228
226
  }
229
227
  }
230
- f(D, "code", 401);
228
+ h(D, "code", 401);
231
229
  class G extends E {
232
230
  constructor(n = "Forbidden") {
233
231
  super(n);
@@ -236,7 +234,7 @@ class G extends E {
236
234
  return n.constructor.code == this.code;
237
235
  }
238
236
  }
239
- f(G, "code", 403);
237
+ h(G, "code", 403);
240
238
  class k extends E {
241
239
  constructor(n = "Not Found") {
242
240
  super(n);
@@ -245,8 +243,8 @@ class k extends E {
245
243
  return n.constructor.code == this.code;
246
244
  }
247
245
  }
248
- f(k, "code", 404);
249
- class M extends E {
246
+ h(k, "code", 404);
247
+ class j extends E {
250
248
  constructor(n = "Internal Server Error") {
251
249
  super(n);
252
250
  }
@@ -254,8 +252,8 @@ class M extends E {
254
252
  return n.constructor.code == this.code;
255
253
  }
256
254
  }
257
- f(M, "code", 500);
258
- const w = {
255
+ h(j, "code", 500);
256
+ const x = {
259
257
  CLEAR: "\x1B[0m",
260
258
  BRIGHT: "\x1B[1m",
261
259
  DIM: "\x1B[2m",
@@ -263,7 +261,7 @@ const w = {
263
261
  BLINK: "\x1B[5m",
264
262
  REVERSE: "\x1B[7m",
265
263
  HIDDEN: "\x1B[8m"
266
- }, B = {
264
+ }, A = {
267
265
  BLACK: "\x1B[30m",
268
266
  RED: "\x1B[31m",
269
267
  GREEN: "\x1B[32m",
@@ -280,7 +278,7 @@ const w = {
280
278
  LIGHT_MAGENTA: "\x1B[95m",
281
279
  LIGHT_CYAN: "\x1B[96m",
282
280
  WHITE: "\x1B[97m"
283
- }, ut = {
281
+ }, ct = {
284
282
  BLACK: "\x1B[40m",
285
283
  RED: "\x1B[41m",
286
284
  GREEN: "\x1B[42m",
@@ -291,8 +289,8 @@ const w = {
291
289
  WHITE: "\x1B[47m",
292
290
  GREY: "\x1B[100m"
293
291
  };
294
- var v = /* @__PURE__ */ ((e) => (e[e.ERROR = 0] = "ERROR", e[e.WARN = 1] = "WARN", e[e.INFO = 2] = "INFO", e[e.LOG = 3] = "LOG", e[e.DEBUG = 4] = "DEBUG", e))(v || {});
295
- const y = class y extends b {
292
+ var q = /* @__PURE__ */ ((e) => (e[e.ERROR = 0] = "ERROR", e[e.WARN = 1] = "WARN", e[e.INFO = 2] = "INFO", e[e.LOG = 3] = "LOG", e[e.DEBUG = 4] = "DEBUG", e))(q || {});
293
+ const f = class f extends b {
296
294
  constructor(n) {
297
295
  super(), this.namespace = n;
298
296
  }
@@ -300,76 +298,76 @@ const y = class y extends b {
300
298
  const s = n.toString(), c = t - s.length;
301
299
  if (c <= 0)
302
300
  return s;
303
- const i = Array(~~(c / r.length)).fill(r).join("");
304
- return o ? s + i : i + s;
301
+ const g = Array(~~(c / r.length)).fill(r).join("");
302
+ return o ? s + g : g + s;
305
303
  }
306
304
  format(...n) {
307
305
  const t = /* @__PURE__ */ new Date();
308
306
  return `${`${t.getFullYear()}-${t.getMonth() + 1}-${t.getDate()} ${this.pad(t.getHours().toString(), 2, "0")}:${this.pad(t.getMinutes().toString(), 2, "0")}:${this.pad(t.getSeconds().toString(), 2, "0")}.${this.pad(t.getMilliseconds().toString(), 3, "0", !0)}`}${this.namespace ? ` [${this.namespace}]` : ""} ${n.join(" ")}`;
309
307
  }
310
308
  debug(...n) {
311
- if (y.LOG_LEVEL < 4)
309
+ if (f.LOG_LEVEL < 4)
312
310
  return;
313
311
  const t = this.format(...n);
314
- y.emit(4, t), console.debug(B.LIGHT_GREY + t + w.CLEAR);
312
+ f.emit(4, t), console.debug(A.LIGHT_GREY + t + x.CLEAR);
315
313
  }
316
314
  log(...n) {
317
- if (y.LOG_LEVEL < 3)
315
+ if (f.LOG_LEVEL < 3)
318
316
  return;
319
317
  const t = this.format(...n);
320
- y.emit(3, t), console.log(w.CLEAR + t);
318
+ f.emit(3, t), console.log(x.CLEAR + t);
321
319
  }
322
320
  info(...n) {
323
- if (y.LOG_LEVEL < 2)
321
+ if (f.LOG_LEVEL < 2)
324
322
  return;
325
323
  const t = this.format(...n);
326
- y.emit(2, t), console.info(B.BLUE + t + w.CLEAR);
324
+ f.emit(2, t), console.info(A.BLUE + t + x.CLEAR);
327
325
  }
328
326
  warn(...n) {
329
- if (y.LOG_LEVEL < 1)
327
+ if (f.LOG_LEVEL < 1)
330
328
  return;
331
329
  const t = this.format(...n);
332
- y.emit(1, t), console.warn(B.YELLOW + t + w.CLEAR);
330
+ f.emit(1, t), console.warn(A.YELLOW + t + x.CLEAR);
333
331
  }
334
332
  error(...n) {
335
- if (y.LOG_LEVEL < 0)
333
+ if (f.LOG_LEVEL < 0)
336
334
  return;
337
335
  const t = this.format(...n);
338
- y.emit(0, t), console.error(B.RED + t + w.CLEAR);
336
+ f.emit(0, t), console.error(A.RED + t + x.CLEAR);
339
337
  }
340
338
  };
341
- f(y, "LOG_LEVEL", 4);
342
- let N = y;
343
- function at(e, n) {
339
+ h(f, "LOG_LEVEL", 4);
340
+ let N = f;
341
+ function it(e, n) {
344
342
  return e.length - e.replaceAll(n, "").length;
345
343
  }
346
- function lt(e) {
344
+ function ut(e) {
347
345
  return Array(e).fill(null).map(() => Math.round(Math.random() * 15).toString(16)).join("");
348
346
  }
349
- const C = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", O = "0123456789", L = "~`!@#$%^&*()_-+={[}]|\\:;\"'<,>.?/", F = C + O + L;
350
- function ht(e) {
347
+ const C = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", O = "0123456789", L = "~`!@#$%^&*()_-+={[}]|\\:;\"'<,>.?/", v = C + O + L;
348
+ function at(e) {
351
349
  const n = /(\+?1)?.*?(\d{3}).*?(\d{3}).*?(\d{4})/g.exec(e);
352
350
  if (!n)
353
351
  throw new Error(`Number cannot be parsed: ${e}`);
354
352
  return `${n[1] ?? ""} (${n[2]}) ${n[3]}-${n[4]}`.trim();
355
353
  }
356
- function ft(e, n, t) {
354
+ function lt(e, n, t) {
357
355
  return `${e.slice(0, t)}${n}${e.slice(t + 1)}`;
358
356
  }
359
- function yt(e, n, t, r = !0) {
357
+ function ht(e, n, t, r = !0) {
360
358
  const o = e.toString(), s = n - o.length;
361
359
  if (s <= 0)
362
360
  return o;
363
361
  const c = Array(~~(s / t.length)).fill(t).join("");
364
362
  return r ? c + o : o + c;
365
363
  }
366
- function gt(e, n = F) {
364
+ function ft(e, n = v) {
367
365
  return Array(e).fill(null).map(() => {
368
366
  const t = ~~(Math.random() * n.length);
369
367
  return n[t];
370
368
  }).join("");
371
369
  }
372
- function dt(e, n = !1, t = !1, r = !1) {
370
+ function yt(e, n = !1, t = !1, r = !1) {
373
371
  if (!n && !t && !r)
374
372
  throw new Error("Must enable at least one: letters, numbers, symbols");
375
373
  return Array(e).fill(null).map(() => {
@@ -381,7 +379,7 @@ function dt(e, n = !1, t = !1, r = !1) {
381
379
  return o;
382
380
  }).join("");
383
381
  }
384
- function Et(e, n) {
382
+ function gt(e, n) {
385
383
  if (typeof n == "string" && (n = new RegExp(n, "g")), !n.global)
386
384
  throw new TypeError("Regular expression must be global.");
387
385
  let t = [], r;
@@ -389,69 +387,69 @@ function Et(e, n) {
389
387
  t.push(r);
390
388
  return t;
391
389
  }
392
- function z(e) {
393
- var n = J(V(Z(K(e), 8 * e.length)));
390
+ function F(e) {
391
+ var n = z(K(V(J(e), 8 * e.length)));
394
392
  return n.toLowerCase();
395
393
  }
396
- function J(e) {
394
+ function z(e) {
397
395
  for (var n, t = "0123456789ABCDEF", r = "", o = 0; o < e.length; o++)
398
396
  n = e.charCodeAt(o), r += t.charAt(n >>> 4 & 15) + t.charAt(15 & n);
399
397
  return r;
400
398
  }
401
- function K(e) {
399
+ function J(e) {
402
400
  for (var n = Array(e.length >> 2), t = 0; t < n.length; t++)
403
401
  n[t] = 0;
404
402
  for (t = 0; t < 8 * e.length; t += 8)
405
403
  n[t >> 5] |= (255 & e.charCodeAt(t / 8)) << t % 32;
406
404
  return n;
407
405
  }
408
- function V(e) {
406
+ function K(e) {
409
407
  for (var n = "", t = 0; t < 32 * e.length; t += 8)
410
408
  n += String.fromCharCode(e[t >> 5] >>> t % 32 & 255);
411
409
  return n;
412
410
  }
413
- function Z(e, n) {
411
+ function V(e, n) {
414
412
  e[n >> 5] |= 128 << n % 32, e[14 + (n + 64 >>> 9 << 4)] = n;
415
413
  for (var t = 1732584193, r = -271733879, o = -1732584194, s = 271733878, c = 0; c < e.length; c += 16) {
416
- var i = t, p = r, A = o, R = s;
417
- r = h(r = h(r = h(r = h(r = l(r = l(r = l(r = l(r = a(r = a(r = a(r = a(r = u(r = u(r = u(r = u(r, o = u(o, s = u(s, t = u(t, r, o, s, e[c + 0], 7, -680876936), r, o, e[c + 1], 12, -389564586), t, r, e[c + 2], 17, 606105819), s, t, e[c + 3], 22, -1044525330), o = u(o, s = u(s, t = u(t, r, o, s, e[c + 4], 7, -176418897), r, o, e[c + 5], 12, 1200080426), t, r, e[c + 6], 17, -1473231341), s, t, e[c + 7], 22, -45705983), o = u(o, s = u(s, t = u(t, r, o, s, e[c + 8], 7, 1770035416), r, o, e[c + 9], 12, -1958414417), t, r, e[c + 10], 17, -42063), s, t, e[c + 11], 22, -1990404162), o = u(o, s = u(s, t = u(t, r, o, s, e[c + 12], 7, 1804603682), r, o, e[c + 13], 12, -40341101), t, r, e[c + 14], 17, -1502002290), s, t, e[c + 15], 22, 1236535329), o = a(o, s = a(s, t = a(t, r, o, s, e[c + 1], 5, -165796510), r, o, e[c + 6], 9, -1069501632), t, r, e[c + 11], 14, 643717713), s, t, e[c + 0], 20, -373897302), o = a(o, s = a(s, t = a(t, r, o, s, e[c + 5], 5, -701558691), r, o, e[c + 10], 9, 38016083), t, r, e[c + 15], 14, -660478335), s, t, e[c + 4], 20, -405537848), o = a(o, s = a(s, t = a(t, r, o, s, e[c + 9], 5, 568446438), r, o, e[c + 14], 9, -1019803690), t, r, e[c + 3], 14, -187363961), s, t, e[c + 8], 20, 1163531501), o = a(o, s = a(s, t = a(t, r, o, s, e[c + 13], 5, -1444681467), r, o, e[c + 2], 9, -51403784), t, r, e[c + 7], 14, 1735328473), s, t, e[c + 12], 20, -1926607734), o = l(o, s = l(s, t = l(t, r, o, s, e[c + 5], 4, -378558), r, o, e[c + 8], 11, -2022574463), t, r, e[c + 11], 16, 1839030562), s, t, e[c + 14], 23, -35309556), o = l(o, s = l(s, t = l(t, r, o, s, e[c + 1], 4, -1530992060), r, o, e[c + 4], 11, 1272893353), t, r, e[c + 7], 16, -155497632), s, t, e[c + 10], 23, -1094730640), o = l(o, s = l(s, t = l(t, r, o, s, e[c + 13], 4, 681279174), r, o, e[c + 0], 11, -358537222), t, r, e[c + 3], 16, -722521979), s, t, e[c + 6], 23, 76029189), o = l(o, s = l(s, t = l(t, r, o, s, e[c + 9], 4, -640364487), r, o, e[c + 12], 11, -421815835), t, r, e[c + 15], 16, 530742520), s, t, e[c + 2], 23, -995338651), o = h(o, s = h(s, t = h(t, r, o, s, e[c + 0], 6, -198630844), r, o, e[c + 7], 10, 1126891415), t, r, e[c + 14], 15, -1416354905), s, t, e[c + 5], 21, -57434055), o = h(o, s = h(s, t = h(t, r, o, s, e[c + 12], 6, 1700485571), r, o, e[c + 3], 10, -1894986606), t, r, e[c + 10], 15, -1051523), s, t, e[c + 1], 21, -2054922799), o = h(o, s = h(s, t = h(t, r, o, s, e[c + 8], 6, 1873313359), r, o, e[c + 15], 10, -30611744), t, r, e[c + 6], 15, -1560198380), s, t, e[c + 13], 21, 1309151649), o = h(o, s = h(s, t = h(t, r, o, s, e[c + 4], 6, -145523070), r, o, e[c + 11], 10, -1120210379), t, r, e[c + 2], 15, 718787259), s, t, e[c + 9], 21, -343485551), t = d(t, i), r = d(r, p), o = d(o, A), s = d(s, R);
414
+ var g = t, p = r, T = o, R = s;
415
+ r = l(r = l(r = l(r = l(r = a(r = a(r = a(r = a(r = u(r = u(r = u(r = u(r = i(r = i(r = i(r = i(r, o = i(o, s = i(s, t = i(t, r, o, s, e[c + 0], 7, -680876936), r, o, e[c + 1], 12, -389564586), t, r, e[c + 2], 17, 606105819), s, t, e[c + 3], 22, -1044525330), o = i(o, s = i(s, t = i(t, r, o, s, e[c + 4], 7, -176418897), r, o, e[c + 5], 12, 1200080426), t, r, e[c + 6], 17, -1473231341), s, t, e[c + 7], 22, -45705983), o = i(o, s = i(s, t = i(t, r, o, s, e[c + 8], 7, 1770035416), r, o, e[c + 9], 12, -1958414417), t, r, e[c + 10], 17, -42063), s, t, e[c + 11], 22, -1990404162), o = i(o, s = i(s, t = i(t, r, o, s, e[c + 12], 7, 1804603682), r, o, e[c + 13], 12, -40341101), t, r, e[c + 14], 17, -1502002290), s, t, e[c + 15], 22, 1236535329), o = u(o, s = u(s, t = u(t, r, o, s, e[c + 1], 5, -165796510), r, o, e[c + 6], 9, -1069501632), t, r, e[c + 11], 14, 643717713), s, t, e[c + 0], 20, -373897302), o = u(o, s = u(s, t = u(t, r, o, s, e[c + 5], 5, -701558691), r, o, e[c + 10], 9, 38016083), t, r, e[c + 15], 14, -660478335), s, t, e[c + 4], 20, -405537848), o = u(o, s = u(s, t = u(t, r, o, s, e[c + 9], 5, 568446438), r, o, e[c + 14], 9, -1019803690), t, r, e[c + 3], 14, -187363961), s, t, e[c + 8], 20, 1163531501), o = u(o, s = u(s, t = u(t, r, o, s, e[c + 13], 5, -1444681467), r, o, e[c + 2], 9, -51403784), t, r, e[c + 7], 14, 1735328473), s, t, e[c + 12], 20, -1926607734), o = a(o, s = a(s, t = a(t, r, o, s, e[c + 5], 4, -378558), r, o, e[c + 8], 11, -2022574463), t, r, e[c + 11], 16, 1839030562), s, t, e[c + 14], 23, -35309556), o = a(o, s = a(s, t = a(t, r, o, s, e[c + 1], 4, -1530992060), r, o, e[c + 4], 11, 1272893353), t, r, e[c + 7], 16, -155497632), s, t, e[c + 10], 23, -1094730640), o = a(o, s = a(s, t = a(t, r, o, s, e[c + 13], 4, 681279174), r, o, e[c + 0], 11, -358537222), t, r, e[c + 3], 16, -722521979), s, t, e[c + 6], 23, 76029189), o = a(o, s = a(s, t = a(t, r, o, s, e[c + 9], 4, -640364487), r, o, e[c + 12], 11, -421815835), t, r, e[c + 15], 16, 530742520), s, t, e[c + 2], 23, -995338651), o = l(o, s = l(s, t = l(t, r, o, s, e[c + 0], 6, -198630844), r, o, e[c + 7], 10, 1126891415), t, r, e[c + 14], 15, -1416354905), s, t, e[c + 5], 21, -57434055), o = l(o, s = l(s, t = l(t, r, o, s, e[c + 12], 6, 1700485571), r, o, e[c + 3], 10, -1894986606), t, r, e[c + 10], 15, -1051523), s, t, e[c + 1], 21, -2054922799), o = l(o, s = l(s, t = l(t, r, o, s, e[c + 8], 6, 1873313359), r, o, e[c + 15], 10, -30611744), t, r, e[c + 6], 15, -1560198380), s, t, e[c + 13], 21, 1309151649), o = l(o, s = l(s, t = l(t, r, o, s, e[c + 4], 6, -145523070), r, o, e[c + 11], 10, -1120210379), t, r, e[c + 2], 15, 718787259), s, t, e[c + 9], 21, -343485551), t = d(t, g), r = d(r, p), o = d(o, T), s = d(s, R);
418
416
  }
419
417
  return Array(t, r, o, s);
420
418
  }
421
- function T(e, n, t, r, o, s) {
422
- return d(Q(d(d(n, e), d(r, s)), o), t);
419
+ function m(e, n, t, r, o, s) {
420
+ return d(Z(d(d(n, e), d(r, s)), o), t);
421
+ }
422
+ function i(e, n, t, r, o, s, c) {
423
+ return m(n & t | ~n & r, e, n, o, s, c);
423
424
  }
424
425
  function u(e, n, t, r, o, s, c) {
425
- return T(n & t | ~n & r, e, n, o, s, c);
426
+ return m(n & r | t & ~r, e, n, o, s, c);
426
427
  }
427
428
  function a(e, n, t, r, o, s, c) {
428
- return T(n & r | t & ~r, e, n, o, s, c);
429
+ return m(n ^ t ^ r, e, n, o, s, c);
429
430
  }
430
431
  function l(e, n, t, r, o, s, c) {
431
- return T(n ^ t ^ r, e, n, o, s, c);
432
- }
433
- function h(e, n, t, r, o, s, c) {
434
- return T(t ^ (n | ~r), e, n, o, s, c);
432
+ return m(t ^ (n | ~r), e, n, o, s, c);
435
433
  }
436
434
  function d(e, n) {
437
435
  var t = (65535 & e) + (65535 & n);
438
436
  return (e >> 16) + (n >> 16) + (t >> 16) << 16 | 65535 & t;
439
437
  }
440
- function Q(e, n) {
438
+ function Z(e, n) {
441
439
  return e << n | e >>> 32 - n;
442
440
  }
443
- function pt(e) {
441
+ function dt(e) {
444
442
  return /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/.test(e);
445
443
  }
446
- function wt(e) {
444
+ function Et(e) {
447
445
  return Object.entries(e).map(
448
446
  ([n, t]) => encodeURIComponent(n) + "=" + encodeURIComponent(t)
449
447
  ).join("&");
450
448
  }
451
- function xt(e, n = "mp") {
452
- return e ? `https://www.gravatar.com/avatar/${z(e)}?d=${n}` : "";
449
+ function pt(e, n = "mp") {
450
+ return e ? `https://www.gravatar.com/avatar/${F(e)}?d=${n}` : "";
453
451
  }
454
- function At(e) {
452
+ function xt(e) {
455
453
  const n = new RegExp(
456
454
  "(?:(?<protocol>[\\w\\d]+)\\:\\/\\/)?(?:(?<user>.+)\\@)?(?<host>(?<domain>[^:\\/\\?#@\\n]+)(?:\\:(?<port>\\d*))?)(?<path>\\/.*?)?(?:\\?(?<query>.*?))?(?:#(?<fragment>.*?))?$",
457
455
  "gm"
@@ -459,19 +457,19 @@ function At(e) {
459
457
  if (t.port != null && (t.port = Number(t.port)), r.length > 2 && (t.domain = r.splice(-2, 2).join("."), t.subdomain = r.join(".")), t.query) {
460
458
  const o = t.query.split("&"), s = {};
461
459
  o.forEach((c) => {
462
- const [i, p] = c.split("=");
463
- s[i] = p;
460
+ const [g, p] = c.split("=");
461
+ s[g] = p;
464
462
  }), t.query = s;
465
463
  }
466
464
  return t;
467
465
  }
468
- function Bt(e) {
466
+ function wt(e) {
469
467
  return (e instanceof Date ? e.getTime() : e) - (/* @__PURE__ */ new Date()).getTime();
470
468
  }
471
- function mt(e) {
469
+ function At(e) {
472
470
  return new Promise((n) => setTimeout(n, e));
473
471
  }
474
- function Tt(e) {
472
+ function Bt(e) {
475
473
  const n = e instanceof Date ? e : new Date(e);
476
474
  return new Intl.DateTimeFormat("en-us", {
477
475
  weekday: "long",
@@ -484,48 +482,48 @@ function Tt(e) {
484
482
  }
485
483
  export {
486
484
  $ as BadRequestError,
487
- ut as CliBackground,
488
- w as CliEffects,
489
- B as CliForeground,
485
+ ct as CliBackground,
486
+ x as CliEffects,
487
+ A as CliForeground,
490
488
  E as CustomError,
491
489
  G as ForbiddenError,
492
- M as InternalServerError,
493
- v as LOG_LEVEL,
490
+ j as InternalServerError,
491
+ q as LOG_LEVEL,
494
492
  N as Logger,
495
493
  k as NotFoundError,
496
494
  b as TypedEmitter,
497
495
  D as UnauthorizedError,
498
496
  S as XHR,
499
- nt as addUnique,
500
- rt as arrayDiff,
501
- ot as caseInsensitiveSort,
502
- P as clean,
503
- at as countChars,
504
- lt as createHex,
505
- tt as deepCopy,
506
- m as dotNotation,
507
- ct as findByProp,
497
+ tt as addUnique,
498
+ et as arrayDiff,
499
+ nt as caseInsensitiveSort,
500
+ Y as clean,
501
+ it as countChars,
502
+ ut as createHex,
503
+ X as deepCopy,
504
+ B as dotNotation,
505
+ ot as findByProp,
508
506
  H as flattenArr,
509
- q as flattenObj,
510
- wt as formEncode,
511
- Tt as formatDate,
512
- ht as formatPhoneNumber,
513
- xt as gravatar,
507
+ P as flattenObj,
508
+ Et as formEncode,
509
+ Bt as formatDate,
510
+ at as formatPhoneNumber,
511
+ pt as gravatar,
514
512
  I as includes,
515
- ft as insertAt,
516
- x as isEqual,
517
- it as makeArray,
513
+ lt as insertAt,
514
+ w as isEqual,
515
+ st as makeArray,
518
516
  W as makeUnique,
519
- Et as matchAll,
520
- z as md5,
521
- et as mixin,
522
- yt as pad,
523
- gt as randomString,
524
- dt as randomStringBuilder,
525
- mt as sleep,
526
- st as sortByProp,
527
- Bt as timeUntil,
528
- At as urlParser,
529
- pt as validateEmail
517
+ gt as matchAll,
518
+ F as md5,
519
+ _ as mixin,
520
+ ht as pad,
521
+ ft as randomString,
522
+ yt as randomStringBuilder,
523
+ At as sleep,
524
+ rt as sortByProp,
525
+ wt as timeUntil,
526
+ xt as urlParser,
527
+ dt as validateEmail
530
528
  };
531
529
  //# sourceMappingURL=utils.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.mjs","sources":["../src/objects.ts","../src/array.ts","../src/emitter.ts","../src/xhr.ts","../src/errors.ts","../src/logger.ts","../src/string.ts","../src/misc.ts","../src/time.ts"],"sourcesContent":["/**\r\n * Removes any null values from an object in-place\r\n *\r\n * @example\r\n * ```ts\r\n * let test = {a: 0, b: false, c: null, d: 'abc'}\r\n * console.log(clean(test)); // Output: {a: 0, b: false, d: 'abc'}\r\n * ```\r\n *\r\n * @param {T} obj Object reference that will be cleaned\r\n * @param undefinedOnly Ignore null values\r\n * @returns {Partial<T>} Cleaned object\r\n */\r\nexport function clean<T>(obj: T, undefinedOnly = false): Partial<T> {\r\n\tif(obj == null) throw new Error(\"Cannot clean a NULL value\");\r\n\tif(Array.isArray(obj)) {\r\n\t\tobj = <any>obj.filter(o => o != null);\r\n\t} else {\r\n\t\tObject.entries(obj).forEach(([key, value]) => {\r\n\t\t\tif((undefinedOnly && value === undefined) || (!undefinedOnly && value == null)) delete (<any>obj)[key];\r\n\t\t});\r\n\t}\r\n\treturn <any>obj;\r\n}\r\n\r\n/**\r\n * Create a deep copy of an object (vs. a shallow copy of references)\r\n *\r\n * Should be replaced by `structuredClone` once released.\r\n *\r\n * @param {T} value Object to copy\r\n * @returns {T} Type\r\n */\r\nexport function deepCopy<T>(value: T): T {\r\n\treturn JSON.parse(JSON.stringify(value));\r\n}\r\n\r\n/**\r\n * Get/set a property of an object using dot notation\r\n *\r\n * @example\r\n * ```ts\r\n * // Get a value\r\n * const name = dotNotation<string>(person, 'firstName');\r\n * const familyCarMake = dotNotation(family, 'cars[0].make');\r\n * // Set a value\r\n * dotNotation(family, 'cars[0].make', 'toyota');\r\n * ```\r\n *\r\n * @type T Return type\r\n * @param {Object} obj source object to search\r\n * @param {string} prop property name (Dot notation & indexing allowed)\r\n * @param {any} set Set object property to value, omit to fetch value instead\r\n * @return {T} property value\r\n */\r\nexport function dotNotation<T>(obj: any, prop: string, set: T): T;\r\nexport function dotNotation<T>(obj: any, prop: string): T | undefined;\r\nexport function dotNotation<T>(obj: any, prop: string, set?: T): T | undefined {\r\n\tif(obj == null || !prop) return undefined;\r\n\t// Split property string by '.' or [index]\r\n\treturn <T>prop.split(/[.[\\]]/g).filter(prop => prop.length).reduce((obj, prop, i, arr) => {\r\n\t\tif(prop[0] == '\"' || prop[0] == \"'\") prop = prop.slice(1, -1); // Take quotes out\r\n\t\tif(!obj?.hasOwnProperty(prop)) {\r\n\t\t\tif(set == undefined) return undefined;\r\n\t\t\tobj[prop] = {};\r\n\t\t}\r\n\t\tif(set !== undefined && i == arr.length - 1)\r\n\t\t\treturn obj[prop] = set;\r\n\t\treturn obj[prop];\r\n\t}, obj);\r\n}\r\n\r\n/**\r\n * Recursively flatten a nested object, while maintaining key structure.\r\n *\r\n * @example\r\n * ```ts\r\n * const car = {honda: {model: \"Civic\"}};\r\n * console.log(flattenObj(car)); //Output {honda.model: \"Civic\"}\r\n * ```\r\n *\r\n * @param obj - Object to flatten\r\n * @param parent - Recursively check if key is a parent key or not\r\n * @param result - Result\r\n * @returns {object} - Flattened object\r\n */\r\nexport function flattenObj(obj: any, parent?: any, result: any = {}) {\r\n\tif(typeof obj === \"object\" && !Array.isArray(obj)) {\r\n\t\tfor(const key of Object.keys(obj)) {\r\n\t\t\tconst propName = parent ? parent + '.' + key : key;\r\n\t\t\tif(typeof obj[key] === 'object') {\r\n\t\t\t\tflattenObj(obj[key], propName, result);\r\n\t\t\t} else {\r\n\t\t\t\tresult[propName] = obj[key];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn result;\r\n\t}\r\n}\r\n\r\n/**\r\n * Check that an object has the following values\r\n *\r\n * @example\r\n * ```ts\r\n * const test = {a: 2, b: 2};\r\n * includes(test, {a: 1}); // true\r\n * includes(test, {b: 1, c: 3}); // false\r\n * ```\r\n *\r\n * @param target Object to search\r\n * @param values Criteria to check against\r\n * @param allowMissing Only check the keys that are available on the target\r\n * @returns {boolean} Does target include all the values\r\n */\r\nexport function includes(target: any, values: any, allowMissing = false): boolean {\r\n\tif(target == undefined) return allowMissing;\r\n\tif(Array.isArray(values)) return values.findIndex((e: any, i: number) => !includes(target[i], values[i], allowMissing)) == -1;\r\n\tconst type = typeof values;\r\n\tif(type != typeof target) return false;\r\n\tif(type == 'object') {\r\n\t\treturn Object.keys(values).find(key => !includes(target[key], values[key], allowMissing)) == null;\r\n\t}\r\n\tif(type == 'function') return target.toString() == values.toString();\r\n\treturn target == values;\r\n}\r\n\r\n/**\r\n * Deep check if two objects are equal\r\n *\r\n * @param {any} a - first item to compare\r\n * @param {any} b - second item to compare\r\n * @returns {boolean} True if they match\r\n */\r\nexport function isEqual(a: any, b: any): boolean {\r\n\tconst ta = typeof a, tb = typeof b;\r\n\tif((ta != 'object' || a == null) || (tb != 'object' || b == null))\r\n\t\treturn ta == 'function' && tb == 'function' ? a.toString() == b.toString() : a === b;\r\n\tconst keys = Object.keys(a);\r\n\tif(keys.length != Object.keys(b).length) return false;\r\n\treturn Object.keys(a).every(key => isEqual(a[key], b[key]));\r\n}\r\n\r\nexport function mixin(target: any, constructors: any[]) {\r\n\tconstructors.forEach(c => {\r\n\t\tObject.getOwnPropertyNames(c.prototype).forEach((name) => {\r\n\t\t\tObject.defineProperty(\r\n\t\t\t\ttarget.prototype,\r\n\t\t\t\tname,\r\n\t\t\t\tObject.getOwnPropertyDescriptor(c.prototype, name) ||\r\n\t\t\t\tObject.create(null)\r\n\t\t\t);\r\n\t\t});\r\n\t});\r\n}\r\n","import {dotNotation, isEqual} from './objects';\n\nexport function addUnique<T>(array: T[], el: T): T[] {\n\tif(array.indexOf(el) === -1) array.push(el);\n\treturn array;\n}\n\nexport function arrayDiff(a: any[], b: any[]): any[] {\n\treturn makeUnique([\n\t\t...a.filter(v1 => !b.includes((v2: any) => isEqual(v1, v2))),\n\t\t...b.filter(v1 => !a.includes((v2: any) => isEqual(v1, v2))),\n\t]);\n}\n\n/**\n * Provides a shorthand for sorting arrays of complex objects by a string property\n *\n * @example\n * ```ts\n * let arr = [{a: 'Apple', b: 123}, {a: 'Carrot', b: 789}, {a: 'banana', b: 456}];\n * arr.sort(caseInsensitiveSort('a'));\n * ```\n *\n * @param {string} prop - Name of property to use, supports dot notation\n * @returns {(a, b) => (number)} - Function to handle sort (Meant to be passed to Array.prototype.sort or used in sortFn)\n */\nexport function caseInsensitiveSort(prop: string) {\n\treturn function (a: any, b: any) {\n\t\tconst aVal = dotNotation<string>(a, prop);\n\t\tconst bVal = dotNotation<string>(b, prop);\n\t\tif(typeof aVal !== 'string' || typeof bVal !== 'string') return 1;\n\t\treturn aVal.toLowerCase().localeCompare(bVal.toLowerCase());\n\t};\n}\n\n/**\n * Recursively flatten nested arrays\n *\n * @example\n * ```ts\n * const arr = [\n * {label: null, url: '/'},\n * {label: 'Model Admin', url: '/model-admin'},\n * [\n * {label: 'Elements', url: '/model-admin/elements'},\n * {label: 'Example', url: null}\n * ]\n * ];\n *\n * console.log(flattenArr(arr));\n * // Output:\n * [\n * {label: null, url: '/'},\n * {label: 'Model Admin', url: '/model-admin'},\n * {label: 'Elements', url: '/model-admin/elements'},\n * {label: 'Example', url: null}\n * ]\n * ```\n *\n * @param {any[]} arr - n-dimensional array\n * @param {any[]} result - Internal use only -- Keeps track of recursion\n * @returns {any[]} - Flattened array\n */\nexport function flattenArr(arr: any[], result: any[] = []): any[] {\n\tarr.forEach(el => Array.isArray(el) ? flattenArr(el, result) : result.push(el));\n\treturn result;\n}\n\n/**\n * Provides a shorthand for sorting arrays of complex objects\n *\n * @example\n * ```ts\n * let arr = [{a: {b: 2}}, {a: {b: 3}}, {a: {b: 1}}];\n * arr.sort(sortByProp('a.b'));\n * ```\n *\n * @param {string} prop - Name of property to use, supports dot notation\n * @param {boolean} reverse - Reverse the order of the sort\n * @returns {(a, b) => (number)} - Function to handle sort (Meant to be passed to Array.prototype.sort)\n */\nexport function sortByProp(prop: string, reverse = false) {\n\treturn function (a: any, b: any) {\n\t\tconst aVal = dotNotation<any>(a, prop);\n\t\tconst bVal = dotNotation<any>(b, prop);\n\t\tif(typeof aVal == 'number' && typeof bVal == 'number')\n\t\t\treturn (reverse ? -1 : 1) * (aVal - bVal);\n\t\tif(aVal > bVal) return reverse ? -1 : 1;\n\t\tif(aVal < bVal) return reverse ? 1 : -1;\n\t\treturn 0;\n\t};\n}\n\nexport function findByProp(prop: string, value: any) {\n\treturn (v: any) => isEqual(v[prop], value);\n}\n\nexport function makeUnique(arr: any[]) {\n\tfor(let i = arr.length - 1; i >= 0; i--) {\n\t\tif(arr.slice(0, i).find(n => isEqual(n, arr[i]))) arr.splice(i, 1);\n\t}\n\treturn arr;\n}\n\n/**\n * Make sure value is an array, if it isn't wrap it in one.\n * @param {T[] | T} value Value that should be an array\n * @returns {T[]} Value in an array\n */\nexport function makeArray<T>(value: T | T[]): T[] {\n\treturn Array.isArray(value) ? value : [value];\n}\n","export type Listener = (...args: any[]) => any;\r\nexport type TypedEvents = {[k in string | symbol]: Listener} & {'*': (event: string, ...args: any[]) => any};\r\n\r\nexport class TypedEmitter<T extends TypedEvents = TypedEvents> {\r\n\tprivate static listeners: {[key: string]: Listener[]} = {};\r\n\r\n\tprivate listeners: { [key in keyof T]?: Listener[] } = {};\r\n\r\n\tstatic emit(event: any, ...args: any[]) {\r\n\t\t(this.listeners['*'] || []).forEach(l => l(event, ...args));\r\n\t\t(this.listeners[event.toString()] || []).forEach(l => l(...args));\r\n\t};\r\n\r\n\tstatic off(event: any, listener: Listener) {\r\n\t\tconst e = event.toString();\r\n\t\tthis.listeners[e] = (this.listeners[e] || []).filter(l => l === listener);\r\n\t}\r\n\r\n\tstatic on(event: any, listener: Listener) {\r\n\t\tconst e = event.toString();\r\n\t\tif(!this.listeners[e]) this.listeners[e] = [];\r\n\t\tthis.listeners[e]?.push(listener);\r\n\t\treturn () => this.off(event, listener);\r\n\t}\r\n\r\n\tstatic once(event: any, listener?: Listener): Promise<any> {\r\n\t\treturn new Promise(res => {\r\n\t\t\tconst unsubscribe = this.on(event, <any>((...args: any) => {\r\n\t\t\t\tres(args.length == 1 ? args[0] : args);\r\n\t\t\t\tif(listener) listener(...args);\r\n\t\t\t\tunsubscribe();\r\n\t\t\t}));\r\n\t\t});\r\n\t}\r\n\r\n\temit<K extends keyof T>(event: K, ...args: Parameters<T[K]>) {\r\n\t\t(this.listeners['*'] || []).forEach(l => l(event, ...args));\r\n\t\t(this.listeners[event] || []).forEach(l => l(...args));\r\n\t};\r\n\r\n\toff<K extends keyof T = string>(event: K, listener: T[K]) {\r\n\t\tthis.listeners[event] = (this.listeners[event] || []).filter(l => l === listener);\r\n\t}\r\n\r\n\ton<K extends keyof T = string>(event: K, listener: T[K]) {\r\n\t\tif(!this.listeners[event]) this.listeners[event] = [];\r\n\t\tthis.listeners[event]?.push(listener);\r\n\t\treturn () => this.off(event, listener);\r\n\t}\r\n\r\n\tonce<K extends keyof T = string>(event: K, listener?: T[K]): Promise<any> {\r\n\t\treturn new Promise(res => {\r\n\t\t\tconst unsubscribe = this.on(event, <any>((...args: any) => {\r\n\t\t\t\tres(args.length == 1 ? args[0] : args);\r\n\t\t\t\tif(listener) listener(...args);\r\n\t\t\t\tunsubscribe();\r\n\t\t\t}));\r\n\t\t});\r\n\t}\r\n}\r\n","import {clean} from './objects';\r\n\r\nexport type Interceptor = (request: Response, next: () => void) => void;\r\n\r\nexport type RequestOptions = {\r\n\turl?: string;\r\n\tmethod?: 'GET' | 'POST' | 'PATCH' | 'DELETE';\r\n\tbody?: any;\r\n\theaders?: {[key: string | symbol]: string | null | undefined};\r\n\t[key: string]: any;\r\n}\r\n\r\nexport type XhrOptions = {\r\n\theaders?: {[key: string | symbol]: string | null | undefined};\r\n\tinterceptors?: Interceptor[];\r\n\turl?: string;\r\n}\r\n\r\nexport class XHR {\r\n\tprivate static interceptors: {[key: string]: Interceptor} = {};\r\n\r\n\tstatic headers: {[key: string]: string | null | undefined} = {};\r\n\r\n\tprivate interceptors: {[key: string]: Interceptor} = {}\r\n\r\n\theaders: {[key: string]: string | null | undefined} = {}\r\n\r\n\tconstructor(public readonly opts: XhrOptions = {}) {\r\n\t\tthis.headers = opts.headers || {};\r\n\t\tif(opts.interceptors) {\r\n\t\t\topts.interceptors.forEach(i => XHR.addInterceptor(i));\r\n\t\t}\r\n\t}\r\n\r\n\tstatic addInterceptor(fn: Interceptor): () => void {\r\n\t\tconst key = Object.keys(XHR.interceptors).length.toString();\r\n\t\tXHR.interceptors[key] = fn;\r\n\t\treturn () => { XHR.interceptors[key] = <any>null; }\r\n\t}\r\n\r\n\taddInterceptor(fn: Interceptor): () => void {\r\n\t\tconst key = Object.keys(this.interceptors).length.toString();\r\n\t\tthis.interceptors[key] = fn;\r\n\t\treturn () => { this.interceptors[key] = <any>null; }\r\n\t}\r\n\r\n\tasync request<T>(opts: RequestOptions = {}): Promise<T> {\r\n\t\tif(!this.opts.url && !opts.url) throw new Error('Momentum server URL needs to be set');\r\n\t\tconst url = (opts.url?.startsWith('http') ? opts.url : (this.opts.url || '') + opts.url).replace(/([^:]\\/)\\/+/g, '$1');\r\n\r\n\t\t// Prep headers\r\n\t\tconst headers = <any>clean({\r\n\t\t\t'Content-Type': (opts.body && !(opts.body instanceof FormData)) ? 'application/json' : undefined,\r\n\t\t\t...XHR.headers,\r\n\t\t\t...this.headers,\r\n\t\t\t...opts.headers\r\n\t\t});\r\n\r\n\t\t// Send request\r\n\t\tconst req = fetch(url, {\r\n\t\t\theaders,\r\n\t\t\tmethod: opts.method || (opts.body ? 'POST' : 'GET'),\r\n\t\t\tbody: (headers['Content-Type']?.startsWith('application/json') && opts.body) ? JSON.stringify(opts.body) : opts.body\r\n\t\t}).then(async resp => {\r\n\t\t\tfor(let fn of [...Object.values(XHR.interceptors), ...Object.values(this.interceptors)]) {\r\n\t\t\t\tconst wait = new Promise(res => fn(resp, () => res(null)));\r\n\t\t\t\tawait wait;\r\n\t\t\t}\r\n\r\n\t\t\tif(!resp.ok) throw Error(resp.statusText);\r\n\t\t\tif(resp.headers.get('Content-Type')?.startsWith('application/json')) return await resp.json();\r\n\t\t\tif(resp.headers.get('Content-Type')?.startsWith('text/plain')) return await <any>resp.text();\r\n\t\t\treturn resp;\r\n\t\t}).catch((err: Error) => {\r\n\t\t\tthrow err;\r\n\t\t});\r\n\t\treturn req;\r\n\t}\r\n}\r\n","import {XHR} from './xhr';\r\n\r\nXHR.addInterceptor((resp: Response, next: () => void) => {\r\n\tif(resp.status == 200) return next();\r\n\tif(resp.status == 400) throw new BadRequestError(resp.statusText);\r\n\tif(resp.status == 401) throw new UnauthorizedError(resp.statusText);\r\n\tif(resp.status == 403) throw new ForbiddenError(resp.statusText);\r\n\tif(resp.status == 404) throw new NotFoundError(resp.statusText);\r\n\tif(resp.status == 500) throw new InternalServerError(resp.statusText);\r\n\tthrow new CustomError(resp.statusText, resp.status);\r\n});\r\n\r\nexport class CustomError extends Error {\r\n\tstatic code = 500;\r\n\r\n\tprivate _code?: number;\r\n\tget code(): number { return this._code || (<any>this).constructor.code; }\r\n\tset code(c: number) { this._code = c; }\r\n\r\n\tconstructor(message?: string, code?: number) {\r\n\t\tsuper(message);\r\n\t\tif(code != null) this._code = code;\r\n\t}\r\n\r\n\tstatic from(err: Error): CustomError {\r\n\t\tconst code = Number((<any>err).statusCode) ?? Number((<any>err).code);\r\n\t\tconst newErr = new this(err.message || err.toString());\r\n\t\treturn Object.assign(newErr, {\r\n\t\t\tstack: err.stack,\r\n\t\t\t...err,\r\n\t\t\tcode: code ?? undefined\r\n\t\t});\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code != undefined;\r\n\t}\r\n\r\n\ttoString() {\r\n\t\treturn this.message || super.toString();\r\n\t}\r\n}\r\n\r\nexport class BadRequestError extends CustomError {\r\n\tstatic code = 400;\r\n\r\n\tconstructor(message: string = 'Bad Request') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class UnauthorizedError extends CustomError {\r\n\tstatic code = 401;\r\n\r\n\tconstructor(message: string = 'Unauthorized') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class ForbiddenError extends CustomError {\r\n\tstatic code = 403;\r\n\r\n\tconstructor(message: string = 'Forbidden') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class NotFoundError extends CustomError {\r\n\tstatic code = 404;\r\n\r\n\tconstructor(message: string = 'Not Found') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class InternalServerError extends CustomError {\r\n\tstatic code = 500;\r\n\r\n\tconstructor(message: string = 'Internal Server Error') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n","import {TypedEmitter, TypedEvents} from './emitter';\r\n\r\nexport const CliEffects = {\r\n\tCLEAR: \"\\x1b[0m\",\r\n\tBRIGHT: \"\\x1b[1m\",\r\n\tDIM: \"\\x1b[2m\",\r\n\tUNDERSCORE: \"\\x1b[4m\",\r\n\tBLINK: \"\\x1b[5m\",\r\n\tREVERSE: \"\\x1b[7m\",\r\n\tHIDDEN: \"\\x1b[8m\",\r\n}\r\n\r\nexport const CliForeground = {\r\n\tBLACK: '\\x1b[30m',\r\n\tRED: '\\x1b[31m',\r\n\tGREEN: '\\x1b[32m',\r\n\tYELLOW: '\\x1b[33m',\r\n\tBLUE: '\\x1b[34m',\r\n\tMAGENTA: '\\x1b[35m',\r\n\tCYAN: '\\x1b[36m',\r\n\tLIGHT_GREY: '\\x1b[37m',\r\n\tGREY: '\\x1b[90m',\r\n\tLIGHT_RED: '\\x1b[91m',\r\n\tLIGHT_GREEN: '\\x1b[92m',\r\n\tLIGHT_YELLOW: '\\x1b[93m',\r\n\tLIGHT_BLUE: '\\x1b[94m',\r\n\tLIGHT_MAGENTA: '\\x1b[95m',\r\n\tLIGHT_CYAN: '\\x1b[96m',\r\n\tWHITE: '\\x1b[97m',\r\n}\r\n\r\nexport const CliBackground = {\r\n\tBLACK: \"\\x1b[40m\",\r\n\tRED: \"\\x1b[41m\",\r\n\tGREEN: \"\\x1b[42m\",\r\n\tYELLOW: \"\\x1b[43m\",\r\n\tBLUE: \"\\x1b[44m\",\r\n\tMAGENTA: \"\\x1b[45m\",\r\n\tCYAN: \"\\x1b[46m\",\r\n\tWHITE: \"\\x1b[47m\",\r\n\tGREY: \"\\x1b[100m\",\r\n}\r\n\r\nexport enum LOG_LEVEL {\r\n\tERROR = 0,\r\n\tWARN = 1,\r\n\tINFO = 2,\r\n\tLOG = 3,\r\n\tDEBUG = 4,\r\n}\r\n\r\nexport type LoggerEvents = TypedEvents & {\r\n\t'ERROR': (...args: any[]) => any;\r\n\t'WARN': (...args: any[]) => any;\r\n\t'INFO': (...args: any[]) => any;\r\n\t'LOG': (...args: any[]) => any;\r\n\t'DEBUG': (...args: any[]) => any;\r\n};\r\n\r\nexport class Logger extends TypedEmitter<LoggerEvents> {\r\n\tstatic LOG_LEVEL: LOG_LEVEL = LOG_LEVEL.DEBUG;\r\n\r\n\tconstructor(public readonly namespace?: string) {\r\n\t\tsuper();\r\n\t}\r\n\r\n\tprivate pad(text: any, length: number, char: string, end = false) {\r\n\t\tconst t = text.toString();\r\n\t\tconst l = length - t.length;\r\n\t\tif(l <= 0) return t;\r\n\t\tconst padding = Array(~~(l / char.length)).fill(char).join('');\r\n\t\treturn !end ? padding + t : t + padding;\r\n\t}\r\n\r\n\tprivate format(...text: string[]): string {\r\n\t\tconst now = new Date();\r\n\t\tconst timestamp = `${now.getFullYear()}-${now.getMonth() + 1}-${now.getDate()} ${this.pad(now.getHours().toString(), 2, '0')}:${this.pad(now.getMinutes().toString(), 2, '0')}:${this.pad(now.getSeconds().toString(), 2, '0')}.${this.pad(now.getMilliseconds().toString(), 3, '0', true)}`;\r\n\t\treturn `${timestamp}${this.namespace ? ` [${this.namespace}]` : ''} ${text.join(' ')}`;\r\n\t}\r\n\r\n\tdebug(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.DEBUG) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.DEBUG, str);\r\n\t\tconsole.debug(CliForeground.LIGHT_GREY + str + CliEffects.CLEAR);\r\n\t}\r\n\r\n\tlog(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.LOG) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.LOG, str);\r\n\t\tconsole.log(CliEffects.CLEAR + str);\r\n\t}\r\n\r\n\tinfo(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.INFO) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.INFO, str);\r\n\t\tconsole.info(CliForeground.BLUE + str + CliEffects.CLEAR);\r\n\t}\r\n\r\n\twarn(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.WARN) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.WARN, str);\r\n\t\tconsole.warn(CliForeground.YELLOW + str + CliEffects.CLEAR);\r\n\t}\r\n\r\n\terror(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.ERROR) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.ERROR, str);\r\n\t\tconsole.error(CliForeground.RED + str + CliEffects.CLEAR);\r\n\t}\r\n}\r\n","export function countChars(text: string, pattern: RegExp) {\r\n\treturn text.length - text.replaceAll(pattern, '').length;\r\n}\r\n\r\nexport function createHex(length: number) {\r\n\treturn Array(length).fill(null).map(() => Math.round(Math.random() * 0xF).toString(16)).join('');\r\n}\r\n\r\n/**\r\n * String of all letters\r\n *\r\n */\r\nconst LETTER_LIST = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\r\n\r\n/**\r\n * String of all numbers\r\n *\r\n */\r\nconst NUMBER_LIST = '0123456789';\r\n\r\n/**\r\n * String of all symbols\r\n */\r\nconst SYMBOL_LIST = '~`!@#$%^&*()_-+={[}]|\\\\:;\"\\'<,>.?/';\r\n\r\n/**\r\n * String of all letters, numbers & symbols\r\n */\r\nconst CHAR_LIST = LETTER_LIST + NUMBER_LIST + SYMBOL_LIST;\r\n\r\nexport function formatPhoneNumber(number: string) {\r\n\tconst parts = /(\\+?1)?.*?(\\d{3}).*?(\\d{3}).*?(\\d{4})/g.exec(number);\r\n\tif(!parts) throw new Error(`Number cannot be parsed: ${number}`);\r\n\treturn `${parts[1] ?? ''} (${parts[2]}) ${parts[3]}-${parts[4]}`.trim();\r\n}\r\n\r\n/**\r\n * Insert a string into another string at a given position\r\n *\r\n * @example\r\n * ```\r\n * console.log(insertAt('Hello world!', ' glorious', 5);\r\n * // Output: Hello glorious world!\r\n * ```\r\n *\r\n * @param {string} target - Parent string you want to modify\r\n * @param {string} str - Value that will be injected to parent\r\n * @param {number} index - Position to inject string at\r\n * @returns {string} - New string\r\n */\r\nexport function insertAt(target: string, str: string, index: number): String {\r\n\treturn `${target.slice(0, index)}${str}${target.slice(index + 1)}`;\r\n}\r\n\r\nexport function pad(text: any, length: number, char: string, start = true) {\r\n\tconst t = text.toString();\r\n\tconst l = length - t.length;\r\n\tif(l <= 0) return t;\r\n\tconst padding = Array(~~(l / char.length)).fill(char).join('');\r\n\treturn start ? padding + t : t + padding;\r\n}\r\n\r\n/**\r\n * Generate a string of random characters.\r\n *\r\n * @example\r\n * ```ts\r\n * const random = randomString();\r\n * const randomByte = randomString(8, \"01\")\r\n * ```\r\n *\r\n * @param {number} length - length of generated string\r\n * @param {string} pool - character pool to generate string from\r\n * @return {string} generated string\r\n */\r\nexport function randomString(length: number, pool: string = CHAR_LIST): string {\r\n\treturn Array(length).fill(null).map(() => {\r\n\t\tconst n = ~~(Math.random() * pool.length);\r\n\t\treturn pool[n];\r\n\t}).join('');\r\n}\r\n\r\n/**\r\n * Generate a random string with fine control over letters, numbers & symbols\r\n *\r\n * @example\r\n * ```ts\r\n * const randomLetter = randomString(1, true);\r\n * const randomChar = randomString(1, true, true, true);\r\n * ```\r\n *\r\n * @param {number} length - length of generated string\r\n * @param {boolean} letters - Add letters to pool\r\n * @param {boolean} numbers - Add numbers to pool\r\n * @param {boolean} symbols - Add symbols to pool\r\n * @return {string} generated string\r\n */\r\nexport function randomStringBuilder(length: number, letters = false, numbers = false, symbols = false): string {\r\n\tif(!letters && !numbers && !symbols) throw new Error('Must enable at least one: letters, numbers, symbols');\r\n\treturn Array(length).fill(null).map(() => {\r\n\t\tlet c;\r\n\t\tdo {\r\n\t\t\tconst type = ~~(Math.random() * 3);\r\n\t\t\tif(letters && type == 0) {\r\n\t\t\t\tc = LETTER_LIST[~~(Math.random() * LETTER_LIST.length)];\r\n\t\t\t} else if(numbers && type == 1) {\r\n\t\t\t\tc = NUMBER_LIST[~~(Math.random() * NUMBER_LIST.length)];\r\n\t\t\t} else if(symbols && type == 2) {\r\n\t\t\t\tc = SYMBOL_LIST[~~(Math.random() * SYMBOL_LIST.length)];\r\n\t\t\t}\r\n\t\t} while(!c);\r\n\t\treturn c;\r\n\t}).join('');\r\n}\r\n\r\n/**\r\n * Find all substrings that match a given pattern.\r\n *\r\n * Roughly based on `String.prototype.matchAll`.\r\n *\r\n * @param {string} value - String to search.\r\n * @param {RegExp | string} regex - Regular expression to match.\r\n * @return {RegExpExecArray[]} Found matches.\r\n */\r\nexport function matchAll(value: string, regex: RegExp | string): RegExpExecArray[] {\r\n\tif(typeof regex === 'string') {\r\n\t\tregex = new RegExp(regex, 'g');\r\n\t}\r\n\r\n\t// https://stackoverflow.com/a/60290199\r\n\tif(!regex.global) {\r\n\t\tthrow new TypeError('Regular expression must be global.');\r\n\t}\r\n\r\n\tlet ret: RegExpExecArray[] = [];\r\n\tlet match: RegExpExecArray | null;\r\n\twhile((match = regex.exec(value)) !== null) {\r\n\t\tret.push(match);\r\n\t}\r\n\r\n\treturn ret;\r\n}\r\n\r\n/**\r\n * Create MD5 hash using native javascript\r\n * @param d String to hash\r\n * @returns {string} Hashed string\r\n */\r\nexport function md5(d: string) {\r\n\tvar r = M(V(Y(X(d),8*d.length)));return r.toLowerCase()};\r\n\tfunction M(d:any){for(var _,m=\"0123456789ABCDEF\",f=\"\",r=0;r<d.length;r++)_=d.charCodeAt(r),f+=m.charAt(_>>>4&15)+m.charAt(15&_);return f}\r\n\tfunction X(d:any){for(var _=Array(d.length>>2),m=0;m<_.length;m++)_[m]=0;for(m=0;m<8*d.length;m+=8)_[m>>5]|=(255&d.charCodeAt(m/8))<<m%32;return _}\r\n\tfunction V(d:any){for(var _=\"\",m=0;m<32*d.length;m+=8)_+=String.fromCharCode(d[m>>5]>>>m%32&255);return _}\r\n\tfunction Y(d:any,_:any){d[_>>5]|=128<<_%32,d[14+(_+64>>>9<<4)]=_;for(var m=1732584193,f=-271733879,r=-1732584194,i=271733878,n=0;n<d.length;n+=16){var h=m,t=f,g=r,e=i;f=md5_ii(f=md5_ii(f=md5_ii(f=md5_ii(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_ff(f=md5_ff(f=md5_ff(f=md5_ff(f,r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+0],7,-680876936),f,r,d[n+1],12,-389564586),m,f,d[n+2],17,606105819),i,m,d[n+3],22,-1044525330),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+4],7,-176418897),f,r,d[n+5],12,1200080426),m,f,d[n+6],17,-1473231341),i,m,d[n+7],22,-45705983),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+8],7,1770035416),f,r,d[n+9],12,-1958414417),m,f,d[n+10],17,-42063),i,m,d[n+11],22,-1990404162),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+12],7,1804603682),f,r,d[n+13],12,-40341101),m,f,d[n+14],17,-1502002290),i,m,d[n+15],22,1236535329),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+1],5,-165796510),f,r,d[n+6],9,-1069501632),m,f,d[n+11],14,643717713),i,m,d[n+0],20,-373897302),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+5],5,-701558691),f,r,d[n+10],9,38016083),m,f,d[n+15],14,-660478335),i,m,d[n+4],20,-405537848),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+9],5,568446438),f,r,d[n+14],9,-1019803690),m,f,d[n+3],14,-187363961),i,m,d[n+8],20,1163531501),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+13],5,-1444681467),f,r,d[n+2],9,-51403784),m,f,d[n+7],14,1735328473),i,m,d[n+12],20,-1926607734),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+5],4,-378558),f,r,d[n+8],11,-2022574463),m,f,d[n+11],16,1839030562),i,m,d[n+14],23,-35309556),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+1],4,-1530992060),f,r,d[n+4],11,1272893353),m,f,d[n+7],16,-155497632),i,m,d[n+10],23,-1094730640),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+13],4,681279174),f,r,d[n+0],11,-358537222),m,f,d[n+3],16,-722521979),i,m,d[n+6],23,76029189),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+9],4,-640364487),f,r,d[n+12],11,-421815835),m,f,d[n+15],16,530742520),i,m,d[n+2],23,-995338651),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+0],6,-198630844),f,r,d[n+7],10,1126891415),m,f,d[n+14],15,-1416354905),i,m,d[n+5],21,-57434055),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+12],6,1700485571),f,r,d[n+3],10,-1894986606),m,f,d[n+10],15,-1051523),i,m,d[n+1],21,-2054922799),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+8],6,1873313359),f,r,d[n+15],10,-30611744),m,f,d[n+6],15,-1560198380),i,m,d[n+13],21,1309151649),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+4],6,-145523070),f,r,d[n+11],10,-1120210379),m,f,d[n+2],15,718787259),i,m,d[n+9],21,-343485551),m=safe_add(m,h),f=safe_add(f,t),r=safe_add(r,g),i=safe_add(i,e)}return Array(m,f,r,i)}\r\n\tfunction md5_cmn(d:any,_:any,m:any,f:any,r:any,i:any){return safe_add(bit_rol(safe_add(safe_add(_,d),safe_add(f,i)),r),m)}\r\n\tfunction md5_ff(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(_&m|~_&f,d,_,r,i,n)}\r\n\tfunction md5_gg(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(_&f|m&~f,d,_,r,i,n)}\r\n\tfunction md5_hh(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(_^m^f,d,_,r,i,n)}\r\n\tfunction md5_ii(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(m^(_|~f),d,_,r,i,n)}\r\n\tfunction safe_add(d:any,_:any){var m=(65535&d)+(65535&_);return(d>>16)+(_>>16)+(m>>16)<<16|65535&m}\r\n\tfunction bit_rol(d:any,_:any){return d<<_|d>>>32-_\r\n}\r\n\r\n/**\r\n * Check if email is valid\r\n *\r\n * @param {string} email - Target\r\n * @returns {boolean} - Follows format\r\n */\r\nexport function validateEmail(email: string) {\r\n\treturn /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/.test(email);\r\n}\r\n","import {md5} from './string';\r\n\r\n/**\r\n * Convert data into a form encoded format.\r\n *\r\n * @param {any} data - data to convert\r\n * @returns {string} - Ecodeded form data\r\n */\r\nexport function formEncode(data: any): string {\r\n\treturn Object.entries(data).map(([key, value]) =>\r\n\t\tencodeURIComponent(key) + '=' + encodeURIComponent(<any>value)\r\n\t).join('&');\r\n}\r\n\r\n/**\r\n * Get profile image from Gravatar\r\n *\r\n * @param {string} email Account email address\r\n * @param {string} def Default image, can be a link or '404', see: https://docs.gravatar.com/general/images/\r\n * @returns {string} Gravatar URL\r\n */\r\nexport function gravatar(email: string, def='mp') {\r\n\tif(!email) return '';\r\n\treturn `https://www.gravatar.com/avatar/${md5(email)}?d=${def}`;\r\n}\r\n\r\n/** Parts of a URL */\r\nexport type ParsedUrl = {\r\n\tprotocol?: string,\r\n\tsubdomain?: string,\r\n\tdomain: string,\r\n\thost: string,\r\n\tport?: number,\r\n\tpath?: string,\r\n\tquery?: {[name: string]: string}\r\n\tfragment?: string\r\n}\r\n\r\n/**\r\n *\r\n * @param {string} url\r\n * @returns {RegExpExecArray}\r\n */\r\nexport function urlParser(url: string): ParsedUrl {\r\n\tconst processed = new RegExp(\r\n\t\t'(?:(?<protocol>[\\\\w\\\\d]+)\\\\:\\\\/\\\\/)?(?:(?<user>.+)\\\\@)?(?<host>(?<domain>[^:\\\\/\\\\?#@\\\\n]+)(?:\\\\:(?<port>\\\\d*))?)(?<path>\\\\/.*?)?(?:\\\\?(?<query>.*?))?(?:#(?<fragment>.*?))?$',\r\n\t\t'gm').exec(url);\r\n\tconst groups: ParsedUrl = <any>processed?.groups ?? {};\r\n\tconst domains = groups.domain.split('.');\r\n\tif(groups['port'] != null) groups.port = Number(groups.port);\r\n\tif(domains.length > 2) {\r\n\t\tgroups.domain = domains.splice(-2, 2).join('.');\r\n\t\tgroups.subdomain = domains.join('.');\r\n\t}\r\n\tif(groups.query) {\r\n\t\tconst split = (<any>groups.query).split('&'), query: any = {};\r\n\t\tsplit.forEach((q: any) => {\r\n\t\t\tconst [key, val] = q.split('=');\r\n\t\t\tquery[key] = val;\r\n\t\t});\r\n\t\tgroups.query = query;\r\n\t}\r\n\treturn groups;\r\n}\r\n","/**\r\n * Calculate the number of milliseconds until date/time\r\n *\r\n * @param {Date | number} date - Target\r\n * @returns {number} - Number of milliseconds until target\r\n */\r\nexport function timeUntil(date: Date | number): number {\r\n\treturn (date instanceof Date ? date.getTime() : date) - (new Date()).getTime();\r\n}\r\n\r\n/**\r\n * Use in conjunction with `await` to pause an async script\r\n *\r\n * @example\r\n * ```ts\r\n * async () => {\r\n * ...\r\n * await sleep(1000) // Pause for 1 second\r\n *\t ...\r\n * }\r\n * ```\r\n *\r\n * @param {number} ms - Time to pause for in milliseconds\r\n * @returns {Promise<unknown>} - Resolves promise when it's time to resume\r\n */\r\nexport function sleep(ms: number) {\r\n\treturn new Promise(res => setTimeout(res, ms));\r\n}\r\n\r\nexport function formatDate(date: Date | number | string) {\r\n\tconst d = date instanceof Date ? date : new Date(date);\r\n\treturn new Intl.DateTimeFormat(\"en-us\", {\r\n\t\tweekday: \"long\",\r\n\t\tmonth: \"short\",\r\n\t\tday: \"numeric\",\r\n\t\thour: \"numeric\",\r\n\t\tminute: \"numeric\",\r\n\t\thour12: true\r\n\t}).format(d);\r\n}\r\n"],"names":["clean","obj","undefinedOnly","o","key","value","deepCopy","dotNotation","prop","set","i","arr","flattenObj","parent","result","propName","includes","target","values","allowMissing","e","type","isEqual","a","b","ta","tb","mixin","constructors","c","name","addUnique","array","el","arrayDiff","makeUnique","v1","v2","caseInsensitiveSort","aVal","bVal","flattenArr","sortByProp","reverse","findByProp","v","n","makeArray","TypedEmitter","__publicField","event","args","l","listener","_a","res","unsubscribe","_XHR","opts","fn","_b","url","headers","resp","err","XHR","next","BadRequestError","UnauthorizedError","ForbiddenError","NotFoundError","InternalServerError","CustomError","message","code","newErr","CliEffects","CliForeground","CliBackground","LOG_LEVEL","_Logger","namespace","text","length","char","end","t","padding","now","str","Logger","countChars","pattern","createHex","LETTER_LIST","NUMBER_LIST","SYMBOL_LIST","CHAR_LIST","formatPhoneNumber","number","parts","insertAt","index","pad","start","randomString","pool","randomStringBuilder","letters","numbers","symbols","matchAll","regex","ret","match","md5","d","r","M","Y","X","_","m","f","h","g","md5_ii","md5_hh","md5_gg","md5_ff","safe_add","md5_cmn","bit_rol","validateEmail","email","formEncode","data","gravatar","def","urlParser","processed","groups","domains","split","query","q","val","timeUntil","date","sleep","ms","formatDate"],"mappings":"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"}
1
+ {"version":3,"file":"utils.mjs","sources":["../src/objects.ts","../src/array.ts","../src/emitter.ts","../src/xhr.ts","../src/errors.ts","../src/logger.ts","../src/string.ts","../src/misc.ts","../src/time.ts"],"sourcesContent":["/**\r\n * Removes any null values from an object in-place\r\n *\r\n * @example\r\n * ```ts\r\n * let test = {a: 0, b: false, c: null, d: 'abc'}\r\n * console.log(clean(test)); // Output: {a: 0, b: false, d: 'abc'}\r\n * ```\r\n *\r\n * @param {T} obj Object reference that will be cleaned\r\n * @param undefinedOnly Ignore null values\r\n * @returns {Partial<T>} Cleaned object\r\n */\r\nexport function clean<T>(obj: T, undefinedOnly = false): Partial<T> {\r\n\tif(obj == null) throw new Error(\"Cannot clean a NULL value\");\r\n\tif(Array.isArray(obj)) {\r\n\t\tobj = <any>obj.filter(o => o != null);\r\n\t} else {\r\n\t\tObject.entries(obj).forEach(([key, value]) => {\r\n\t\t\tif((undefinedOnly && value === undefined) || (!undefinedOnly && value == null)) delete (<any>obj)[key];\r\n\t\t});\r\n\t}\r\n\treturn <any>obj;\r\n}\r\n\r\n/**\r\n * Create a deep copy of an object (vs. a shallow copy of references)\r\n *\r\n * Should be replaced by `structuredClone` once released.\r\n *\r\n * @param {T} value Object to copy\r\n * @returns {T} Type\r\n */\r\nexport function deepCopy<T>(value: T): T {\r\n\treturn JSON.parse(JSON.stringify(value));\r\n}\r\n\r\n/**\r\n * Get/set a property of an object using dot notation\r\n *\r\n * @example\r\n * ```ts\r\n * // Get a value\r\n * const name = dotNotation<string>(person, 'firstName');\r\n * const familyCarMake = dotNotation(family, 'cars[0].make');\r\n * // Set a value\r\n * dotNotation(family, 'cars[0].make', 'toyota');\r\n * ```\r\n *\r\n * @type T Return type\r\n * @param {Object} obj source object to search\r\n * @param {string} prop property name (Dot notation & indexing allowed)\r\n * @param {any} set Set object property to value, omit to fetch value instead\r\n * @return {T} property value\r\n */\r\nexport function dotNotation<T>(obj: any, prop: string, set: T): T;\r\nexport function dotNotation<T>(obj: any, prop: string): T | undefined;\r\nexport function dotNotation<T>(obj: any, prop: string, set?: T): T | undefined {\r\n\tif(obj == null || !prop) return undefined;\r\n\t// Split property string by '.' or [index]\r\n\treturn <T>prop.split(/[.[\\]]/g).filter(prop => prop.length).reduce((obj, prop, i, arr) => {\r\n\t\tif(prop[0] == '\"' || prop[0] == \"'\") prop = prop.slice(1, -1); // Take quotes out\r\n\t\tif(!obj?.hasOwnProperty(prop)) {\r\n\t\t\tif(set == undefined) return undefined;\r\n\t\t\tobj[prop] = {};\r\n\t\t}\r\n\t\tif(set !== undefined && i == arr.length - 1)\r\n\t\t\treturn obj[prop] = set;\r\n\t\treturn obj[prop];\r\n\t}, obj);\r\n}\r\n\r\n/**\r\n * Recursively flatten a nested object, while maintaining key structure.\r\n *\r\n * @example\r\n * ```ts\r\n * const car = {honda: {model: \"Civic\"}};\r\n * console.log(flattenObj(car)); //Output {honda.model: \"Civic\"}\r\n * ```\r\n *\r\n * @param obj - Object to flatten\r\n * @param parent - Recursively check if key is a parent key or not\r\n * @param result - Result\r\n * @returns {object} - Flattened object\r\n */\r\nexport function flattenObj(obj: any, parent?: any, result: any = {}) {\r\n\tif(typeof obj === \"object\" && !Array.isArray(obj)) {\r\n\t\tfor(const key of Object.keys(obj)) {\r\n\t\t\tconst propName = parent ? parent + '.' + key : key;\r\n\t\t\tif(typeof obj[key] === 'object') {\r\n\t\t\t\tflattenObj(obj[key], propName, result);\r\n\t\t\t} else {\r\n\t\t\t\tresult[propName] = obj[key];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn result;\r\n\t}\r\n}\r\n\r\n/**\r\n * Check that an object has the following values\r\n *\r\n * @example\r\n * ```ts\r\n * const test = {a: 2, b: 2};\r\n * includes(test, {a: 1}); // true\r\n * includes(test, {b: 1, c: 3}); // false\r\n * ```\r\n *\r\n * @param target Object to search\r\n * @param values Criteria to check against\r\n * @param allowMissing Only check the keys that are available on the target\r\n * @returns {boolean} Does target include all the values\r\n */\r\nexport function includes(target: any, values: any, allowMissing = false): boolean {\r\n\tif(target == undefined) return allowMissing;\r\n\tif(Array.isArray(values)) return values.findIndex((e: any, i: number) => !includes(target[i], values[i], allowMissing)) == -1;\r\n\tconst type = typeof values;\r\n\tif(type != typeof target) return false;\r\n\tif(type == 'object') {\r\n\t\treturn Object.keys(values).find(key => !includes(target[key], values[key], allowMissing)) == null;\r\n\t}\r\n\tif(type == 'function') return target.toString() == values.toString();\r\n\treturn target == values;\r\n}\r\n\r\n/**\r\n * Deep check if two objects are equal\r\n *\r\n * @param {any} a - first item to compare\r\n * @param {any} b - second item to compare\r\n * @returns {boolean} True if they match\r\n */\r\nexport function isEqual(a: any, b: any): boolean {\r\n\tconst ta = typeof a, tb = typeof b;\r\n\tif((ta != 'object' || a == null) || (tb != 'object' || b == null))\r\n\t\treturn ta == 'function' && tb == 'function' ? a.toString() == b.toString() : a === b;\r\n\tconst keys = Object.keys(a);\r\n\tif(keys.length != Object.keys(b).length) return false;\r\n\treturn Object.keys(a).every(key => isEqual(a[key], b[key]));\r\n}\r\n\r\nexport function mixin(target: any, constructors: any[]) {\r\n\tconstructors.forEach(c => {\r\n\t\tObject.getOwnPropertyNames(c.prototype).forEach((name) => {\r\n\t\t\tObject.defineProperty(\r\n\t\t\t\ttarget.prototype,\r\n\t\t\t\tname,\r\n\t\t\t\tObject.getOwnPropertyDescriptor(c.prototype, name) ||\r\n\t\t\t\tObject.create(null)\r\n\t\t\t);\r\n\t\t});\r\n\t});\r\n}\r\n","import {dotNotation, isEqual} from './objects';\n\nexport function addUnique<T>(array: T[], el: T): T[] {\n\tif(array.indexOf(el) === -1) array.push(el);\n\treturn array;\n}\n\nexport function arrayDiff(a: any[], b: any[]): any[] {\n\treturn makeUnique([\n\t\t...a.filter(v1 => !b.includes((v2: any) => isEqual(v1, v2))),\n\t\t...b.filter(v1 => !a.includes((v2: any) => isEqual(v1, v2))),\n\t]);\n}\n\n/**\n * Provides a shorthand for sorting arrays of complex objects by a string property\n *\n * @example\n * ```ts\n * let arr = [{a: 'Apple', b: 123}, {a: 'Carrot', b: 789}, {a: 'banana', b: 456}];\n * arr.sort(caseInsensitiveSort('a'));\n * ```\n *\n * @param {string} prop - Name of property to use, supports dot notation\n * @returns {(a, b) => (number)} - Function to handle sort (Meant to be passed to Array.prototype.sort or used in sortFn)\n */\nexport function caseInsensitiveSort(prop: string) {\n\treturn function (a: any, b: any) {\n\t\tconst aVal = dotNotation<string>(a, prop);\n\t\tconst bVal = dotNotation<string>(b, prop);\n\t\tif(typeof aVal !== 'string' || typeof bVal !== 'string') return 1;\n\t\treturn aVal.toLowerCase().localeCompare(bVal.toLowerCase());\n\t};\n}\n\n/**\n * Recursively flatten nested arrays\n *\n * @example\n * ```ts\n * const arr = [\n * {label: null, url: '/'},\n * {label: 'Model Admin', url: '/model-admin'},\n * [\n * {label: 'Elements', url: '/model-admin/elements'},\n * {label: 'Example', url: null}\n * ]\n * ];\n *\n * console.log(flattenArr(arr));\n * // Output:\n * [\n * {label: null, url: '/'},\n * {label: 'Model Admin', url: '/model-admin'},\n * {label: 'Elements', url: '/model-admin/elements'},\n * {label: 'Example', url: null}\n * ]\n * ```\n *\n * @param {any[]} arr - n-dimensional array\n * @param {any[]} result - Internal use only -- Keeps track of recursion\n * @returns {any[]} - Flattened array\n */\nexport function flattenArr(arr: any[], result: any[] = []): any[] {\n\tarr.forEach(el => Array.isArray(el) ? flattenArr(el, result) : result.push(el));\n\treturn result;\n}\n\n/**\n * Provides a shorthand for sorting arrays of complex objects\n *\n * @example\n * ```ts\n * let arr = [{a: {b: 2}}, {a: {b: 3}}, {a: {b: 1}}];\n * arr.sort(sortByProp('a.b'));\n * ```\n *\n * @param {string} prop - Name of property to use, supports dot notation\n * @param {boolean} reverse - Reverse the order of the sort\n * @returns {(a, b) => (number)} - Function to handle sort (Meant to be passed to Array.prototype.sort)\n */\nexport function sortByProp(prop: string, reverse = false) {\n\treturn function (a: any, b: any) {\n\t\tconst aVal = dotNotation<any>(a, prop);\n\t\tconst bVal = dotNotation<any>(b, prop);\n\t\tif(typeof aVal == 'number' && typeof bVal == 'number')\n\t\t\treturn (reverse ? -1 : 1) * (aVal - bVal);\n\t\tif(aVal > bVal) return reverse ? -1 : 1;\n\t\tif(aVal < bVal) return reverse ? 1 : -1;\n\t\treturn 0;\n\t};\n}\n\nexport function findByProp(prop: string, value: any) {\n\treturn (v: any) => isEqual(v[prop], value);\n}\n\nexport function makeUnique(arr: any[]) {\n\tfor(let i = arr.length - 1; i >= 0; i--) {\n\t\tif(arr.slice(0, i).find(n => isEqual(n, arr[i]))) arr.splice(i, 1);\n\t}\n\treturn arr;\n}\n\n/**\n * Make sure value is an array, if it isn't wrap it in one.\n * @param {T[] | T} value Value that should be an array\n * @returns {T[]} Value in an array\n */\nexport function makeArray<T>(value: T | T[]): T[] {\n\treturn Array.isArray(value) ? value : [value];\n}\n","export type Listener = (...args: any[]) => any;\r\nexport type TypedEvents = {[k in string | symbol]: Listener} & {'*': (event: string, ...args: any[]) => any};\r\n\r\nexport class TypedEmitter<T extends TypedEvents = TypedEvents> {\r\n\tprivate static listeners: {[key: string]: Listener[]} = {};\r\n\r\n\tprivate listeners: { [key in keyof T]?: Listener[] } = {};\r\n\r\n\tstatic emit(event: any, ...args: any[]) {\r\n\t\t(this.listeners['*'] || []).forEach(l => l(event, ...args));\r\n\t\t(this.listeners[event.toString()] || []).forEach(l => l(...args));\r\n\t};\r\n\r\n\tstatic off(event: any, listener: Listener) {\r\n\t\tconst e = event.toString();\r\n\t\tthis.listeners[e] = (this.listeners[e] || []).filter(l => l === listener);\r\n\t}\r\n\r\n\tstatic on(event: any, listener: Listener) {\r\n\t\tconst e = event.toString();\r\n\t\tif(!this.listeners[e]) this.listeners[e] = [];\r\n\t\tthis.listeners[e]?.push(listener);\r\n\t\treturn () => this.off(event, listener);\r\n\t}\r\n\r\n\tstatic once(event: any, listener?: Listener): Promise<any> {\r\n\t\treturn new Promise(res => {\r\n\t\t\tconst unsubscribe = this.on(event, <any>((...args: any) => {\r\n\t\t\t\tres(args.length == 1 ? args[0] : args);\r\n\t\t\t\tif(listener) listener(...args);\r\n\t\t\t\tunsubscribe();\r\n\t\t\t}));\r\n\t\t});\r\n\t}\r\n\r\n\temit<K extends keyof T>(event: K, ...args: Parameters<T[K]>) {\r\n\t\t(this.listeners['*'] || []).forEach(l => l(event, ...args));\r\n\t\t(this.listeners[event] || []).forEach(l => l(...args));\r\n\t};\r\n\r\n\toff<K extends keyof T = string>(event: K, listener: T[K]) {\r\n\t\tthis.listeners[event] = (this.listeners[event] || []).filter(l => l === listener);\r\n\t}\r\n\r\n\ton<K extends keyof T = string>(event: K, listener: T[K]) {\r\n\t\tif(!this.listeners[event]) this.listeners[event] = [];\r\n\t\tthis.listeners[event]?.push(listener);\r\n\t\treturn () => this.off(event, listener);\r\n\t}\r\n\r\n\tonce<K extends keyof T = string>(event: K, listener?: T[K]): Promise<any> {\r\n\t\treturn new Promise(res => {\r\n\t\t\tconst unsubscribe = this.on(event, <any>((...args: any) => {\r\n\t\t\t\tres(args.length == 1 ? args[0] : args);\r\n\t\t\t\tif(listener) listener(...args);\r\n\t\t\t\tunsubscribe();\r\n\t\t\t}));\r\n\t\t});\r\n\t}\r\n}\r\n","import {clean} from './objects';\r\n\r\nexport type Interceptor = (request: Response, next: () => void) => void;\r\n\r\nexport type RequestOptions = {\r\n\turl?: string;\r\n\tmethod?: 'GET' | 'POST' | 'PATCH' | 'DELETE';\r\n\tbody?: any;\r\n\theaders?: {[key: string | symbol]: string | null | undefined};\r\n\t[key: string]: any;\r\n}\r\n\r\nexport type XhrOptions = {\r\n\theaders?: {[key: string | symbol]: string | null | undefined};\r\n\tinterceptors?: Interceptor[];\r\n\turl?: string;\r\n}\r\n\r\nexport class XHR {\r\n\tprivate static interceptors: {[key: string]: Interceptor} = {};\r\n\r\n\tstatic headers: {[key: string]: string | null | undefined} = {};\r\n\r\n\tprivate interceptors: {[key: string]: Interceptor} = {}\r\n\r\n\theaders: {[key: string]: string | null | undefined} = {}\r\n\r\n\tconstructor(public readonly opts: XhrOptions = {}) {\r\n\t\tthis.headers = opts.headers || {};\r\n\t\tif(opts.interceptors) {\r\n\t\t\topts.interceptors.forEach(i => XHR.addInterceptor(i));\r\n\t\t}\r\n\t}\r\n\r\n\tstatic addInterceptor(fn: Interceptor): () => void {\r\n\t\tconst key = Object.keys(XHR.interceptors).length.toString();\r\n\t\tXHR.interceptors[key] = fn;\r\n\t\treturn () => { XHR.interceptors[key] = <any>null; }\r\n\t}\r\n\r\n\taddInterceptor(fn: Interceptor): () => void {\r\n\t\tconst key = Object.keys(this.interceptors).length.toString();\r\n\t\tthis.interceptors[key] = fn;\r\n\t\treturn () => { this.interceptors[key] = <any>null; }\r\n\t}\r\n\r\n\tasync request<T>(opts: RequestOptions = {}): Promise<T> {\r\n\t\tif(!this.opts.url && !opts.url) throw new Error('URL needs to be set');\r\n\t\tconst url = (opts.url?.startsWith('http') ? opts.url : (this.opts.url || '') + opts.url).replace(/([^:]\\/)\\/+/g, '$1');\r\n\r\n\t\t// Prep headers\r\n\t\tconst headers = <any>clean({\r\n\t\t\t'Content-Type': (opts.body && !(opts.body instanceof FormData)) ? 'application/json' : undefined,\r\n\t\t\t...XHR.headers,\r\n\t\t\t...this.headers,\r\n\t\t\t...opts.headers\r\n\t\t});\r\n\r\n\t\t// Send request\r\n\t\treturn fetch(url, {\r\n\t\t\theaders,\r\n\t\t\tmethod: opts.method || (opts.body ? 'POST' : 'GET'),\r\n\t\t\tbody: (headers['Content-Type']?.startsWith('application/json') && opts.body) ? JSON.stringify(opts.body) : opts.body\r\n\t\t}).then(async resp => {\r\n\t\t\tfor(let fn of [...Object.values(XHR.interceptors), ...Object.values(this.interceptors)]) {\r\n\t\t\t\tawait new Promise<void>(res => fn(resp, () => res()));\r\n\t\t\t}\r\n\r\n\t\t\tif(!resp.ok) throw Error(resp.statusText);\r\n\t\t\tif(resp.headers.get('Content-Type')?.startsWith('application/json')) return await resp.json();\r\n\t\t\tif(resp.headers.get('Content-Type')?.startsWith('text/plain')) return await <any>resp.text();\r\n\t\t\treturn resp;\r\n\t\t});\r\n\t}\r\n}\r\n","import {XHR} from './xhr';\r\n\r\nXHR.addInterceptor((resp: Response, next: () => void) => {\r\n\tif(resp.status == 200) return next();\r\n\tif(resp.status == 400) throw new BadRequestError(resp.statusText);\r\n\tif(resp.status == 401) throw new UnauthorizedError(resp.statusText);\r\n\tif(resp.status == 403) throw new ForbiddenError(resp.statusText);\r\n\tif(resp.status == 404) throw new NotFoundError(resp.statusText);\r\n\tif(resp.status == 500) throw new InternalServerError(resp.statusText);\r\n\tthrow new CustomError(resp.statusText, resp.status);\r\n});\r\n\r\nexport class CustomError extends Error {\r\n\tstatic code = 500;\r\n\r\n\tprivate _code?: number;\r\n\tget code(): number { return this._code || (<any>this).constructor.code; }\r\n\tset code(c: number) { this._code = c; }\r\n\r\n\tconstructor(message?: string, code?: number) {\r\n\t\tsuper(message);\r\n\t\tif(code != null) this._code = code;\r\n\t}\r\n\r\n\tstatic from(err: Error): CustomError {\r\n\t\tconst code = Number((<any>err).statusCode) ?? Number((<any>err).code);\r\n\t\tconst newErr = new this(err.message || err.toString());\r\n\t\treturn Object.assign(newErr, {\r\n\t\t\tstack: err.stack,\r\n\t\t\t...err,\r\n\t\t\tcode: code ?? undefined\r\n\t\t});\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code != undefined;\r\n\t}\r\n\r\n\ttoString() {\r\n\t\treturn this.message || super.toString();\r\n\t}\r\n}\r\n\r\nexport class BadRequestError extends CustomError {\r\n\tstatic code = 400;\r\n\r\n\tconstructor(message: string = 'Bad Request') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class UnauthorizedError extends CustomError {\r\n\tstatic code = 401;\r\n\r\n\tconstructor(message: string = 'Unauthorized') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class ForbiddenError extends CustomError {\r\n\tstatic code = 403;\r\n\r\n\tconstructor(message: string = 'Forbidden') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class NotFoundError extends CustomError {\r\n\tstatic code = 404;\r\n\r\n\tconstructor(message: string = 'Not Found') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class InternalServerError extends CustomError {\r\n\tstatic code = 500;\r\n\r\n\tconstructor(message: string = 'Internal Server Error') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n","import {TypedEmitter, TypedEvents} from './emitter';\r\n\r\nexport const CliEffects = {\r\n\tCLEAR: \"\\x1b[0m\",\r\n\tBRIGHT: \"\\x1b[1m\",\r\n\tDIM: \"\\x1b[2m\",\r\n\tUNDERSCORE: \"\\x1b[4m\",\r\n\tBLINK: \"\\x1b[5m\",\r\n\tREVERSE: \"\\x1b[7m\",\r\n\tHIDDEN: \"\\x1b[8m\",\r\n}\r\n\r\nexport const CliForeground = {\r\n\tBLACK: '\\x1b[30m',\r\n\tRED: '\\x1b[31m',\r\n\tGREEN: '\\x1b[32m',\r\n\tYELLOW: '\\x1b[33m',\r\n\tBLUE: '\\x1b[34m',\r\n\tMAGENTA: '\\x1b[35m',\r\n\tCYAN: '\\x1b[36m',\r\n\tLIGHT_GREY: '\\x1b[37m',\r\n\tGREY: '\\x1b[90m',\r\n\tLIGHT_RED: '\\x1b[91m',\r\n\tLIGHT_GREEN: '\\x1b[92m',\r\n\tLIGHT_YELLOW: '\\x1b[93m',\r\n\tLIGHT_BLUE: '\\x1b[94m',\r\n\tLIGHT_MAGENTA: '\\x1b[95m',\r\n\tLIGHT_CYAN: '\\x1b[96m',\r\n\tWHITE: '\\x1b[97m',\r\n}\r\n\r\nexport const CliBackground = {\r\n\tBLACK: \"\\x1b[40m\",\r\n\tRED: \"\\x1b[41m\",\r\n\tGREEN: \"\\x1b[42m\",\r\n\tYELLOW: \"\\x1b[43m\",\r\n\tBLUE: \"\\x1b[44m\",\r\n\tMAGENTA: \"\\x1b[45m\",\r\n\tCYAN: \"\\x1b[46m\",\r\n\tWHITE: \"\\x1b[47m\",\r\n\tGREY: \"\\x1b[100m\",\r\n}\r\n\r\nexport enum LOG_LEVEL {\r\n\tERROR = 0,\r\n\tWARN = 1,\r\n\tINFO = 2,\r\n\tLOG = 3,\r\n\tDEBUG = 4,\r\n}\r\n\r\nexport type LoggerEvents = TypedEvents & {\r\n\t'ERROR': (...args: any[]) => any;\r\n\t'WARN': (...args: any[]) => any;\r\n\t'INFO': (...args: any[]) => any;\r\n\t'LOG': (...args: any[]) => any;\r\n\t'DEBUG': (...args: any[]) => any;\r\n};\r\n\r\nexport class Logger extends TypedEmitter<LoggerEvents> {\r\n\tstatic LOG_LEVEL: LOG_LEVEL = LOG_LEVEL.DEBUG;\r\n\r\n\tconstructor(public readonly namespace?: string) {\r\n\t\tsuper();\r\n\t}\r\n\r\n\tprivate pad(text: any, length: number, char: string, end = false) {\r\n\t\tconst t = text.toString();\r\n\t\tconst l = length - t.length;\r\n\t\tif(l <= 0) return t;\r\n\t\tconst padding = Array(~~(l / char.length)).fill(char).join('');\r\n\t\treturn !end ? padding + t : t + padding;\r\n\t}\r\n\r\n\tprivate format(...text: string[]): string {\r\n\t\tconst now = new Date();\r\n\t\tconst timestamp = `${now.getFullYear()}-${now.getMonth() + 1}-${now.getDate()} ${this.pad(now.getHours().toString(), 2, '0')}:${this.pad(now.getMinutes().toString(), 2, '0')}:${this.pad(now.getSeconds().toString(), 2, '0')}.${this.pad(now.getMilliseconds().toString(), 3, '0', true)}`;\r\n\t\treturn `${timestamp}${this.namespace ? ` [${this.namespace}]` : ''} ${text.join(' ')}`;\r\n\t}\r\n\r\n\tdebug(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.DEBUG) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.DEBUG, str);\r\n\t\tconsole.debug(CliForeground.LIGHT_GREY + str + CliEffects.CLEAR);\r\n\t}\r\n\r\n\tlog(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.LOG) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.LOG, str);\r\n\t\tconsole.log(CliEffects.CLEAR + str);\r\n\t}\r\n\r\n\tinfo(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.INFO) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.INFO, str);\r\n\t\tconsole.info(CliForeground.BLUE + str + CliEffects.CLEAR);\r\n\t}\r\n\r\n\twarn(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.WARN) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.WARN, str);\r\n\t\tconsole.warn(CliForeground.YELLOW + str + CliEffects.CLEAR);\r\n\t}\r\n\r\n\terror(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.ERROR) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.ERROR, str);\r\n\t\tconsole.error(CliForeground.RED + str + CliEffects.CLEAR);\r\n\t}\r\n}\r\n","export function countChars(text: string, pattern: RegExp) {\r\n\treturn text.length - text.replaceAll(pattern, '').length;\r\n}\r\n\r\nexport function createHex(length: number) {\r\n\treturn Array(length).fill(null).map(() => Math.round(Math.random() * 0xF).toString(16)).join('');\r\n}\r\n\r\n/**\r\n * String of all letters\r\n *\r\n */\r\nconst LETTER_LIST = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\r\n\r\n/**\r\n * String of all numbers\r\n *\r\n */\r\nconst NUMBER_LIST = '0123456789';\r\n\r\n/**\r\n * String of all symbols\r\n */\r\nconst SYMBOL_LIST = '~`!@#$%^&*()_-+={[}]|\\\\:;\"\\'<,>.?/';\r\n\r\n/**\r\n * String of all letters, numbers & symbols\r\n */\r\nconst CHAR_LIST = LETTER_LIST + NUMBER_LIST + SYMBOL_LIST;\r\n\r\nexport function formatPhoneNumber(number: string) {\r\n\tconst parts = /(\\+?1)?.*?(\\d{3}).*?(\\d{3}).*?(\\d{4})/g.exec(number);\r\n\tif(!parts) throw new Error(`Number cannot be parsed: ${number}`);\r\n\treturn `${parts[1] ?? ''} (${parts[2]}) ${parts[3]}-${parts[4]}`.trim();\r\n}\r\n\r\n/**\r\n * Insert a string into another string at a given position\r\n *\r\n * @example\r\n * ```\r\n * console.log(insertAt('Hello world!', ' glorious', 5);\r\n * // Output: Hello glorious world!\r\n * ```\r\n *\r\n * @param {string} target - Parent string you want to modify\r\n * @param {string} str - Value that will be injected to parent\r\n * @param {number} index - Position to inject string at\r\n * @returns {string} - New string\r\n */\r\nexport function insertAt(target: string, str: string, index: number): String {\r\n\treturn `${target.slice(0, index)}${str}${target.slice(index + 1)}`;\r\n}\r\n\r\nexport function pad(text: any, length: number, char: string, start = true) {\r\n\tconst t = text.toString();\r\n\tconst l = length - t.length;\r\n\tif(l <= 0) return t;\r\n\tconst padding = Array(~~(l / char.length)).fill(char).join('');\r\n\treturn start ? padding + t : t + padding;\r\n}\r\n\r\n/**\r\n * Generate a string of random characters.\r\n *\r\n * @example\r\n * ```ts\r\n * const random = randomString();\r\n * const randomByte = randomString(8, \"01\")\r\n * ```\r\n *\r\n * @param {number} length - length of generated string\r\n * @param {string} pool - character pool to generate string from\r\n * @return {string} generated string\r\n */\r\nexport function randomString(length: number, pool: string = CHAR_LIST): string {\r\n\treturn Array(length).fill(null).map(() => {\r\n\t\tconst n = ~~(Math.random() * pool.length);\r\n\t\treturn pool[n];\r\n\t}).join('');\r\n}\r\n\r\n/**\r\n * Generate a random string with fine control over letters, numbers & symbols\r\n *\r\n * @example\r\n * ```ts\r\n * const randomLetter = randomString(1, true);\r\n * const randomChar = randomString(1, true, true, true);\r\n * ```\r\n *\r\n * @param {number} length - length of generated string\r\n * @param {boolean} letters - Add letters to pool\r\n * @param {boolean} numbers - Add numbers to pool\r\n * @param {boolean} symbols - Add symbols to pool\r\n * @return {string} generated string\r\n */\r\nexport function randomStringBuilder(length: number, letters = false, numbers = false, symbols = false): string {\r\n\tif(!letters && !numbers && !symbols) throw new Error('Must enable at least one: letters, numbers, symbols');\r\n\treturn Array(length).fill(null).map(() => {\r\n\t\tlet c;\r\n\t\tdo {\r\n\t\t\tconst type = ~~(Math.random() * 3);\r\n\t\t\tif(letters && type == 0) {\r\n\t\t\t\tc = LETTER_LIST[~~(Math.random() * LETTER_LIST.length)];\r\n\t\t\t} else if(numbers && type == 1) {\r\n\t\t\t\tc = NUMBER_LIST[~~(Math.random() * NUMBER_LIST.length)];\r\n\t\t\t} else if(symbols && type == 2) {\r\n\t\t\t\tc = SYMBOL_LIST[~~(Math.random() * SYMBOL_LIST.length)];\r\n\t\t\t}\r\n\t\t} while(!c);\r\n\t\treturn c;\r\n\t}).join('');\r\n}\r\n\r\n/**\r\n * Find all substrings that match a given pattern.\r\n *\r\n * Roughly based on `String.prototype.matchAll`.\r\n *\r\n * @param {string} value - String to search.\r\n * @param {RegExp | string} regex - Regular expression to match.\r\n * @return {RegExpExecArray[]} Found matches.\r\n */\r\nexport function matchAll(value: string, regex: RegExp | string): RegExpExecArray[] {\r\n\tif(typeof regex === 'string') {\r\n\t\tregex = new RegExp(regex, 'g');\r\n\t}\r\n\r\n\t// https://stackoverflow.com/a/60290199\r\n\tif(!regex.global) {\r\n\t\tthrow new TypeError('Regular expression must be global.');\r\n\t}\r\n\r\n\tlet ret: RegExpExecArray[] = [];\r\n\tlet match: RegExpExecArray | null;\r\n\twhile((match = regex.exec(value)) !== null) {\r\n\t\tret.push(match);\r\n\t}\r\n\r\n\treturn ret;\r\n}\r\n\r\n/**\r\n * Create MD5 hash using native javascript\r\n * @param d String to hash\r\n * @returns {string} Hashed string\r\n */\r\nexport function md5(d: string) {\r\n\tvar r = M(V(Y(X(d),8*d.length)));return r.toLowerCase()};\r\n\tfunction M(d:any){for(var _,m=\"0123456789ABCDEF\",f=\"\",r=0;r<d.length;r++)_=d.charCodeAt(r),f+=m.charAt(_>>>4&15)+m.charAt(15&_);return f}\r\n\tfunction X(d:any){for(var _=Array(d.length>>2),m=0;m<_.length;m++)_[m]=0;for(m=0;m<8*d.length;m+=8)_[m>>5]|=(255&d.charCodeAt(m/8))<<m%32;return _}\r\n\tfunction V(d:any){for(var _=\"\",m=0;m<32*d.length;m+=8)_+=String.fromCharCode(d[m>>5]>>>m%32&255);return _}\r\n\tfunction Y(d:any,_:any){d[_>>5]|=128<<_%32,d[14+(_+64>>>9<<4)]=_;for(var m=1732584193,f=-271733879,r=-1732584194,i=271733878,n=0;n<d.length;n+=16){var h=m,t=f,g=r,e=i;f=md5_ii(f=md5_ii(f=md5_ii(f=md5_ii(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_ff(f=md5_ff(f=md5_ff(f=md5_ff(f,r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+0],7,-680876936),f,r,d[n+1],12,-389564586),m,f,d[n+2],17,606105819),i,m,d[n+3],22,-1044525330),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+4],7,-176418897),f,r,d[n+5],12,1200080426),m,f,d[n+6],17,-1473231341),i,m,d[n+7],22,-45705983),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+8],7,1770035416),f,r,d[n+9],12,-1958414417),m,f,d[n+10],17,-42063),i,m,d[n+11],22,-1990404162),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+12],7,1804603682),f,r,d[n+13],12,-40341101),m,f,d[n+14],17,-1502002290),i,m,d[n+15],22,1236535329),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+1],5,-165796510),f,r,d[n+6],9,-1069501632),m,f,d[n+11],14,643717713),i,m,d[n+0],20,-373897302),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+5],5,-701558691),f,r,d[n+10],9,38016083),m,f,d[n+15],14,-660478335),i,m,d[n+4],20,-405537848),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+9],5,568446438),f,r,d[n+14],9,-1019803690),m,f,d[n+3],14,-187363961),i,m,d[n+8],20,1163531501),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+13],5,-1444681467),f,r,d[n+2],9,-51403784),m,f,d[n+7],14,1735328473),i,m,d[n+12],20,-1926607734),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+5],4,-378558),f,r,d[n+8],11,-2022574463),m,f,d[n+11],16,1839030562),i,m,d[n+14],23,-35309556),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+1],4,-1530992060),f,r,d[n+4],11,1272893353),m,f,d[n+7],16,-155497632),i,m,d[n+10],23,-1094730640),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+13],4,681279174),f,r,d[n+0],11,-358537222),m,f,d[n+3],16,-722521979),i,m,d[n+6],23,76029189),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+9],4,-640364487),f,r,d[n+12],11,-421815835),m,f,d[n+15],16,530742520),i,m,d[n+2],23,-995338651),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+0],6,-198630844),f,r,d[n+7],10,1126891415),m,f,d[n+14],15,-1416354905),i,m,d[n+5],21,-57434055),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+12],6,1700485571),f,r,d[n+3],10,-1894986606),m,f,d[n+10],15,-1051523),i,m,d[n+1],21,-2054922799),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+8],6,1873313359),f,r,d[n+15],10,-30611744),m,f,d[n+6],15,-1560198380),i,m,d[n+13],21,1309151649),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+4],6,-145523070),f,r,d[n+11],10,-1120210379),m,f,d[n+2],15,718787259),i,m,d[n+9],21,-343485551),m=safe_add(m,h),f=safe_add(f,t),r=safe_add(r,g),i=safe_add(i,e)}return Array(m,f,r,i)}\r\n\tfunction md5_cmn(d:any,_:any,m:any,f:any,r:any,i:any){return safe_add(bit_rol(safe_add(safe_add(_,d),safe_add(f,i)),r),m)}\r\n\tfunction md5_ff(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(_&m|~_&f,d,_,r,i,n)}\r\n\tfunction md5_gg(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(_&f|m&~f,d,_,r,i,n)}\r\n\tfunction md5_hh(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(_^m^f,d,_,r,i,n)}\r\n\tfunction md5_ii(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(m^(_|~f),d,_,r,i,n)}\r\n\tfunction safe_add(d:any,_:any){var m=(65535&d)+(65535&_);return(d>>16)+(_>>16)+(m>>16)<<16|65535&m}\r\n\tfunction bit_rol(d:any,_:any){return d<<_|d>>>32-_\r\n}\r\n\r\n/**\r\n * Check if email is valid\r\n *\r\n * @param {string} email - Target\r\n * @returns {boolean} - Follows format\r\n */\r\nexport function validateEmail(email: string) {\r\n\treturn /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/.test(email);\r\n}\r\n","import {md5} from './string';\r\n\r\n/**\r\n * Convert data into a form encoded format.\r\n *\r\n * @param {any} data - data to convert\r\n * @returns {string} - Ecodeded form data\r\n */\r\nexport function formEncode(data: any): string {\r\n\treturn Object.entries(data).map(([key, value]) =>\r\n\t\tencodeURIComponent(key) + '=' + encodeURIComponent(<any>value)\r\n\t).join('&');\r\n}\r\n\r\n/**\r\n * Get profile image from Gravatar\r\n *\r\n * @param {string} email Account email address\r\n * @param {string} def Default image, can be a link or '404', see: https://docs.gravatar.com/general/images/\r\n * @returns {string} Gravatar URL\r\n */\r\nexport function gravatar(email: string, def='mp') {\r\n\tif(!email) return '';\r\n\treturn `https://www.gravatar.com/avatar/${md5(email)}?d=${def}`;\r\n}\r\n\r\n/** Parts of a URL */\r\nexport type ParsedUrl = {\r\n\tprotocol?: string,\r\n\tsubdomain?: string,\r\n\tdomain: string,\r\n\thost: string,\r\n\tport?: number,\r\n\tpath?: string,\r\n\tquery?: {[name: string]: string}\r\n\tfragment?: string\r\n}\r\n\r\n/**\r\n *\r\n * @param {string} url\r\n * @returns {RegExpExecArray}\r\n */\r\nexport function urlParser(url: string): ParsedUrl {\r\n\tconst processed = new RegExp(\r\n\t\t'(?:(?<protocol>[\\\\w\\\\d]+)\\\\:\\\\/\\\\/)?(?:(?<user>.+)\\\\@)?(?<host>(?<domain>[^:\\\\/\\\\?#@\\\\n]+)(?:\\\\:(?<port>\\\\d*))?)(?<path>\\\\/.*?)?(?:\\\\?(?<query>.*?))?(?:#(?<fragment>.*?))?$',\r\n\t\t'gm').exec(url);\r\n\tconst groups: ParsedUrl = <any>processed?.groups ?? {};\r\n\tconst domains = groups.domain.split('.');\r\n\tif(groups['port'] != null) groups.port = Number(groups.port);\r\n\tif(domains.length > 2) {\r\n\t\tgroups.domain = domains.splice(-2, 2).join('.');\r\n\t\tgroups.subdomain = domains.join('.');\r\n\t}\r\n\tif(groups.query) {\r\n\t\tconst split = (<any>groups.query).split('&'), query: any = {};\r\n\t\tsplit.forEach((q: any) => {\r\n\t\t\tconst [key, val] = q.split('=');\r\n\t\t\tquery[key] = val;\r\n\t\t});\r\n\t\tgroups.query = query;\r\n\t}\r\n\treturn groups;\r\n}\r\n","/**\r\n * Calculate the number of milliseconds until date/time\r\n *\r\n * @param {Date | number} date - Target\r\n * @returns {number} - Number of milliseconds until target\r\n */\r\nexport function timeUntil(date: Date | number): number {\r\n\treturn (date instanceof Date ? date.getTime() : date) - (new Date()).getTime();\r\n}\r\n\r\n/**\r\n * Use in conjunction with `await` to pause an async script\r\n *\r\n * @example\r\n * ```ts\r\n * async () => {\r\n * ...\r\n * await sleep(1000) // Pause for 1 second\r\n *\t ...\r\n * }\r\n * ```\r\n *\r\n * @param {number} ms - Time to pause for in milliseconds\r\n * @returns {Promise<unknown>} - Resolves promise when it's time to resume\r\n */\r\nexport function sleep(ms: number) {\r\n\treturn new Promise(res => setTimeout(res, ms));\r\n}\r\n\r\nexport function formatDate(date: Date | number | string) {\r\n\tconst d = date instanceof Date ? date : new Date(date);\r\n\treturn new Intl.DateTimeFormat(\"en-us\", {\r\n\t\tweekday: \"long\",\r\n\t\tmonth: \"short\",\r\n\t\tday: \"numeric\",\r\n\t\thour: \"numeric\",\r\n\t\tminute: \"numeric\",\r\n\t\thour12: true\r\n\t}).format(d);\r\n}\r\n"],"names":["clean","obj","undefinedOnly","o","key","value","deepCopy","dotNotation","prop","set","i","arr","flattenObj","parent","result","propName","includes","target","values","allowMissing","e","type","isEqual","a","b","ta","tb","mixin","constructors","c","name","addUnique","array","el","arrayDiff","makeUnique","v1","v2","caseInsensitiveSort","aVal","bVal","flattenArr","sortByProp","reverse","findByProp","v","n","makeArray","TypedEmitter","__publicField","event","args","l","listener","_a","res","unsubscribe","_XHR","opts","fn","_b","url","headers","resp","XHR","next","BadRequestError","UnauthorizedError","ForbiddenError","NotFoundError","InternalServerError","CustomError","message","code","err","newErr","CliEffects","CliForeground","CliBackground","LOG_LEVEL","_Logger","namespace","text","length","char","end","t","padding","now","str","Logger","countChars","pattern","createHex","LETTER_LIST","NUMBER_LIST","SYMBOL_LIST","CHAR_LIST","formatPhoneNumber","number","parts","insertAt","index","pad","start","randomString","pool","randomStringBuilder","letters","numbers","symbols","matchAll","regex","ret","match","md5","d","r","M","V","Y","X","_","m","f","h","g","md5_ii","md5_hh","md5_gg","md5_ff","safe_add","md5_cmn","bit_rol","validateEmail","email","formEncode","data","gravatar","def","urlParser","processed","groups","domains","split","query","q","val","timeUntil","date","sleep","ms","formatDate"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ztimson/utils",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Utility library",
5
5
  "author": "Zak Timson",
6
6
  "license": "MIT",