@ztimson/utils 0.1.8 → 0.1.9
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 +1 -1
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.mjs +158 -159
- package/dist/utils.mjs.map +1 -1
- package/dist/xhr.d.ts +1 -7
- package/package.json +1 -1
package/dist/utils.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(function(c,E){typeof exports=="object"&&typeof module<"u"?E(exports):typeof define=="function"&&define.amd?define(["exports"],E):(c=typeof globalThis<"u"?globalThis:c||self,E(c.utils={}))})(this,function(c){"use strict";var St=Object.defineProperty;var Tt=(c,E,w)=>E in c?St(c,E,{enumerable:!0,configurable:!0,writable:!0,value:w}):c[E]=w;var d=(c,E,w)=>(Tt(c,typeof E!="symbol"?E+"":E,w),w);function E(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 w(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 $(e,n,t=!1){if(e==null)return t;if(Array.isArray(n))return n.findIndex((o,i)=>!$(e[i],n[i],t))==-1;const r=typeof n;return r!=typeof e?!1:r=="object"?Object.keys(n).find(o=>!$(e[o],n[o],t))==null:r=="function"?e.toString()==n.toString():e==n}function S(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=>S(e[i],n[i]))}function W(e,n){return e.indexOf(n)===-1&&e.push(n),e}function z(e,n){return Y([...e.filter(t=>!n.includes(r=>S(t,r))),...n.filter(t=>!e.includes(r=>S(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 V(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 K(e,n){return t=>S(t[e],n)}function Y(e){for(let n=e.length-1;n>=0;n--)e.slice(0,n).find(t=>S(t,e[n]))&&e.splice(n,1);return e}function Z(e){return Array.isArray(e)?e:[e]}class L{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(L,"listeners",{});const y=class y extends L{constructor(t={}){super();d(this,"interceptors",{});d(this,"headers",{});this.opts=t,t.interceptors&&t.interceptors.forEach(r=>y.addInterceptor(r))}static addInterceptor(t){const r=Object.keys(y.interceptors).length.toString();return y.interceptors[r]=t,()=>{y.interceptors[r]=null}}addInterceptor(t){const r=Object.keys(this.interceptors).length.toString();return this.interceptors[r]=t,()=>{this.interceptors[r]=null}}async request(t={}){var s,m;if(!this.opts.url&&!t.url)throw new Error("Momentum server URL needs to be set");const r=((s=t.url)!=null&&s.startsWith("http")?t.url:(this.opts.url||"")+t.url).replace(/([^:]\/)\/+/g,"$1"),o=E({"Content-Type":t.body&&!(t.body instanceof FormData)?"application/json":void 0,...y.headers,...this.headers,...t.headers}),i=fetch(r,{headers:o,method:t.method||(t.body?"POST":"GET"),body:(m=o["Content-Type"])!=null&&m.startsWith("application/json")&&t.body?JSON.stringify(t.body):t.body}).then(async u=>{var O,b;for(let At of[...Object.values(y.interceptors),...Object.values(this.interceptors)])await new Promise(wt=>At(u,()=>wt(null)));if(this.emit(`${u.status}`,u,t),!u.ok)throw Error(u.statusText);return this.emit("RESPONSE",u,t),(O=u.headers.get("Content-Type"))!=null&&O.startsWith("application/json")?await u.json():(b=u.headers.get("Content-Type"))!=null&&b.startsWith("text/plain")?await u.text():u}).catch(u=>{throw this.emit("REJECTED",u,t),u});return this.emit("REQUEST",i,t),i}};d(y,"interceptors",{}),d(y,"headers",{});let N=y;N.addInterceptor((e,n)=>{if(e.status==200)return n();throw e.status==400?new D(e.statusText):e.status==401?new p(e.statusText):e.status==403?new G(e.statusText):e.status==404?new k(e.statusText):e.status==500?new U(e.statusText):new B(e.statusText,e.status)});class B 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(B,"code",500);class D extends B{constructor(n="Bad Request"){super(n)}static instanceof(n){return n.constructor.code==this.code}}d(D,"code",400);class p extends B{constructor(n="Unauthorized"){super(n)}static instanceof(n){return n.constructor.code==this.code}}d(p,"code",401);class G extends B{constructor(n="Forbidden"){super(n)}static instanceof(n){return n.constructor.code==this.code}}d(G,"code",403);class k extends B{constructor(n="Not Found"){super(n)}static instanceof(n){return n.constructor.code==this.code}}d(k,"code",404);class U extends B{constructor(n="Internal Server Error"){super(n)}static instanceof(n){return n.constructor.code==this.code}}d(U,"code",500);const T={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"},Q={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 L{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 m=Array(~~(s/r.length)).fill(r).join("");return o?i+m:m+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+T.CLEAR)}log(...n){if(g.LOG_LEVEL<3)return;const t=this.format(...n);g.emit(3,t),console.log(T.CLEAR+t)}info(...n){if(g.LOG_LEVEL<2)return;const t=this.format(...n);g.emit(2,t),console.info(R.BLUE+t+T.CLEAR)}warn(...n){if(g.LOG_LEVEL<1)return;const t=this.format(...n);g.emit(1,t),console.warn(R.YELLOW+t+T.CLEAR)}error(...n){if(g.LOG_LEVEL<0)return;const t=this.format(...n);g.emit(0,t),console.error(R.RED+t+T.CLEAR)}};d(g,"LOG_LEVEL",4);let M=g;function X(e,n){return e.length-e.replaceAll(n,"").length}function _(e){return Array(e).fill(null).map(()=>Math.round(Math.random()*15).toString(16)).join("")}const P="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",j="0123456789",q="~`!@#$%^&*()_-+={[}]|\\:;\"'<,>.?/",tt=P+j+q;function et(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 nt(e,n,t){return`${e.slice(0,t)}${n}${e.slice(t+1)}`}function rt(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 ot(e,n=tt){return Array(e).fill(null).map(()=>{const t=~~(Math.random()*n.length);return n[t]}).join("")}function it(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=P[~~(Math.random()*P.length)]:t&&i==1?o=j[~~(Math.random()*j.length)]:r&&i==2&&(o=q[~~(Math.random()*q.length)])}while(!o);return o}).join("")}function st(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=ct(at(lt(ut(e),8*e.length)));return n.toLowerCase()}function ct(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 ut(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 at(e){for(var n="",t=0;t<32*e.length;t+=8)n+=String.fromCharCode(e[t>>5]>>>t%32&255);return n}function lt(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 m=t,u=r,O=o,b=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=A(t,m),r=A(r,u),o=A(o,O),i=A(i,b)}return Array(t,r,o,i)}function I(e,n,t,r,o,i){return A(ht(A(A(n,e),A(r,i)),o),t)}function a(e,n,t,r,o,i,s){return I(n&t|~n&r,e,n,o,i,s)}function l(e,n,t,r,o,i,s){return I(n&r|t&~r,e,n,o,i,s)}function h(e,n,t,r,o,i,s){return I(n^t^r,e,n,o,i,s)}function f(e,n,t,r,o,i,s){return I(t^(n|~r),e,n,o,i,s)}function A(e,n){var t=(65535&e)+(65535&n);return(e>>16)+(n>>16)+(t>>16)<<16|65535&t}function ht(e,n){return e<<n|e>>>32-n}function ft(e){return/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/.test(e)}function dt(e){return Object.entries(e).map(([n,t])=>encodeURIComponent(n)+"="+encodeURIComponent(t)).join("&")}function Et(e,n="mp"){return e?`https://www.gravatar.com/avatar/${F(e)}?d=${n}`:""}function gt(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[m,u]=s.split("=");i[m]=u}),t.query=i}return t}function yt(e){return(e instanceof Date?e.getTime():e)-new Date().getTime()}function mt(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=D,c.CliBackground=Q,c.CliEffects=T,c.CliForeground=R,c.CustomError=B,c.ForbiddenError=G,c.InternalServerError=U,c.LOG_LEVEL=x,c.Logger=M,c.NotFoundError=k,c.TypedEmitter=L,c.UnauthorizedError=p,c.XHR=N,c.addUnique=W,c.arrayDiff=z,c.caseInsensitiveSort=J,c.clean=E,c.countChars=X,c.createHex=_,c.deepCopy=w,c.dotNotation=C,c.findByProp=K,c.flattenArr=H,c.flattenObj=v,c.formEncode=dt,c.formatDate=Bt,c.formatPhoneNumber=et,c.gravatar=Et,c.includes=$,c.insertAt=nt,c.isEqual=S,c.makeArray=Z,c.makeUnique=Y,c.matchAll=st,c.md5=F,c.pad=rt,c.randomString=ot,c.randomStringBuilder=it,c.sleep=mt,c.sortByProp=V,c.timeUntil=yt,c.urlParser=gt,c.validateEmail=ft,Object.defineProperty(c,Symbol.toStringTag,{value:"Module"})});
|
|
1
|
+
(function(c,g){typeof exports=="object"&&typeof module<"u"?g(exports):typeof define=="function"&&define.amd?define(["exports"],g):(c=typeof globalThis<"u"?globalThis:c||self,g(c.utils={}))})(this,function(c){"use strict";var wt=Object.defineProperty;var St=(c,g,A)=>g in c?wt(c,g,{enumerable:!0,configurable:!0,writable:!0,value:A}):c[g]=A;var d=(c,g,A)=>(St(c,typeof g!="symbol"?g+"":g,A),A);function g(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 P(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"?P(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 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){return e.indexOf(n)===-1&&e.push(n),e}function z(e,n){return Y([...e.filter(t=>!n.includes(r=>w(t,r))),...n.filter(t=>!e.includes(r=>w(t,r)))])}function V(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 J(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 K(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 Z(e){return Array.isArray(e)?e:[e]}class O{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(O,"listeners",{});const E=class E{constructor(n={}){d(this,"interceptors",{});d(this,"headers",{});this.opts=n,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=g({"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,N;for(let v of[...Object.values(E.interceptors),...Object.values(this.interceptors)])await new Promise(At=>v(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():(N=u.headers.get("Content-Type"))!=null&&N.startsWith("text/plain")?await u.text():u}).catch(u=>{throw u})}};d(E,"interceptors",{}),d(E,"headers",{});let L=E;L.addInterceptor((e,n)=>{if(e.status==200)return n();throw e.status==400?new p(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 p extends m{constructor(n="Bad Request"){super(n)}static instanceof(n){return n.constructor.code==this.code}}d(p,"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"},Q={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 O{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(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)}};d(y,"LOG_LEVEL",4);let U=y;function X(e,n){return e.length-e.replaceAll(n,"").length}function _(e){return Array(e).fill(null).map(()=>Math.round(Math.random()*15).toString(16)).join("")}const M="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",q="0123456789",j="~`!@#$%^&*()_-+={[}]|\\:;\"'<,>.?/",tt=M+q+j;function et(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 nt(e,n,t){return`${e.slice(0,t)}${n}${e.slice(t+1)}`}function rt(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 ot(e,n=tt){return Array(e).fill(null).map(()=>{const t=~~(Math.random()*n.length);return n[t]}).join("")}function it(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=M[~~(Math.random()*M.length)]:t&&i==1?o=q[~~(Math.random()*q.length)]:r&&i==2&&(o=j[~~(Math.random()*j.length)])}while(!o);return o}).join("")}function st(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=ct(at(lt(ut(e),8*e.length)));return n.toLowerCase()}function ct(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 ut(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 at(e){for(var n="",t=0;t<32*e.length;t+=8)n+=String.fromCharCode(e[t>>5]>>>t%32&255);return n}function lt(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,N=o,v=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=B(t,u),r=B(r,T),o=B(o,N),i=B(i,v)}return Array(t,r,o,i)}function I(e,n,t,r,o,i){return B(ht(B(B(n,e),B(r,i)),o),t)}function a(e,n,t,r,o,i,s){return I(n&t|~n&r,e,n,o,i,s)}function l(e,n,t,r,o,i,s){return I(n&r|t&~r,e,n,o,i,s)}function h(e,n,t,r,o,i,s){return I(n^t^r,e,n,o,i,s)}function f(e,n,t,r,o,i,s){return I(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 ht(e,n){return e<<n|e>>>32-n}function ft(e){return/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/.test(e)}function dt(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 yt(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 Et(e){return(e instanceof Date?e.getTime():e)-new Date().getTime()}function mt(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=p,c.CliBackground=Q,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=O,c.UnauthorizedError=$,c.XHR=L,c.addUnique=W,c.arrayDiff=z,c.caseInsensitiveSort=V,c.clean=g,c.countChars=X,c.createHex=_,c.deepCopy=A,c.dotNotation=C,c.findByProp=K,c.flattenArr=H,c.flattenObj=P,c.formEncode=dt,c.formatDate=Bt,c.formatPhoneNumber=et,c.gravatar=gt,c.includes=b,c.insertAt=nt,c.isEqual=w,c.makeArray=Z,c.makeUnique=Y,c.matchAll=st,c.md5=F,c.pad=rt,c.randomString=ot,c.randomStringBuilder=it,c.sleep=mt,c.sortByProp=J,c.timeUntil=Et,c.urlParser=yt,c.validateEmail=ft,Object.defineProperty(c,Symbol.toStringTag,{value:"Module"})});
|
|
2
2
|
//# sourceMappingURL=utils.cjs.map
|
package/dist/utils.cjs.map
CHANGED
|
@@ -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","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 {TypedEmitter, type TypedEvents} from './emitter';\r\nimport {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 XhrEvents = TypedEvents & {\r\n\t'REQUEST': (request: Promise<any>, options: RequestOptions) => any;\r\n\t'RESPONSE': (response: Response, options: RequestOptions) => any;\r\n\t'REJECTED': (response: Error, options: RequestOptions) => any;\r\n\r\n};\r\n\r\nexport type XhrOptions = {\r\n\tinterceptors?: Interceptor[];\r\n\turl?: string;\r\n}\r\n\r\nexport class XHR extends TypedEmitter<XhrEvents> {\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\tsuper();\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\tthis.emit(`${resp.status}`, resp, opts);\r\n\t\t\tif(!resp.ok) throw Error(resp.statusText);\r\n\t\t\tthis.emit('RESPONSE', resp, opts);\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\tthis.emit('REJECTED', err, opts);\r\n\t\t\tthrow err;\r\n\t\t});\r\n\t\tthis.emit('REQUEST', req, opts)\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","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","req","_b","resp","err","XHR","next","BadRequestError","UnauthorizedError","ForbiddenError","NotFoundError","InternalServerError","CustomError","message","code","c","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","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\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\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","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","c","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,84 +1,84 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var f = (e, n, t) => (
|
|
4
|
-
function
|
|
1
|
+
var Y = Object.defineProperty;
|
|
2
|
+
var j = (e, n, t) => n in e ? Y(e, n, { enumerable: !0, configurable: !0, writable: !0, value: t }) : e[n] = t;
|
|
3
|
+
var f = (e, n, t) => (j(e, typeof n != "symbol" ? n + "" : n, t), t);
|
|
4
|
+
function q(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
|
|
11
|
+
function tt(e) {
|
|
12
12
|
return JSON.parse(JSON.stringify(e));
|
|
13
13
|
}
|
|
14
|
-
function
|
|
14
|
+
function m(e, n, t) {
|
|
15
15
|
if (!(e == null || !n))
|
|
16
|
-
return n.split(/[.[\]]/g).filter((r) => r.length).reduce((r, o, s,
|
|
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))) {
|
|
18
18
|
if (t == null)
|
|
19
19
|
return;
|
|
20
20
|
r[o] = {};
|
|
21
21
|
}
|
|
22
|
-
return t !== void 0 && s ==
|
|
22
|
+
return t !== void 0 && s == c.length - 1 ? r[o] = t : r[o];
|
|
23
23
|
}, e);
|
|
24
24
|
}
|
|
25
|
-
function
|
|
25
|
+
function H(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" ?
|
|
29
|
+
typeof e[r] == "object" ? H(e[r], o, t) : t[o] = e[r];
|
|
30
30
|
}
|
|
31
31
|
return t;
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
|
-
function
|
|
34
|
+
function N(e, n, t = !1) {
|
|
35
35
|
if (e == null)
|
|
36
36
|
return t;
|
|
37
37
|
if (Array.isArray(n))
|
|
38
|
-
return n.findIndex((o, s) => !
|
|
38
|
+
return n.findIndex((o, s) => !N(e[s], n[s], t)) == -1;
|
|
39
39
|
const r = typeof n;
|
|
40
|
-
return r != typeof e ? !1 : r == "object" ? Object.keys(n).find((o) => !
|
|
40
|
+
return r != typeof e ? !1 : r == "object" ? Object.keys(n).find((o) => !N(e[o], n[o], t)) == null : r == "function" ? e.toString() == n.toString() : e == n;
|
|
41
41
|
}
|
|
42
|
-
function
|
|
42
|
+
function x(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) =>
|
|
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]));
|
|
45
45
|
}
|
|
46
|
-
function
|
|
46
|
+
function et(e, n) {
|
|
47
47
|
return e.indexOf(n) === -1 && e.push(n), e;
|
|
48
48
|
}
|
|
49
|
-
function
|
|
49
|
+
function nt(e, n) {
|
|
50
50
|
return v([
|
|
51
|
-
...e.filter((t) => !n.includes((r) =>
|
|
52
|
-
...n.filter((t) => !e.includes((r) =>
|
|
51
|
+
...e.filter((t) => !n.includes((r) => x(t, r))),
|
|
52
|
+
...n.filter((t) => !e.includes((r) => x(t, r)))
|
|
53
53
|
]);
|
|
54
54
|
}
|
|
55
|
-
function
|
|
55
|
+
function rt(e) {
|
|
56
56
|
return function(n, t) {
|
|
57
|
-
const r =
|
|
57
|
+
const r = m(n, e), o = m(t, e);
|
|
58
58
|
return typeof r != "string" || typeof o != "string" ? 1 : r.toLowerCase().localeCompare(o.toLowerCase());
|
|
59
59
|
};
|
|
60
60
|
}
|
|
61
|
-
function
|
|
62
|
-
return e.forEach((t) => Array.isArray(t) ?
|
|
61
|
+
function W(e, n = []) {
|
|
62
|
+
return e.forEach((t) => Array.isArray(t) ? W(t, n) : n.push(t)), n;
|
|
63
63
|
}
|
|
64
|
-
function
|
|
64
|
+
function ot(e, n = !1) {
|
|
65
65
|
return function(t, r) {
|
|
66
|
-
const o =
|
|
66
|
+
const o = m(t, e), s = m(r, e);
|
|
67
67
|
return typeof o == "number" && typeof s == "number" ? (n ? -1 : 1) * (o - s) : o > s ? n ? -1 : 1 : o < s ? n ? 1 : -1 : 0;
|
|
68
68
|
};
|
|
69
69
|
}
|
|
70
|
-
function
|
|
71
|
-
return (t) =>
|
|
70
|
+
function st(e, n) {
|
|
71
|
+
return (t) => x(t[e], n);
|
|
72
72
|
}
|
|
73
73
|
function v(e) {
|
|
74
74
|
for (let n = e.length - 1; n >= 0; n--)
|
|
75
|
-
e.slice(0, n).find((t) =>
|
|
75
|
+
e.slice(0, n).find((t) => x(t, e[n])) && e.splice(n, 1);
|
|
76
76
|
return e;
|
|
77
77
|
}
|
|
78
78
|
function ct(e) {
|
|
79
79
|
return Array.isArray(e) ? e : [e];
|
|
80
80
|
}
|
|
81
|
-
class
|
|
81
|
+
class $ {
|
|
82
82
|
constructor() {
|
|
83
83
|
f(this, "listeners", {});
|
|
84
84
|
}
|
|
@@ -119,60 +119,59 @@ class N {
|
|
|
119
119
|
});
|
|
120
120
|
}
|
|
121
121
|
}
|
|
122
|
-
f(
|
|
123
|
-
const
|
|
124
|
-
constructor(
|
|
125
|
-
super();
|
|
122
|
+
f($, "listeners", {});
|
|
123
|
+
const y = class y {
|
|
124
|
+
constructor(n = {}) {
|
|
126
125
|
f(this, "interceptors", {});
|
|
127
126
|
f(this, "headers", {});
|
|
128
|
-
this.opts =
|
|
127
|
+
this.opts = n, n.interceptors && n.interceptors.forEach((t) => y.addInterceptor(t));
|
|
129
128
|
}
|
|
130
|
-
static addInterceptor(
|
|
131
|
-
const
|
|
132
|
-
return
|
|
133
|
-
|
|
129
|
+
static addInterceptor(n) {
|
|
130
|
+
const t = Object.keys(y.interceptors).length.toString();
|
|
131
|
+
return y.interceptors[t] = n, () => {
|
|
132
|
+
y.interceptors[t] = null;
|
|
134
133
|
};
|
|
135
134
|
}
|
|
136
|
-
addInterceptor(
|
|
137
|
-
const
|
|
138
|
-
return this.interceptors[
|
|
139
|
-
this.interceptors[
|
|
135
|
+
addInterceptor(n) {
|
|
136
|
+
const t = Object.keys(this.interceptors).length.toString();
|
|
137
|
+
return this.interceptors[t] = n, () => {
|
|
138
|
+
this.interceptors[t] = null;
|
|
140
139
|
};
|
|
141
140
|
}
|
|
142
|
-
async request(
|
|
143
|
-
var
|
|
144
|
-
if (!this.opts.url && !
|
|
141
|
+
async request(n = {}) {
|
|
142
|
+
var s, c;
|
|
143
|
+
if (!this.opts.url && !n.url)
|
|
145
144
|
throw new Error("Momentum server URL needs to be set");
|
|
146
|
-
const
|
|
147
|
-
"Content-Type":
|
|
148
|
-
...
|
|
145
|
+
const t = ((s = n.url) != null && s.startsWith("http") ? n.url : (this.opts.url || "") + n.url).replace(/([^:]\/)\/+/g, "$1"), r = q({
|
|
146
|
+
"Content-Type": n.body && !(n.body instanceof FormData) ? "application/json" : void 0,
|
|
147
|
+
...y.headers,
|
|
149
148
|
...this.headers,
|
|
150
|
-
...
|
|
151
|
-
})
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
149
|
+
...n.headers
|
|
150
|
+
});
|
|
151
|
+
return fetch(t, {
|
|
152
|
+
headers: r,
|
|
153
|
+
method: n.method || (n.body ? "POST" : "GET"),
|
|
154
|
+
body: (c = r["Content-Type"]) != null && c.startsWith("application/json") && n.body ? JSON.stringify(n.body) : n.body
|
|
155
|
+
}).then(async (i) => {
|
|
156
|
+
var p, A;
|
|
157
|
+
for (let R of [...Object.values(y.interceptors), ...Object.values(this.interceptors)])
|
|
158
|
+
await new Promise((U) => R(i, () => U(null)));
|
|
159
|
+
if (!i.ok)
|
|
160
|
+
throw Error(i.statusText);
|
|
161
|
+
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;
|
|
162
|
+
}).catch((i) => {
|
|
163
|
+
throw i;
|
|
164
164
|
});
|
|
165
|
-
return this.emit("REQUEST", s, t), s;
|
|
166
165
|
}
|
|
167
166
|
};
|
|
168
|
-
f(
|
|
169
|
-
let S =
|
|
167
|
+
f(y, "interceptors", {}), f(y, "headers", {});
|
|
168
|
+
let S = y;
|
|
170
169
|
S.addInterceptor((e, n) => {
|
|
171
170
|
if (e.status == 200)
|
|
172
171
|
return n();
|
|
173
|
-
throw e.status == 400 ? new b(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
|
|
172
|
+
throw e.status == 400 ? new b(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);
|
|
174
173
|
});
|
|
175
|
-
class
|
|
174
|
+
class E extends Error {
|
|
176
175
|
constructor(t, r) {
|
|
177
176
|
super(t);
|
|
178
177
|
f(this, "_code");
|
|
@@ -199,8 +198,8 @@ class w extends Error {
|
|
|
199
198
|
return this.message || super.toString();
|
|
200
199
|
}
|
|
201
200
|
}
|
|
202
|
-
f(
|
|
203
|
-
class b extends
|
|
201
|
+
f(E, "code", 500);
|
|
202
|
+
class b extends E {
|
|
204
203
|
constructor(n = "Bad Request") {
|
|
205
204
|
super(n);
|
|
206
205
|
}
|
|
@@ -209,7 +208,7 @@ class b extends w {
|
|
|
209
208
|
}
|
|
210
209
|
}
|
|
211
210
|
f(b, "code", 400);
|
|
212
|
-
class D extends
|
|
211
|
+
class D extends E {
|
|
213
212
|
constructor(n = "Unauthorized") {
|
|
214
213
|
super(n);
|
|
215
214
|
}
|
|
@@ -218,7 +217,7 @@ class D extends w {
|
|
|
218
217
|
}
|
|
219
218
|
}
|
|
220
219
|
f(D, "code", 401);
|
|
221
|
-
class G extends
|
|
220
|
+
class G extends E {
|
|
222
221
|
constructor(n = "Forbidden") {
|
|
223
222
|
super(n);
|
|
224
223
|
}
|
|
@@ -227,7 +226,7 @@ class G extends w {
|
|
|
227
226
|
}
|
|
228
227
|
}
|
|
229
228
|
f(G, "code", 403);
|
|
230
|
-
class k extends
|
|
229
|
+
class k extends E {
|
|
231
230
|
constructor(n = "Not Found") {
|
|
232
231
|
super(n);
|
|
233
232
|
}
|
|
@@ -236,7 +235,7 @@ class k extends w {
|
|
|
236
235
|
}
|
|
237
236
|
}
|
|
238
237
|
f(k, "code", 404);
|
|
239
|
-
class M extends
|
|
238
|
+
class M extends E {
|
|
240
239
|
constructor(n = "Internal Server Error") {
|
|
241
240
|
super(n);
|
|
242
241
|
}
|
|
@@ -245,7 +244,7 @@ class M extends w {
|
|
|
245
244
|
}
|
|
246
245
|
}
|
|
247
246
|
f(M, "code", 500);
|
|
248
|
-
const
|
|
247
|
+
const w = {
|
|
249
248
|
CLEAR: "\x1B[0m",
|
|
250
249
|
BRIGHT: "\x1B[1m",
|
|
251
250
|
DIM: "\x1B[2m",
|
|
@@ -270,7 +269,7 @@ const x = {
|
|
|
270
269
|
LIGHT_MAGENTA: "\x1B[95m",
|
|
271
270
|
LIGHT_CYAN: "\x1B[96m",
|
|
272
271
|
WHITE: "\x1B[97m"
|
|
273
|
-
},
|
|
272
|
+
}, it = {
|
|
274
273
|
BLACK: "\x1B[40m",
|
|
275
274
|
RED: "\x1B[41m",
|
|
276
275
|
GREEN: "\x1B[42m",
|
|
@@ -281,79 +280,79 @@ const x = {
|
|
|
281
280
|
WHITE: "\x1B[47m",
|
|
282
281
|
GREY: "\x1B[100m"
|
|
283
282
|
};
|
|
284
|
-
var
|
|
285
|
-
const
|
|
283
|
+
var P = /* @__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))(P || {});
|
|
284
|
+
const g = class g extends $ {
|
|
286
285
|
constructor(n) {
|
|
287
286
|
super(), this.namespace = n;
|
|
288
287
|
}
|
|
289
288
|
pad(n, t, r, o = !1) {
|
|
290
|
-
const s = n.toString(),
|
|
291
|
-
if (
|
|
289
|
+
const s = n.toString(), c = t - s.length;
|
|
290
|
+
if (c <= 0)
|
|
292
291
|
return s;
|
|
293
|
-
const
|
|
294
|
-
return o ? s +
|
|
292
|
+
const i = Array(~~(c / r.length)).fill(r).join("");
|
|
293
|
+
return o ? s + i : i + s;
|
|
295
294
|
}
|
|
296
295
|
format(...n) {
|
|
297
296
|
const t = /* @__PURE__ */ new Date();
|
|
298
297
|
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(" ")}`;
|
|
299
298
|
}
|
|
300
299
|
debug(...n) {
|
|
301
|
-
if (
|
|
300
|
+
if (g.LOG_LEVEL < 4)
|
|
302
301
|
return;
|
|
303
302
|
const t = this.format(...n);
|
|
304
|
-
|
|
303
|
+
g.emit(4, t), console.debug(B.LIGHT_GREY + t + w.CLEAR);
|
|
305
304
|
}
|
|
306
305
|
log(...n) {
|
|
307
|
-
if (
|
|
306
|
+
if (g.LOG_LEVEL < 3)
|
|
308
307
|
return;
|
|
309
308
|
const t = this.format(...n);
|
|
310
|
-
|
|
309
|
+
g.emit(3, t), console.log(w.CLEAR + t);
|
|
311
310
|
}
|
|
312
311
|
info(...n) {
|
|
313
|
-
if (
|
|
312
|
+
if (g.LOG_LEVEL < 2)
|
|
314
313
|
return;
|
|
315
314
|
const t = this.format(...n);
|
|
316
|
-
|
|
315
|
+
g.emit(2, t), console.info(B.BLUE + t + w.CLEAR);
|
|
317
316
|
}
|
|
318
317
|
warn(...n) {
|
|
319
|
-
if (
|
|
318
|
+
if (g.LOG_LEVEL < 1)
|
|
320
319
|
return;
|
|
321
320
|
const t = this.format(...n);
|
|
322
|
-
|
|
321
|
+
g.emit(1, t), console.warn(B.YELLOW + t + w.CLEAR);
|
|
323
322
|
}
|
|
324
323
|
error(...n) {
|
|
325
|
-
if (
|
|
324
|
+
if (g.LOG_LEVEL < 0)
|
|
326
325
|
return;
|
|
327
326
|
const t = this.format(...n);
|
|
328
|
-
|
|
327
|
+
g.emit(0, t), console.error(B.RED + t + w.CLEAR);
|
|
329
328
|
}
|
|
330
329
|
};
|
|
331
|
-
f(
|
|
332
|
-
let
|
|
333
|
-
function
|
|
330
|
+
f(g, "LOG_LEVEL", 4);
|
|
331
|
+
let O = g;
|
|
332
|
+
function ut(e, n) {
|
|
334
333
|
return e.length - e.replaceAll(n, "").length;
|
|
335
334
|
}
|
|
336
|
-
function
|
|
335
|
+
function at(e) {
|
|
337
336
|
return Array(e).fill(null).map(() => Math.round(Math.random() * 15).toString(16)).join("");
|
|
338
337
|
}
|
|
339
|
-
const C = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", L = "0123456789", I = "~`!@#$%^&*()_-+={[}]|\\:;\"'<,>.?/",
|
|
340
|
-
function
|
|
338
|
+
const C = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", L = "0123456789", I = "~`!@#$%^&*()_-+={[}]|\\:;\"'<,>.?/", F = C + L + I;
|
|
339
|
+
function lt(e) {
|
|
341
340
|
const n = /(\+?1)?.*?(\d{3}).*?(\d{3}).*?(\d{4})/g.exec(e);
|
|
342
341
|
if (!n)
|
|
343
342
|
throw new Error(`Number cannot be parsed: ${e}`);
|
|
344
343
|
return `${n[1] ?? ""} (${n[2]}) ${n[3]}-${n[4]}`.trim();
|
|
345
344
|
}
|
|
346
|
-
function
|
|
345
|
+
function ht(e, n, t) {
|
|
347
346
|
return `${e.slice(0, t)}${n}${e.slice(t + 1)}`;
|
|
348
347
|
}
|
|
349
|
-
function
|
|
348
|
+
function ft(e, n, t, r = !0) {
|
|
350
349
|
const o = e.toString(), s = n - o.length;
|
|
351
350
|
if (s <= 0)
|
|
352
351
|
return o;
|
|
353
|
-
const
|
|
354
|
-
return r ?
|
|
352
|
+
const c = Array(~~(s / t.length)).fill(t).join("");
|
|
353
|
+
return r ? c + o : o + c;
|
|
355
354
|
}
|
|
356
|
-
function gt(e, n =
|
|
355
|
+
function gt(e, n = F) {
|
|
357
356
|
return Array(e).fill(null).map(() => {
|
|
358
357
|
const t = ~~(Math.random() * n.length);
|
|
359
358
|
return n[t];
|
|
@@ -379,78 +378,78 @@ function dt(e, n) {
|
|
|
379
378
|
t.push(r);
|
|
380
379
|
return t;
|
|
381
380
|
}
|
|
382
|
-
function
|
|
383
|
-
var n =
|
|
381
|
+
function z(e) {
|
|
382
|
+
var n = J(V(Z(K(e), 8 * e.length)));
|
|
384
383
|
return n.toLowerCase();
|
|
385
384
|
}
|
|
386
|
-
function
|
|
385
|
+
function J(e) {
|
|
387
386
|
for (var n, t = "0123456789ABCDEF", r = "", o = 0; o < e.length; o++)
|
|
388
387
|
n = e.charCodeAt(o), r += t.charAt(n >>> 4 & 15) + t.charAt(15 & n);
|
|
389
388
|
return r;
|
|
390
389
|
}
|
|
391
|
-
function
|
|
390
|
+
function K(e) {
|
|
392
391
|
for (var n = Array(e.length >> 2), t = 0; t < n.length; t++)
|
|
393
392
|
n[t] = 0;
|
|
394
393
|
for (t = 0; t < 8 * e.length; t += 8)
|
|
395
394
|
n[t >> 5] |= (255 & e.charCodeAt(t / 8)) << t % 32;
|
|
396
395
|
return n;
|
|
397
396
|
}
|
|
398
|
-
function
|
|
397
|
+
function V(e) {
|
|
399
398
|
for (var n = "", t = 0; t < 32 * e.length; t += 8)
|
|
400
399
|
n += String.fromCharCode(e[t >> 5] >>> t % 32 & 255);
|
|
401
400
|
return n;
|
|
402
401
|
}
|
|
403
|
-
function
|
|
402
|
+
function Z(e, n) {
|
|
404
403
|
e[n >> 5] |= 128 << n % 32, e[14 + (n + 64 >>> 9 << 4)] = n;
|
|
405
|
-
for (var t = 1732584193, r = -271733879, o = -1732584194, s = 271733878,
|
|
406
|
-
var
|
|
407
|
-
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[
|
|
404
|
+
for (var t = 1732584193, r = -271733879, o = -1732584194, s = 271733878, c = 0; c < e.length; c += 16) {
|
|
405
|
+
var i = t, p = r, A = o, R = s;
|
|
406
|
+
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);
|
|
408
407
|
}
|
|
409
408
|
return Array(t, r, o, s);
|
|
410
409
|
}
|
|
411
410
|
function T(e, n, t, r, o, s) {
|
|
412
|
-
return d(
|
|
411
|
+
return d(Q(d(d(n, e), d(r, s)), o), t);
|
|
413
412
|
}
|
|
414
|
-
function u(e, n, t, r, o, s,
|
|
415
|
-
return T(n & t | ~n & r, e, n, o, s,
|
|
413
|
+
function u(e, n, t, r, o, s, c) {
|
|
414
|
+
return T(n & t | ~n & r, e, n, o, s, c);
|
|
416
415
|
}
|
|
417
|
-
function a(e, n, t, r, o, s,
|
|
418
|
-
return T(n & r | t & ~r, e, n, o, s,
|
|
416
|
+
function a(e, n, t, r, o, s, c) {
|
|
417
|
+
return T(n & r | t & ~r, e, n, o, s, c);
|
|
419
418
|
}
|
|
420
|
-
function l(e, n, t, r, o, s,
|
|
421
|
-
return T(n ^ t ^ r, e, n, o, s,
|
|
419
|
+
function l(e, n, t, r, o, s, c) {
|
|
420
|
+
return T(n ^ t ^ r, e, n, o, s, c);
|
|
422
421
|
}
|
|
423
|
-
function h(e, n, t, r, o, s,
|
|
424
|
-
return T(t ^ (n | ~r), e, n, o, s,
|
|
422
|
+
function h(e, n, t, r, o, s, c) {
|
|
423
|
+
return T(t ^ (n | ~r), e, n, o, s, c);
|
|
425
424
|
}
|
|
426
425
|
function d(e, n) {
|
|
427
426
|
var t = (65535 & e) + (65535 & n);
|
|
428
427
|
return (e >> 16) + (n >> 16) + (t >> 16) << 16 | 65535 & t;
|
|
429
428
|
}
|
|
430
|
-
function
|
|
429
|
+
function Q(e, n) {
|
|
431
430
|
return e << n | e >>> 32 - n;
|
|
432
431
|
}
|
|
433
|
-
function
|
|
432
|
+
function Et(e) {
|
|
434
433
|
return /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/.test(e);
|
|
435
434
|
}
|
|
436
|
-
function
|
|
435
|
+
function pt(e) {
|
|
437
436
|
return Object.entries(e).map(
|
|
438
437
|
([n, t]) => encodeURIComponent(n) + "=" + encodeURIComponent(t)
|
|
439
438
|
).join("&");
|
|
440
439
|
}
|
|
441
|
-
function
|
|
442
|
-
return e ? `https://www.gravatar.com/avatar/${
|
|
440
|
+
function wt(e, n = "mp") {
|
|
441
|
+
return e ? `https://www.gravatar.com/avatar/${z(e)}?d=${n}` : "";
|
|
443
442
|
}
|
|
444
|
-
function
|
|
443
|
+
function xt(e) {
|
|
445
444
|
const n = new RegExp(
|
|
446
445
|
"(?:(?<protocol>[\\w\\d]+)\\:\\/\\/)?(?:(?<user>.+)\\@)?(?<host>(?<domain>[^:\\/\\?#@\\n]+)(?:\\:(?<port>\\d*))?)(?<path>\\/.*?)?(?:\\?(?<query>.*?))?(?:#(?<fragment>.*?))?$",
|
|
447
446
|
"gm"
|
|
448
447
|
).exec(e), t = (n == null ? void 0 : n.groups) ?? {}, r = t.domain.split(".");
|
|
449
448
|
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) {
|
|
450
449
|
const o = t.query.split("&"), s = {};
|
|
451
|
-
o.forEach((
|
|
452
|
-
const [
|
|
453
|
-
s[
|
|
450
|
+
o.forEach((c) => {
|
|
451
|
+
const [i, p] = c.split("=");
|
|
452
|
+
s[i] = p;
|
|
454
453
|
}), t.query = s;
|
|
455
454
|
}
|
|
456
455
|
return t;
|
|
@@ -461,7 +460,7 @@ function At(e) {
|
|
|
461
460
|
function Bt(e) {
|
|
462
461
|
return new Promise((n) => setTimeout(n, e));
|
|
463
462
|
}
|
|
464
|
-
function
|
|
463
|
+
function mt(e) {
|
|
465
464
|
const n = e instanceof Date ? e : new Date(e);
|
|
466
465
|
return new Intl.DateTimeFormat("en-us", {
|
|
467
466
|
weekday: "long",
|
|
@@ -474,47 +473,47 @@ function Rt(e) {
|
|
|
474
473
|
}
|
|
475
474
|
export {
|
|
476
475
|
b as BadRequestError,
|
|
477
|
-
|
|
478
|
-
|
|
476
|
+
it as CliBackground,
|
|
477
|
+
w as CliEffects,
|
|
479
478
|
B as CliForeground,
|
|
480
|
-
|
|
479
|
+
E as CustomError,
|
|
481
480
|
G as ForbiddenError,
|
|
482
481
|
M as InternalServerError,
|
|
483
|
-
|
|
484
|
-
|
|
482
|
+
P as LOG_LEVEL,
|
|
483
|
+
O as Logger,
|
|
485
484
|
k as NotFoundError,
|
|
486
|
-
|
|
485
|
+
$ as TypedEmitter,
|
|
487
486
|
D as UnauthorizedError,
|
|
488
487
|
S as XHR,
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
488
|
+
et as addUnique,
|
|
489
|
+
nt as arrayDiff,
|
|
490
|
+
rt as caseInsensitiveSort,
|
|
491
|
+
q as clean,
|
|
492
|
+
ut as countChars,
|
|
493
|
+
at as createHex,
|
|
494
|
+
tt as deepCopy,
|
|
495
|
+
m as dotNotation,
|
|
496
|
+
st as findByProp,
|
|
497
|
+
W as flattenArr,
|
|
498
|
+
H as flattenObj,
|
|
499
|
+
pt as formEncode,
|
|
500
|
+
mt as formatDate,
|
|
501
|
+
lt as formatPhoneNumber,
|
|
502
|
+
wt as gravatar,
|
|
503
|
+
N as includes,
|
|
504
|
+
ht as insertAt,
|
|
505
|
+
x as isEqual,
|
|
507
506
|
ct as makeArray,
|
|
508
507
|
v as makeUnique,
|
|
509
508
|
dt as matchAll,
|
|
510
|
-
|
|
511
|
-
|
|
509
|
+
z as md5,
|
|
510
|
+
ft as pad,
|
|
512
511
|
gt as randomString,
|
|
513
512
|
yt as randomStringBuilder,
|
|
514
513
|
Bt as sleep,
|
|
515
|
-
|
|
514
|
+
ot as sortByProp,
|
|
516
515
|
At as timeUntil,
|
|
517
|
-
|
|
518
|
-
|
|
516
|
+
xt as urlParser,
|
|
517
|
+
Et as validateEmail
|
|
519
518
|
};
|
|
520
519
|
//# sourceMappingURL=utils.mjs.map
|
package/dist/utils.mjs.map
CHANGED
|
@@ -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","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 {TypedEmitter, type TypedEvents} from './emitter';\r\nimport {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 XhrEvents = TypedEvents & {\r\n\t'REQUEST': (request: Promise<any>, options: RequestOptions) => any;\r\n\t'RESPONSE': (response: Response, options: RequestOptions) => any;\r\n\t'REJECTED': (response: Error, options: RequestOptions) => any;\r\n\r\n};\r\n\r\nexport type XhrOptions = {\r\n\tinterceptors?: Interceptor[];\r\n\turl?: string;\r\n}\r\n\r\nexport class XHR extends TypedEmitter<XhrEvents> {\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\tsuper();\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\tthis.emit(`${resp.status}`, resp, opts);\r\n\t\t\tif(!resp.ok) throw Error(resp.statusText);\r\n\t\t\tthis.emit('RESPONSE', resp, opts);\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\tthis.emit('REJECTED', err, opts);\r\n\t\t\tthrow err;\r\n\t\t});\r\n\t\tthis.emit('REQUEST', req, opts)\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","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","req","resp","err","XHR","next","BadRequestError","UnauthorizedError","ForbiddenError","NotFoundError","InternalServerError","CustomError","message","code","c","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.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","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\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\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","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","c","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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"}
|
package/dist/xhr.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { TypedEmitter, type TypedEvents } from './emitter';
|
|
2
1
|
export type Interceptor = (request: Response, next: () => void) => void;
|
|
3
2
|
export type RequestOptions = {
|
|
4
3
|
url?: string;
|
|
@@ -9,16 +8,11 @@ export type RequestOptions = {
|
|
|
9
8
|
};
|
|
10
9
|
[key: string]: any;
|
|
11
10
|
};
|
|
12
|
-
export type XhrEvents = TypedEvents & {
|
|
13
|
-
'REQUEST': (request: Promise<any>, options: RequestOptions) => any;
|
|
14
|
-
'RESPONSE': (response: Response, options: RequestOptions) => any;
|
|
15
|
-
'REJECTED': (response: Error, options: RequestOptions) => any;
|
|
16
|
-
};
|
|
17
11
|
export type XhrOptions = {
|
|
18
12
|
interceptors?: Interceptor[];
|
|
19
13
|
url?: string;
|
|
20
14
|
};
|
|
21
|
-
export declare class XHR
|
|
15
|
+
export declare class XHR {
|
|
22
16
|
readonly opts: XhrOptions;
|
|
23
17
|
private static interceptors;
|
|
24
18
|
static headers: {
|