@ztimson/utils 0.7.2 → 0.8.0

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.
@@ -1,6 +1,7 @@
1
1
  import { TypedEmitter, TypedEvents } from './emitter';
2
- export type downloadEvents = TypedEvents & {
2
+ export type DownloadEvents = TypedEvents & {
3
3
  complete: (blob: Blob) => any;
4
+ failed: (error: Error) => any;
4
5
  progress: (progress: number) => any;
5
6
  };
6
7
  export declare function download(href: any, name: string): void;
@@ -10,6 +11,6 @@ export declare function download(href: any, name: string): void;
10
11
  *
11
12
  * @param {string} url
12
13
  * @param {string} downloadName
13
- * @return {TypedEmitter<downloadEvents>}
14
+ * @return {TypedEmitter<DownloadEvents>}
14
15
  */
15
- export declare function downloadProgress(url: string, downloadName?: string): TypedEmitter<downloadEvents>;
16
+ export declare function downloadProgress(url: string, downloadName?: string): TypedEmitter<DownloadEvents>;
package/dist/index.d.ts CHANGED
@@ -8,4 +8,5 @@ export * from './misc';
8
8
  export * from './objects';
9
9
  export * from './string';
10
10
  export * from './time';
11
+ export * from './upload';
11
12
  export * from './xhr';
@@ -0,0 +1,6 @@
1
+ import { TypedEvents } from './emitter';
2
+ export type UploadEvents = TypedEvents & {
3
+ complete: () => any;
4
+ failed: (err: Error) => any;
5
+ progress: (progress: number) => any;
6
+ };
package/dist/utils.cjs CHANGED
@@ -1,2 +1,2 @@
1
- (function(c,d){typeof exports=="object"&&typeof module<"u"?d(exports):typeof define=="function"&&define.amd?define(["exports"],d):(c=typeof globalThis<"u"?globalThis:c||self,d(c.utils={}))})(this,function(c){"use strict";var Lt=Object.defineProperty;var Tt=(c,d,A)=>d in c?Lt(c,d,{enumerable:!0,configurable:!0,writable:!0,value:A}):c[d]=A;var f=(c,d,A)=>(Tt(c,typeof d!="symbol"?d+"":d,A),A);function d(n,e=!1){if(n==null)throw new Error("Cannot clean a NULL value");return Array.isArray(n)?n=n.filter(t=>t!=null):Object.entries(n).forEach(([t,r])=>{(e&&r===void 0||!e&&r==null)&&delete n[t]}),n}function A(n){return JSON.parse(JSON.stringify(n))}function R(n,e,t){if(!(n==null||!e))return e.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]},n)}function Y(n,e,t={}){if(typeof n=="object"&&!Array.isArray(n)){for(const r of Object.keys(n)){const o=e?e+"."+r:r;typeof n[r]=="object"?Y(n[r],o,t):t[o]=n[r]}return t}}function $(n,e,t=!1){if(n==null)return t;if(Array.isArray(e))return e.findIndex((o,i)=>!$(n[i],e[i],t))==-1;const r=typeof e;return r!=typeof n?!1:r=="object"?Object.keys(e).find(o=>!$(n[o],e[o],t))==null:r=="function"?n.toString()==e.toString():n==e}function p(n,e){const t=typeof n,r=typeof e;return t!="object"||n==null||r!="object"||e==null?t=="function"&&r=="function"?n.toString()==e.toString():n===e:Object.keys(n).length!=Object.keys(e).length?!1:Object.keys(n).every(i=>p(n[i],e[i]))}function Z(n,e){e.forEach(t=>{Object.getOwnPropertyNames(t.prototype).forEach(r=>{Object.defineProperty(n.prototype,r,Object.getOwnPropertyDescriptor(t.prototype,r)||Object.create(null))})})}function Q(n,e){let t=[];return JSON.parse(JSON.stringify(n,(r,o)=>{if(typeof o=="object"&&o!==null){if(t.includes(o))return;t.push(o)}return o},e))}function X(n,e){return n.indexOf(e)===-1&&n.push(e),n}function _(n,e){return W([...n.filter(t=>!e.includes(r=>p(t,r))),...e.filter(t=>!n.includes(r=>p(t,r)))])}function tt(n){return function(e,t){const r=R(e,n),o=R(t,n);return typeof r!="string"||typeof o!="string"?1:r.toLowerCase().localeCompare(o.toLowerCase())}}function F(n,e=[]){return n.forEach(t=>Array.isArray(t)?F(t,e):e.push(t)),e}function et(n,e=!1){return function(t,r){const o=R(t,n),i=R(r,n);return typeof o=="number"&&typeof i=="number"?(e?-1:1)*(o-i):o>i?e?-1:1:o<i?e?1:-1:0}}function nt(n,e){return t=>p(t[n],e)}function W(n){for(let e=n.length-1;e>=0;e--)n.slice(0,e).find(t=>p(t,n[e]))&&n.splice(e,1);return n}function rt(n){return Array.isArray(n)?n:[n]}class C extends Array{get size(){return this.length}constructor(e=[]){super(),e!=null&&e.forEach&&e.forEach(t=>this.add(t))}add(e){this.has(e)||this.push(e)}delete(e){const t=this.indexOf(e);t!=-1&&this.slice(t,1)}difference(e){return new C(this.reduce((t,r)=>(e.has(r)||t.push(r),t),[]))}has(e){return this.indexOf(e)!=-1}intersection(e){return new C(this.reduce((t,r)=>(e.has(r)&&t.push(r),t),[]))}isDisjointFrom(e){return this.intersection(e).size==0}isSubsetOf(e){return this.findIndex(t=>!e.has(t))==-1}isSuperset(e){return e.findIndex(t=>!this.has(t))==-1}symmetricDifference(e){return new C([...this.difference(e),...e.difference(this)])}union(e){return new C([...this,...e])}}class N{constructor(){f(this,"listeners",{})}static emit(e,...t){(this.listeners["*"]||[]).forEach(r=>r(e,...t)),(this.listeners[e.toString()]||[]).forEach(r=>r(...t))}static off(e,t){const r=e.toString();this.listeners[r]=(this.listeners[r]||[]).filter(o=>o===t)}static on(e,t){var o;const r=e.toString();return this.listeners[r]||(this.listeners[r]=[]),(o=this.listeners[r])==null||o.push(t),()=>this.off(e,t)}static once(e,t){return new Promise(r=>{const o=this.on(e,(...i)=>{r(i.length==1?i[0]:i),t&&t(...i),o()})})}emit(e,...t){(this.listeners["*"]||[]).forEach(r=>r(e,...t)),(this.listeners[e]||[]).forEach(r=>r(...t))}off(e,t){this.listeners[e]=(this.listeners[e]||[]).filter(r=>r===t)}on(e,t){var r;return this.listeners[e]||(this.listeners[e]=[]),(r=this.listeners[e])==null||r.push(t),()=>this.off(e,t)}once(e,t){return new Promise(r=>{const o=this.on(e,(...i)=>{r(i.length==1?i[0]:i),t&&t(...i),o()})})}}f(N,"listeners",{});function z(n,e){const t=document.createElement("a");t.href=n,t.download=e,document.body.appendChild(t),t.click(),document.body.removeChild(t)}function ot(n,e){const t=new N;return fetch(n).then(r=>{var O;const o=r.headers.get("Content-Length")||"0",i=parseInt(o,10);let s=[],y=0;const E=(O=r.body)==null?void 0:O.getReader();E==null||E.read().then(function L(K){if(K.done){const T=new Blob(s);if(e){const D=URL.createObjectURL(T);z(D,e),URL.revokeObjectURL(D)}t.emit("complete",T)}else{const T=K.value;s.push(T),y+=T.length;const D=y/i;t.emit("progress",D),E.read().then(L)}})}),t}const m=class m{constructor(e={}){f(this,"interceptors",{});f(this,"headers",{});this.opts=e,this.headers=e.headers||{},e.interceptors&&e.interceptors.forEach(t=>m.addInterceptor(t))}static addInterceptor(e){const t=Object.keys(m.interceptors).length.toString();return m.interceptors[t]=e,()=>{m.interceptors[t]=null}}addInterceptor(e){const t=Object.keys(this.interceptors).length.toString();return this.interceptors[t]=e,()=>{this.interceptors[t]=null}}async request(e={}){var o,i;if(!this.opts.url&&!e.url)throw new Error("URL needs to be set");const t=((o=e.url)!=null&&o.startsWith("http")?e.url:(this.opts.url||"")+(e.url||"")).replace(/([^:]\/)\/+/g,"$1"),r=d({"Content-Type":e.body&&!(e.body instanceof FormData)?"application/json":void 0,...m.headers,...this.headers,...e.headers});return fetch(t,{headers:r,method:e.method||(e.body?"POST":"GET"),body:(i=r["Content-Type"])!=null&&i.startsWith("application/json")&&e.body?JSON.stringify(e.body):e.body}).then(async s=>{var y,E;for(let O of[...Object.values(m.interceptors),...Object.values(this.interceptors)])await new Promise(L=>O(s,()=>L()));if(!s.ok)throw new Error(s.statusText);return!e.skipConverting&&((y=s.headers.get("Content-Type"))!=null&&y.startsWith("application/json"))?await s.json():!e.skipConverting&&((E=s.headers.get("Content-Type"))!=null&&E.startsWith("text/plain"))?await s.text():s})}};f(m,"interceptors",{}),f(m,"headers",{});let I=m;I.addInterceptor((n,e)=>{if(n.status==200)return e();throw n.status==400?new U(n.statusText):n.status==401?new j(n.statusText):n.status==403?new G(n.statusText):n.status==404?new P(n.statusText):n.status==500?new M(n.statusText):new w(n.statusText,n.status)});class w extends Error{constructor(t,r){super(t);f(this,"_code");r!=null&&(this._code=r)}get code(){return this._code||this.constructor.code}set code(t){this._code=t}static from(t){const r=Number(t.statusCode)??Number(t.code),o=new this(t.message||t.toString());return Object.assign(o,{stack:t.stack,...t,code:r??void 0})}static instanceof(t){return t.constructor.code!=null}toString(){return this.message||super.toString()}}f(w,"code",500);class U extends w{constructor(e="Bad Request"){super(e)}static instanceof(e){return e.constructor.code==this.code}}f(U,"code",400);class j extends w{constructor(e="Unauthorized"){super(e)}static instanceof(e){return e.constructor.code==this.code}}f(j,"code",401);class G extends w{constructor(e="Forbidden"){super(e)}static instanceof(e){return e.constructor.code==this.code}}f(G,"code",403);class P extends w{constructor(e="Not Found"){super(e)}static instanceof(e){return e.constructor.code==this.code}}f(P,"code",404);class M extends w{constructor(e="Internal Server Error"){super(e)}static instanceof(e){return e.constructor.code==this.code}}f(M,"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"},b={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"},it={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 J=(n=>(n[n.ERROR=0]="ERROR",n[n.WARN=1]="WARN",n[n.INFO=2]="INFO",n[n.LOG=3]="LOG",n[n.DEBUG=4]="DEBUG",n))(J||{});const g=class g extends N{constructor(e){super(),this.namespace=e}pad(e,t,r,o=!1){const i=e.toString(),s=t-i.length;if(s<=0)return i;const y=Array(~~(s/r.length)).fill(r).join("");return o?i+y:y+i}format(...e){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}]`:""} ${e.join(" ")}`}debug(...e){if(g.LOG_LEVEL<4)return;const t=this.format(...e);g.emit(4,t),console.debug(b.LIGHT_GREY+t+S.CLEAR)}log(...e){if(g.LOG_LEVEL<3)return;const t=this.format(...e);g.emit(3,t),console.log(S.CLEAR+t)}info(...e){if(g.LOG_LEVEL<2)return;const t=this.format(...e);g.emit(2,t),console.info(b.BLUE+t+S.CLEAR)}warn(...e){if(g.LOG_LEVEL<1)return;const t=this.format(...e);g.emit(1,t),console.warn(b.YELLOW+t+S.CLEAR)}error(...e){if(g.LOG_LEVEL<0)return;const t=this.format(...e);g.emit(0,t),console.error(b.RED+t+S.CLEAR)}};f(g,"LOG_LEVEL",4);let v=g;function st(n,e){return n.length-n.replaceAll(e,"").length}function ct(n){return Array(n).fill(null).map(()=>Math.round(Math.random()*15).toString(16)).join("")}const x="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",q="0123456789",H="~`!@#$%^&*()_-+={[}]|\\:;\"'<,>.?/",ut=x+q+H;function at(n){const e=/(\+?1)?.*?(\d{3}).*?(\d{3}).*?(\d{4})/g.exec(n);if(!e)throw new Error(`Number cannot be parsed: ${n}`);return`${e[1]??""} (${e[2]}) ${e[3]}-${e[4]}`.trim()}function lt(n,e,t){return`${n.slice(0,t)}${e}${n.slice(t+1)}`}function ht(n,e,t,r=!0){const o=n.toString(),i=e-o.length;if(i<=0)return o;const s=Array(~~(i/t.length)).fill(t).join("");return r?s+o:o+s}function ft(n,e=ut){return Array(n).fill(null).map(()=>{const t=~~(Math.random()*e.length);return e[t]}).join("")}function dt(n,e=!1,t=!1,r=!1){if(!e&&!t&&!r)throw new Error("Must enable at least one: letters, numbers, symbols");return Array(n).fill(null).map(()=>{let o;do{const i=~~(Math.random()*3);e&&i==0?o=x[~~(Math.random()*x.length)]:t&&i==1?o=q[~~(Math.random()*q.length)]:r&&i==2&&(o=H[~~(Math.random()*H.length)])}while(!o);return o}).join("")}function gt(n,e){if(typeof e=="string"&&(e=new RegExp(e,"g")),!e.global)throw new TypeError("Regular expression must be global.");let t=[],r;for(;(r=e.exec(n))!==null;)t.push(r);return t}function V(n){var e=yt(mt(wt(Et(n),8*n.length)));return e.toLowerCase()}function yt(n){for(var e,t="0123456789ABCDEF",r="",o=0;o<n.length;o++)e=n.charCodeAt(o),r+=t.charAt(e>>>4&15)+t.charAt(15&e);return r}function Et(n){for(var e=Array(n.length>>2),t=0;t<e.length;t++)e[t]=0;for(t=0;t<8*n.length;t+=8)e[t>>5]|=(255&n.charCodeAt(t/8))<<t%32;return e}function mt(n){for(var e="",t=0;t<32*n.length;t+=8)e+=String.fromCharCode(n[t>>5]>>>t%32&255);return e}function wt(n,e){n[e>>5]|=128<<e%32,n[14+(e+64>>>9<<4)]=e;for(var t=1732584193,r=-271733879,o=-1732584194,i=271733878,s=0;s<n.length;s+=16){var y=t,E=r,O=o,L=i;r=h(r=h(r=h(r=h(r=l(r=l(r=l(r=l(r=a(r=a(r=a(r=a(r=u(r=u(r=u(r=u(r,o=u(o,i=u(i,t=u(t,r,o,i,n[s+0],7,-680876936),r,o,n[s+1],12,-389564586),t,r,n[s+2],17,606105819),i,t,n[s+3],22,-1044525330),o=u(o,i=u(i,t=u(t,r,o,i,n[s+4],7,-176418897),r,o,n[s+5],12,1200080426),t,r,n[s+6],17,-1473231341),i,t,n[s+7],22,-45705983),o=u(o,i=u(i,t=u(t,r,o,i,n[s+8],7,1770035416),r,o,n[s+9],12,-1958414417),t,r,n[s+10],17,-42063),i,t,n[s+11],22,-1990404162),o=u(o,i=u(i,t=u(t,r,o,i,n[s+12],7,1804603682),r,o,n[s+13],12,-40341101),t,r,n[s+14],17,-1502002290),i,t,n[s+15],22,1236535329),o=a(o,i=a(i,t=a(t,r,o,i,n[s+1],5,-165796510),r,o,n[s+6],9,-1069501632),t,r,n[s+11],14,643717713),i,t,n[s+0],20,-373897302),o=a(o,i=a(i,t=a(t,r,o,i,n[s+5],5,-701558691),r,o,n[s+10],9,38016083),t,r,n[s+15],14,-660478335),i,t,n[s+4],20,-405537848),o=a(o,i=a(i,t=a(t,r,o,i,n[s+9],5,568446438),r,o,n[s+14],9,-1019803690),t,r,n[s+3],14,-187363961),i,t,n[s+8],20,1163531501),o=a(o,i=a(i,t=a(t,r,o,i,n[s+13],5,-1444681467),r,o,n[s+2],9,-51403784),t,r,n[s+7],14,1735328473),i,t,n[s+12],20,-1926607734),o=l(o,i=l(i,t=l(t,r,o,i,n[s+5],4,-378558),r,o,n[s+8],11,-2022574463),t,r,n[s+11],16,1839030562),i,t,n[s+14],23,-35309556),o=l(o,i=l(i,t=l(t,r,o,i,n[s+1],4,-1530992060),r,o,n[s+4],11,1272893353),t,r,n[s+7],16,-155497632),i,t,n[s+10],23,-1094730640),o=l(o,i=l(i,t=l(t,r,o,i,n[s+13],4,681279174),r,o,n[s+0],11,-358537222),t,r,n[s+3],16,-722521979),i,t,n[s+6],23,76029189),o=l(o,i=l(i,t=l(t,r,o,i,n[s+9],4,-640364487),r,o,n[s+12],11,-421815835),t,r,n[s+15],16,530742520),i,t,n[s+2],23,-995338651),o=h(o,i=h(i,t=h(t,r,o,i,n[s+0],6,-198630844),r,o,n[s+7],10,1126891415),t,r,n[s+14],15,-1416354905),i,t,n[s+5],21,-57434055),o=h(o,i=h(i,t=h(t,r,o,i,n[s+12],6,1700485571),r,o,n[s+3],10,-1894986606),t,r,n[s+10],15,-1051523),i,t,n[s+1],21,-2054922799),o=h(o,i=h(i,t=h(t,r,o,i,n[s+8],6,1873313359),r,o,n[s+15],10,-30611744),t,r,n[s+6],15,-1560198380),i,t,n[s+13],21,1309151649),o=h(o,i=h(i,t=h(t,r,o,i,n[s+4],6,-145523070),r,o,n[s+11],10,-1120210379),t,r,n[s+2],15,718787259),i,t,n[s+9],21,-343485551),t=B(t,y),r=B(r,E),o=B(o,O),i=B(i,L)}return Array(t,r,o,i)}function k(n,e,t,r,o,i){return B(Bt(B(B(e,n),B(r,i)),o),t)}function u(n,e,t,r,o,i,s){return k(e&t|~e&r,n,e,o,i,s)}function a(n,e,t,r,o,i,s){return k(e&r|t&~r,n,e,o,i,s)}function l(n,e,t,r,o,i,s){return k(e^t^r,n,e,o,i,s)}function h(n,e,t,r,o,i,s){return k(t^(e|~r),n,e,o,i,s)}function B(n,e){var t=(65535&n)+(65535&e);return(n>>16)+(e>>16)+(t>>16)<<16|65535&t}function Bt(n,e){return n<<e|n>>>32-e}function At(n){return/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/.test(n)}function pt(n){return Object.entries(n).map(([e,t])=>encodeURIComponent(e)+"="+encodeURIComponent(t)).join("&")}function Ct(n,e="mp"){return n?`https://www.gravatar.com/avatar/${V(n)}?d=${e}`:""}function St(n){const e=new RegExp("(?:(?<protocol>[\\w\\d]+)\\:\\/\\/)?(?:(?<user>.+)\\@)?(?<host>(?<domain>[^:\\/\\?#@\\n]+)(?:\\:(?<port>\\d*))?)(?<path>\\/.*?)?(?:\\?(?<query>.*?))?(?:#(?<fragment>.*?))?$","gm").exec(n),t=(e==null?void 0:e.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[y,E]=s.split("=");i[y]=E}),t.query=i}return t}function Ot(n){return(n instanceof Date?n.getTime():n)-new Date().getTime()}function Rt(n){return new Promise(e=>setTimeout(e,n))}function bt(n){const e=n instanceof Date?n:new Date(n);return new Intl.DateTimeFormat("en-us",{weekday:"long",month:"short",day:"numeric",hour:"numeric",minute:"numeric",hour12:!0}).format(e)}c.ASet=C,c.BadRequestError=U,c.CliBackground=it,c.CliEffects=S,c.CliForeground=b,c.CustomError=w,c.ForbiddenError=G,c.InternalServerError=M,c.LOG_LEVEL=J,c.Logger=v,c.NotFoundError=P,c.TypedEmitter=N,c.UnauthorizedError=j,c.XHR=I,c.addUnique=X,c.arrayDiff=_,c.caseInsensitiveSort=tt,c.clean=d,c.countChars=st,c.createHex=ct,c.deepCopy=A,c.dotNotation=R,c.download=z,c.downloadProgress=ot,c.findByProp=nt,c.flattenArr=F,c.flattenObj=Y,c.formEncode=pt,c.formatDate=bt,c.formatPhoneNumber=at,c.gravatar=Ct,c.includes=$,c.insertAt=lt,c.isEqual=p,c.makeArray=rt,c.makeUnique=W,c.matchAll=gt,c.md5=V,c.mixin=Z,c.pad=ht,c.randomString=ft,c.randomStringBuilder=dt,c.sanitizedJSON=Q,c.sleep=Rt,c.sortByProp=et,c.timeUntil=Ot,c.urlParser=St,c.validateEmail=At,Object.defineProperty(c,Symbol.toStringTag,{value:"Module"})});
1
+ (function(c,d){typeof exports=="object"&&typeof module<"u"?d(exports):typeof define=="function"&&define.amd?define(["exports"],d):(c=typeof globalThis<"u"?globalThis:c||self,d(c.utils={}))})(this,function(c){"use strict";var Tt=Object.defineProperty;var Lt=(c,d,A)=>d in c?Tt(c,d,{enumerable:!0,configurable:!0,writable:!0,value:A}):c[d]=A;var f=(c,d,A)=>(Lt(c,typeof d!="symbol"?d+"":d,A),A);function d(n,e=!1){if(n==null)throw new Error("Cannot clean a NULL value");return Array.isArray(n)?n=n.filter(t=>t!=null):Object.entries(n).forEach(([t,r])=>{(e&&r===void 0||!e&&r==null)&&delete n[t]}),n}function A(n){return JSON.parse(JSON.stringify(n))}function R(n,e,t){if(!(n==null||!e))return e.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]},n)}function H(n,e,t={}){if(typeof n=="object"&&!Array.isArray(n)){for(const r of Object.keys(n)){const o=e?e+"."+r:r;typeof n[r]=="object"?H(n[r],o,t):t[o]=n[r]}return t}}function D(n,e,t=!1){if(n==null)return t;if(Array.isArray(e))return e.findIndex((o,i)=>!D(n[i],e[i],t))==-1;const r=typeof e;return r!=typeof n?!1:r=="object"?Object.keys(e).find(o=>!D(n[o],e[o],t))==null:r=="function"?n.toString()==e.toString():n==e}function C(n,e){const t=typeof n,r=typeof e;return t!="object"||n==null||r!="object"||e==null?t=="function"&&r=="function"?n.toString()==e.toString():n===e:Object.keys(n).length!=Object.keys(e).length?!1:Object.keys(n).every(i=>C(n[i],e[i]))}function Z(n,e){e.forEach(t=>{Object.getOwnPropertyNames(t.prototype).forEach(r=>{Object.defineProperty(n.prototype,r,Object.getOwnPropertyDescriptor(t.prototype,r)||Object.create(null))})})}function Q(n,e){let t=[];return JSON.parse(JSON.stringify(n,(r,o)=>{if(typeof o=="object"&&o!==null){if(t.includes(o))return;t.push(o)}return o},e))}function X(n,e){return n.indexOf(e)===-1&&n.push(e),n}function _(n,e){return F([...n.filter(t=>!e.includes(r=>C(t,r))),...e.filter(t=>!n.includes(r=>C(t,r)))])}function tt(n){return function(e,t){const r=R(e,n),o=R(t,n);return typeof r!="string"||typeof o!="string"?1:r.toLowerCase().localeCompare(o.toLowerCase())}}function Y(n,e=[]){return n.forEach(t=>Array.isArray(t)?Y(t,e):e.push(t)),e}function et(n,e=!1){return function(t,r){const o=R(t,n),i=R(r,n);return typeof o=="number"&&typeof i=="number"?(e?-1:1)*(o-i):o>i?e?-1:1:o<i?e?1:-1:0}}function nt(n,e){return t=>C(t[n],e)}function F(n){for(let e=n.length-1;e>=0;e--)n.slice(0,e).find(t=>C(t,n[e]))&&n.splice(e,1);return n}function rt(n){return Array.isArray(n)?n:[n]}class S extends Array{get size(){return this.length}constructor(e=[]){super(),e!=null&&e.forEach&&e.forEach(t=>this.add(t))}add(e){this.has(e)||this.push(e)}delete(e){const t=this.indexOf(e);t!=-1&&this.slice(t,1)}difference(e){return new S(this.reduce((t,r)=>(e.has(r)||t.push(r),t),[]))}has(e){return this.indexOf(e)!=-1}intersection(e){return new S(this.reduce((t,r)=>(e.has(r)&&t.push(r),t),[]))}isDisjointFrom(e){return this.intersection(e).size==0}isSubsetOf(e){return this.findIndex(t=>!e.has(t))==-1}isSuperset(e){return e.findIndex(t=>!this.has(t))==-1}symmetricDifference(e){return new S([...this.difference(e),...e.difference(this)])}union(e){return new S([...this,...e])}}class N{constructor(){f(this,"listeners",{})}static emit(e,...t){(this.listeners["*"]||[]).forEach(r=>r(e,...t)),(this.listeners[e.toString()]||[]).forEach(r=>r(...t))}static off(e,t){const r=e.toString();this.listeners[r]=(this.listeners[r]||[]).filter(o=>o===t)}static on(e,t){var o;const r=e.toString();return this.listeners[r]||(this.listeners[r]=[]),(o=this.listeners[r])==null||o.push(t),()=>this.off(e,t)}static once(e,t){return new Promise(r=>{const o=this.on(e,(...i)=>{r(i.length==1?i[0]:i),t&&t(...i),o()})})}emit(e,...t){(this.listeners["*"]||[]).forEach(r=>r(e,...t)),(this.listeners[e]||[]).forEach(r=>r(...t))}off(e,t){this.listeners[e]=(this.listeners[e]||[]).filter(r=>r===t)}on(e,t){var r;return this.listeners[e]||(this.listeners[e]=[]),(r=this.listeners[e])==null||r.push(t),()=>this.off(e,t)}once(e,t){return new Promise(r=>{const o=this.on(e,(...i)=>{r(i.length==1?i[0]:i),t&&t(...i),o()})})}}f(N,"listeners",{});function W(n,e){const t=document.createElement("a");t.href=n,t.download=e,document.body.appendChild(t),t.click(),document.body.removeChild(t)}function ot(n,e){const t=new N;return fetch(n).then(r=>{var O;if(!r.ok)return t.emit("failed",new Error(r.statusText));const o=r.headers.get("Content-Length")||"0",i=parseInt(o,10);let s=[],y=0;const E=(O=r.body)==null?void 0:O.getReader();E==null||E.read().then(function T(V){if(V.done){const L=new Blob(s);if(e){const K=URL.createObjectURL(L);W(K,e),URL.revokeObjectURL(K)}t.emit("complete",L)}else{const L=V.value;s.push(L),y+=L.length,t.emit("progress",y/i),E.read().then(T)}})}).catch(r=>t.emit("failed",r)),t}const m=class m{constructor(e={}){f(this,"interceptors",{});f(this,"headers",{});this.opts=e,this.headers=e.headers||{},e.interceptors&&e.interceptors.forEach(t=>m.addInterceptor(t))}static addInterceptor(e){const t=Object.keys(m.interceptors).length.toString();return m.interceptors[t]=e,()=>{m.interceptors[t]=null}}addInterceptor(e){const t=Object.keys(this.interceptors).length.toString();return this.interceptors[t]=e,()=>{this.interceptors[t]=null}}async request(e={}){var o,i;if(!this.opts.url&&!e.url)throw new Error("URL needs to be set");const t=((o=e.url)!=null&&o.startsWith("http")?e.url:(this.opts.url||"")+(e.url||"")).replace(/([^:]\/)\/+/g,"$1"),r=d({"Content-Type":e.body&&!(e.body instanceof FormData)?"application/json":void 0,...m.headers,...this.headers,...e.headers});return fetch(t,{headers:r,method:e.method||(e.body?"POST":"GET"),body:(i=r["Content-Type"])!=null&&i.startsWith("application/json")&&e.body?JSON.stringify(e.body):e.body}).then(async s=>{var y,E;for(let O of[...Object.values(m.interceptors),...Object.values(this.interceptors)])await new Promise(T=>O(s,()=>T()));if(!s.ok)throw new Error(s.statusText);return!e.skipConverting&&((y=s.headers.get("Content-Type"))!=null&&y.startsWith("application/json"))?await s.json():!e.skipConverting&&((E=s.headers.get("Content-Type"))!=null&&E.startsWith("text/plain"))?await s.text():s})}};f(m,"interceptors",{}),f(m,"headers",{});let I=m;I.addInterceptor((n,e)=>{if(n.status==200)return e();throw n.status==400?new $(n.statusText):n.status==401?new U(n.statusText):n.status==403?new j(n.statusText):n.status==404?new G(n.statusText):n.status==500?new P(n.statusText):new w(n.statusText,n.status)});class w extends Error{constructor(t,r){super(t);f(this,"_code");r!=null&&(this._code=r)}get code(){return this._code||this.constructor.code}set code(t){this._code=t}static from(t){const r=Number(t.statusCode)??Number(t.code),o=new this(t.message||t.toString());return Object.assign(o,{stack:t.stack,...t,code:r??void 0})}static instanceof(t){return t.constructor.code!=null}toString(){return this.message||super.toString()}}f(w,"code",500);class $ extends w{constructor(e="Bad Request"){super(e)}static instanceof(e){return e.constructor.code==this.code}}f($,"code",400);class U extends w{constructor(e="Unauthorized"){super(e)}static instanceof(e){return e.constructor.code==this.code}}f(U,"code",401);class j extends w{constructor(e="Forbidden"){super(e)}static instanceof(e){return e.constructor.code==this.code}}f(j,"code",403);class G extends w{constructor(e="Not Found"){super(e)}static instanceof(e){return e.constructor.code==this.code}}f(G,"code",404);class P extends w{constructor(e="Internal Server Error"){super(e)}static instanceof(e){return e.constructor.code==this.code}}f(P,"code",500);const p={CLEAR:"\x1B[0m",BRIGHT:"\x1B[1m",DIM:"\x1B[2m",UNDERSCORE:"\x1B[4m",BLINK:"\x1B[5m",REVERSE:"\x1B[7m",HIDDEN:"\x1B[8m"},b={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"},it={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 z=(n=>(n[n.ERROR=0]="ERROR",n[n.WARN=1]="WARN",n[n.INFO=2]="INFO",n[n.LOG=3]="LOG",n[n.DEBUG=4]="DEBUG",n))(z||{});const g=class g extends N{constructor(e){super(),this.namespace=e}pad(e,t,r,o=!1){const i=e.toString(),s=t-i.length;if(s<=0)return i;const y=Array(~~(s/r.length)).fill(r).join("");return o?i+y:y+i}format(...e){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}]`:""} ${e.join(" ")}`}debug(...e){if(g.LOG_LEVEL<4)return;const t=this.format(...e);g.emit(4,t),console.debug(b.LIGHT_GREY+t+p.CLEAR)}log(...e){if(g.LOG_LEVEL<3)return;const t=this.format(...e);g.emit(3,t),console.log(p.CLEAR+t)}info(...e){if(g.LOG_LEVEL<2)return;const t=this.format(...e);g.emit(2,t),console.info(b.BLUE+t+p.CLEAR)}warn(...e){if(g.LOG_LEVEL<1)return;const t=this.format(...e);g.emit(1,t),console.warn(b.YELLOW+t+p.CLEAR)}error(...e){if(g.LOG_LEVEL<0)return;const t=this.format(...e);g.emit(0,t),console.error(b.RED+t+p.CLEAR)}};f(g,"LOG_LEVEL",4);let M=g;function st(n,e){return n.length-n.replaceAll(e,"").length}function ct(n){return Array(n).fill(null).map(()=>Math.round(Math.random()*15).toString(16)).join("")}const x="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",v="0123456789",q="~`!@#$%^&*()_-+={[}]|\\:;\"'<,>.?/",ut=x+v+q;function at(n){const e=/(\+?1)?.*?(\d{3}).*?(\d{3}).*?(\d{4})/g.exec(n);if(!e)throw new Error(`Number cannot be parsed: ${n}`);return`${e[1]??""} (${e[2]}) ${e[3]}-${e[4]}`.trim()}function lt(n,e,t){return`${n.slice(0,t)}${e}${n.slice(t+1)}`}function ht(n,e,t,r=!0){const o=n.toString(),i=e-o.length;if(i<=0)return o;const s=Array(~~(i/t.length)).fill(t).join("");return r?s+o:o+s}function ft(n,e=ut){return Array(n).fill(null).map(()=>{const t=~~(Math.random()*e.length);return e[t]}).join("")}function dt(n,e=!1,t=!1,r=!1){if(!e&&!t&&!r)throw new Error("Must enable at least one: letters, numbers, symbols");return Array(n).fill(null).map(()=>{let o;do{const i=~~(Math.random()*3);e&&i==0?o=x[~~(Math.random()*x.length)]:t&&i==1?o=v[~~(Math.random()*v.length)]:r&&i==2&&(o=q[~~(Math.random()*q.length)])}while(!o);return o}).join("")}function gt(n,e){if(typeof e=="string"&&(e=new RegExp(e,"g")),!e.global)throw new TypeError("Regular expression must be global.");let t=[],r;for(;(r=e.exec(n))!==null;)t.push(r);return t}function J(n){var e=yt(mt(wt(Et(n),8*n.length)));return e.toLowerCase()}function yt(n){for(var e,t="0123456789ABCDEF",r="",o=0;o<n.length;o++)e=n.charCodeAt(o),r+=t.charAt(e>>>4&15)+t.charAt(15&e);return r}function Et(n){for(var e=Array(n.length>>2),t=0;t<e.length;t++)e[t]=0;for(t=0;t<8*n.length;t+=8)e[t>>5]|=(255&n.charCodeAt(t/8))<<t%32;return e}function mt(n){for(var e="",t=0;t<32*n.length;t+=8)e+=String.fromCharCode(n[t>>5]>>>t%32&255);return e}function wt(n,e){n[e>>5]|=128<<e%32,n[14+(e+64>>>9<<4)]=e;for(var t=1732584193,r=-271733879,o=-1732584194,i=271733878,s=0;s<n.length;s+=16){var y=t,E=r,O=o,T=i;r=h(r=h(r=h(r=h(r=l(r=l(r=l(r=l(r=a(r=a(r=a(r=a(r=u(r=u(r=u(r=u(r,o=u(o,i=u(i,t=u(t,r,o,i,n[s+0],7,-680876936),r,o,n[s+1],12,-389564586),t,r,n[s+2],17,606105819),i,t,n[s+3],22,-1044525330),o=u(o,i=u(i,t=u(t,r,o,i,n[s+4],7,-176418897),r,o,n[s+5],12,1200080426),t,r,n[s+6],17,-1473231341),i,t,n[s+7],22,-45705983),o=u(o,i=u(i,t=u(t,r,o,i,n[s+8],7,1770035416),r,o,n[s+9],12,-1958414417),t,r,n[s+10],17,-42063),i,t,n[s+11],22,-1990404162),o=u(o,i=u(i,t=u(t,r,o,i,n[s+12],7,1804603682),r,o,n[s+13],12,-40341101),t,r,n[s+14],17,-1502002290),i,t,n[s+15],22,1236535329),o=a(o,i=a(i,t=a(t,r,o,i,n[s+1],5,-165796510),r,o,n[s+6],9,-1069501632),t,r,n[s+11],14,643717713),i,t,n[s+0],20,-373897302),o=a(o,i=a(i,t=a(t,r,o,i,n[s+5],5,-701558691),r,o,n[s+10],9,38016083),t,r,n[s+15],14,-660478335),i,t,n[s+4],20,-405537848),o=a(o,i=a(i,t=a(t,r,o,i,n[s+9],5,568446438),r,o,n[s+14],9,-1019803690),t,r,n[s+3],14,-187363961),i,t,n[s+8],20,1163531501),o=a(o,i=a(i,t=a(t,r,o,i,n[s+13],5,-1444681467),r,o,n[s+2],9,-51403784),t,r,n[s+7],14,1735328473),i,t,n[s+12],20,-1926607734),o=l(o,i=l(i,t=l(t,r,o,i,n[s+5],4,-378558),r,o,n[s+8],11,-2022574463),t,r,n[s+11],16,1839030562),i,t,n[s+14],23,-35309556),o=l(o,i=l(i,t=l(t,r,o,i,n[s+1],4,-1530992060),r,o,n[s+4],11,1272893353),t,r,n[s+7],16,-155497632),i,t,n[s+10],23,-1094730640),o=l(o,i=l(i,t=l(t,r,o,i,n[s+13],4,681279174),r,o,n[s+0],11,-358537222),t,r,n[s+3],16,-722521979),i,t,n[s+6],23,76029189),o=l(o,i=l(i,t=l(t,r,o,i,n[s+9],4,-640364487),r,o,n[s+12],11,-421815835),t,r,n[s+15],16,530742520),i,t,n[s+2],23,-995338651),o=h(o,i=h(i,t=h(t,r,o,i,n[s+0],6,-198630844),r,o,n[s+7],10,1126891415),t,r,n[s+14],15,-1416354905),i,t,n[s+5],21,-57434055),o=h(o,i=h(i,t=h(t,r,o,i,n[s+12],6,1700485571),r,o,n[s+3],10,-1894986606),t,r,n[s+10],15,-1051523),i,t,n[s+1],21,-2054922799),o=h(o,i=h(i,t=h(t,r,o,i,n[s+8],6,1873313359),r,o,n[s+15],10,-30611744),t,r,n[s+6],15,-1560198380),i,t,n[s+13],21,1309151649),o=h(o,i=h(i,t=h(t,r,o,i,n[s+4],6,-145523070),r,o,n[s+11],10,-1120210379),t,r,n[s+2],15,718787259),i,t,n[s+9],21,-343485551),t=B(t,y),r=B(r,E),o=B(o,O),i=B(i,T)}return Array(t,r,o,i)}function k(n,e,t,r,o,i){return B(Bt(B(B(e,n),B(r,i)),o),t)}function u(n,e,t,r,o,i,s){return k(e&t|~e&r,n,e,o,i,s)}function a(n,e,t,r,o,i,s){return k(e&r|t&~r,n,e,o,i,s)}function l(n,e,t,r,o,i,s){return k(e^t^r,n,e,o,i,s)}function h(n,e,t,r,o,i,s){return k(t^(e|~r),n,e,o,i,s)}function B(n,e){var t=(65535&n)+(65535&e);return(n>>16)+(e>>16)+(t>>16)<<16|65535&t}function Bt(n,e){return n<<e|n>>>32-e}function At(n){return/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/.test(n)}function Ct(n){return Object.entries(n).map(([e,t])=>encodeURIComponent(e)+"="+encodeURIComponent(t)).join("&")}function St(n,e="mp"){return n?`https://www.gravatar.com/avatar/${J(n)}?d=${e}`:""}function pt(n){const e=new RegExp("(?:(?<protocol>[\\w\\d]+)\\:\\/\\/)?(?:(?<user>.+)\\@)?(?<host>(?<domain>[^:\\/\\?#@\\n]+)(?:\\:(?<port>\\d*))?)(?<path>\\/.*?)?(?:\\?(?<query>.*?))?(?:#(?<fragment>.*?))?$","gm").exec(n),t=(e==null?void 0:e.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[y,E]=s.split("=");i[y]=E}),t.query=i}return t}function Ot(n){return(n instanceof Date?n.getTime():n)-new Date().getTime()}function Rt(n){return new Promise(e=>setTimeout(e,n))}function bt(n){const e=n instanceof Date?n:new Date(n);return new Intl.DateTimeFormat("en-us",{weekday:"long",month:"short",day:"numeric",hour:"numeric",minute:"numeric",hour12:!0}).format(e)}c.ASet=S,c.BadRequestError=$,c.CliBackground=it,c.CliEffects=p,c.CliForeground=b,c.CustomError=w,c.ForbiddenError=j,c.InternalServerError=P,c.LOG_LEVEL=z,c.Logger=M,c.NotFoundError=G,c.TypedEmitter=N,c.UnauthorizedError=U,c.XHR=I,c.addUnique=X,c.arrayDiff=_,c.caseInsensitiveSort=tt,c.clean=d,c.countChars=st,c.createHex=ct,c.deepCopy=A,c.dotNotation=R,c.download=W,c.downloadProgress=ot,c.findByProp=nt,c.flattenArr=Y,c.flattenObj=H,c.formEncode=Ct,c.formatDate=bt,c.formatPhoneNumber=at,c.gravatar=St,c.includes=D,c.insertAt=lt,c.isEqual=C,c.makeArray=rt,c.makeUnique=F,c.matchAll=gt,c.md5=J,c.mixin=Z,c.pad=ht,c.randomString=ft,c.randomStringBuilder=dt,c.sanitizedJSON=Q,c.sleep=Rt,c.sortByProp=et,c.timeUntil=Ot,c.urlParser=pt,c.validateEmail=At,Object.defineProperty(c,Symbol.toStringTag,{value:"Module"})});
2
2
  //# sourceMappingURL=utils.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.cjs","sources":["../src/objects.ts","../src/array.ts","../src/aset.ts","../src/emitter.ts","../src/download.ts","../src/xhr.ts","../src/errors.ts","../src/logger.ts","../src/string.ts","../src/misc.ts","../src/time.ts"],"sourcesContent":["/**\r\n * Removes any null values from an object in-place\r\n *\r\n * @example\r\n * ```ts\r\n * let test = {a: 0, b: false, c: null, d: 'abc'}\r\n * console.log(clean(test)); // Output: {a: 0, b: false, d: 'abc'}\r\n * ```\r\n *\r\n * @param {T} obj Object reference that will be cleaned\r\n * @param undefinedOnly Ignore null values\r\n * @returns {Partial<T>} Cleaned object\r\n */\r\nexport function clean<T>(obj: T, undefinedOnly = false): Partial<T> {\r\n\tif(obj == null) throw new Error(\"Cannot clean a NULL value\");\r\n\tif(Array.isArray(obj)) {\r\n\t\tobj = <any>obj.filter(o => o != null);\r\n\t} else {\r\n\t\tObject.entries(obj).forEach(([key, value]) => {\r\n\t\t\tif((undefinedOnly && value === undefined) || (!undefinedOnly && value == null)) delete (<any>obj)[key];\r\n\t\t});\r\n\t}\r\n\treturn <any>obj;\r\n}\r\n\r\n/**\r\n * Create a deep copy of an object (vs. a shallow copy of references)\r\n *\r\n * Should be replaced by `structuredClone` once released.\r\n *\r\n * @param {T} value Object to copy\r\n * @returns {T} Type\r\n */\r\nexport function deepCopy<T>(value: T): T {\r\n\treturn JSON.parse(JSON.stringify(value));\r\n}\r\n\r\n/**\r\n * Get/set a property of an object using dot notation\r\n *\r\n * @example\r\n * ```ts\r\n * // Get a value\r\n * const name = dotNotation<string>(person, 'firstName');\r\n * const familyCarMake = dotNotation(family, 'cars[0].make');\r\n * // Set a value\r\n * dotNotation(family, 'cars[0].make', 'toyota');\r\n * ```\r\n *\r\n * @type T Return type\r\n * @param {Object} obj source object to search\r\n * @param {string} prop property name (Dot notation & indexing allowed)\r\n * @param {any} set Set object property to value, omit to fetch value instead\r\n * @return {T} property value\r\n */\r\nexport function dotNotation<T>(obj: any, prop: string, set: T): T;\r\nexport function dotNotation<T>(obj: any, prop: string): T | undefined;\r\nexport function dotNotation<T>(obj: any, prop: string, set?: T): T | undefined {\r\n\tif(obj == null || !prop) return undefined;\r\n\t// Split property string by '.' or [index]\r\n\treturn <T>prop.split(/[.[\\]]/g).filter(prop => prop.length).reduce((obj, prop, i, arr) => {\r\n\t\tif(prop[0] == '\"' || prop[0] == \"'\") prop = prop.slice(1, -1); // Take quotes out\r\n\t\tif(!obj?.hasOwnProperty(prop)) {\r\n\t\t\tif(set == undefined) return undefined;\r\n\t\t\tobj[prop] = {};\r\n\t\t}\r\n\t\tif(set !== undefined && i == arr.length - 1)\r\n\t\t\treturn obj[prop] = set;\r\n\t\treturn obj[prop];\r\n\t}, obj);\r\n}\r\n\r\n/**\r\n * Recursively flatten a nested object, while maintaining key structure.\r\n *\r\n * @example\r\n * ```ts\r\n * const car = {honda: {model: \"Civic\"}};\r\n * console.log(flattenObj(car)); //Output {honda.model: \"Civic\"}\r\n * ```\r\n *\r\n * @param obj - Object to flatten\r\n * @param parent - Recursively check if key is a parent key or not\r\n * @param result - Result\r\n * @returns {object} - Flattened object\r\n */\r\nexport function flattenObj(obj: any, parent?: any, result: any = {}) {\r\n\tif(typeof obj === \"object\" && !Array.isArray(obj)) {\r\n\t\tfor(const key of Object.keys(obj)) {\r\n\t\t\tconst propName = parent ? parent + '.' + key : key;\r\n\t\t\tif(typeof obj[key] === 'object') {\r\n\t\t\t\tflattenObj(obj[key], propName, result);\r\n\t\t\t} else {\r\n\t\t\t\tresult[propName] = obj[key];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn result;\r\n\t}\r\n}\r\n\r\n/**\r\n * Check that an object has the following values\r\n *\r\n * @example\r\n * ```ts\r\n * const test = {a: 2, b: 2};\r\n * includes(test, {a: 1}); // true\r\n * includes(test, {b: 1, c: 3}); // false\r\n * ```\r\n *\r\n * @param target Object to search\r\n * @param values Criteria to check against\r\n * @param allowMissing Only check the keys that are available on the target\r\n * @returns {boolean} Does target include all the values\r\n */\r\nexport function includes(target: any, values: any, allowMissing = false): boolean {\r\n\tif(target == undefined) return allowMissing;\r\n\tif(Array.isArray(values)) return values.findIndex((e: any, i: number) => !includes(target[i], values[i], allowMissing)) == -1;\r\n\tconst type = typeof values;\r\n\tif(type != typeof target) return false;\r\n\tif(type == 'object') {\r\n\t\treturn Object.keys(values).find(key => !includes(target[key], values[key], allowMissing)) == null;\r\n\t}\r\n\tif(type == 'function') return target.toString() == values.toString();\r\n\treturn target == values;\r\n}\r\n\r\n/**\r\n * Deep check if two objects are equal\r\n *\r\n * @param {any} a - first item to compare\r\n * @param {any} b - second item to compare\r\n * @returns {boolean} True if they match\r\n */\r\nexport function isEqual(a: any, b: any): boolean {\r\n\tconst ta = typeof a, tb = typeof b;\r\n\tif((ta != 'object' || a == null) || (tb != 'object' || b == null))\r\n\t\treturn ta == 'function' && tb == 'function' ? a.toString() == b.toString() : a === b;\r\n\tconst keys = Object.keys(a);\r\n\tif(keys.length != Object.keys(b).length) return false;\r\n\treturn Object.keys(a).every(key => isEqual(a[key], b[key]));\r\n}\r\n\r\nexport function mixin(target: any, constructors: any[]) {\r\n\tconstructors.forEach(c => {\r\n\t\tObject.getOwnPropertyNames(c.prototype).forEach((name) => {\r\n\t\t\tObject.defineProperty(\r\n\t\t\t\ttarget.prototype,\r\n\t\t\t\tname,\r\n\t\t\t\tObject.getOwnPropertyDescriptor(c.prototype, name) ||\r\n\t\t\t\tObject.create(null)\r\n\t\t\t);\r\n\t\t});\r\n\t});\r\n}\r\n\r\nexport function sanitizedJSON(obj: any, space?: number) {\r\n\tlet cache: any[] = [];\r\n\treturn JSON.parse(JSON.stringify(obj, (key, value) => {\r\n\t\tif (typeof value === 'object' && value !== null) {\r\n\t\t\tif (cache.includes(value)) return;\r\n\t\t\tcache.push(value);\r\n\t\t}\r\n\t\treturn value;\r\n\t}, space));\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 class ASet<T> extends Array {\n\tget size() {\n\t\treturn this.length;\n\t}\n\n\tconstructor(elements: T[] = []) {\n\t\tsuper();\n\t\tif(!!elements?.['forEach'])\n\t\t\telements.forEach(el => this.add(el));\n\t}\n\n\tadd(el: T) {\n\t\tif(!this.has(el)) this.push(el);\n\t}\n\n\tdelete(el: T) {\n\t\tconst index = this.indexOf(el);\n\t\tif(index != -1) this.slice(index, 1);\n\t}\n\n\tdifference(set: ASet<T>) {\n\t\treturn new ASet<T>(this.reduce((acc, el) => {\n\t\t\tif(!set.has(el)) acc.push(el);\n\t\t\treturn acc;\n\t\t}, []));\n\t}\n\n\thas(el: T) {\n\t\treturn this.indexOf(el) != -1;\n\t}\n\n\tintersection(set: ASet<T>) {\n\t\treturn new ASet<T>(this.reduce((acc, el) => {\n\t\t\tif(set.has(el)) acc.push(el);\n\t\t\treturn acc;\n\t\t}, []));\n\t}\n\n\tisDisjointFrom(set: ASet<T>) {\n\t\treturn this.intersection(set).size == 0;\n\t}\n\n\tisSubsetOf(set: ASet<T>) {\n\t\treturn this.findIndex(el => !set.has(el)) == -1;\n\t}\n\n\tisSuperset(set: ASet<T>) {\n\t\treturn set.findIndex(el => !this.has(el)) == -1;\n\t}\n\n\tsymmetricDifference(set: ASet<T>) {\n\t\treturn new ASet([...this.difference(set), ...set.difference(this)]);\n\t}\n\n\tunion(set: ASet<T> | Array<T>) {\n\t\treturn new ASet([...this, ...set]);\n\t}\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, TypedEvents} from './emitter';\n\nexport type downloadEvents = TypedEvents & {\n\tcomplete: (blob: Blob) => any;\n\tprogress: (progress: number) => any;\n}\n\nexport function download(href: any, name: string) {\n\tconst a = document.createElement('a');\n\ta.href = href;\n\ta.download = name;\n\tdocument.body.appendChild(a);\n\ta.click();\n\tdocument.body.removeChild(a);\n}\n\n/**\n * Download a URL using fetch so progress can be tracked. Uses Typed Emitter to emit a \"progress\" &\n * \"complete\" event.\n *\n * @param {string} url\n * @param {string} downloadName\n * @return {TypedEmitter<downloadEvents>}\n */\nexport function downloadProgress(url: string, downloadName?: string) {\n\tconst emitter = new TypedEmitter<downloadEvents>();\n\tfetch(url).then(response => {\n\t\tconst contentLength = response.headers.get('Content-Length') || '0';\n\t\tconst total = parseInt(contentLength, 10);\n\t\tlet chunks: any[] = [], loaded = 0;\n\t\tconst reader = response.body?.getReader();\n\t\treader?.read().then(function processResult(result) {\n\t\t\tif(result.done) {\n\t\t\t\tconst blob = new Blob(chunks);\n\t\t\t\tif(downloadName) {\n\t\t\t\t\tconst url = URL.createObjectURL(blob);\n\t\t\t\t\tdownload(url, downloadName);\n\t\t\t\t\tURL.revokeObjectURL(url);\n\t\t\t\t}\n\t\t\t\temitter.emit('complete', blob);\n\t\t\t} else {\n\t\t\t\tconst chunk = result.value;\n\t\t\t\tchunks.push(chunk);\n\t\t\t\tloaded += chunk.length;\n\t\t\t\tconst progress = loaded / total;\n\t\t\t\temitter.emit('progress', progress);\n\t\t\t\treader.read().then(processResult);\n\t\t\t}\n\t\t});\n\t});\n\treturn emitter;\n}\n","import {TypedEmitter, TypedEvents} from './emitter.ts';\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\tskipConverting?: boolean;\r\n\t[key: string]: any;\r\n}\r\n\r\nexport type XhrOptions = {\r\n\theaders?: {[key: string | symbol]: string | null | undefined};\r\n\tinterceptors?: Interceptor[];\r\n\turl?: string;\r\n}\r\n\r\nexport class XHR {\r\n\tprivate static interceptors: {[key: string]: Interceptor} = {};\r\n\r\n\tstatic headers: {[key: string]: string | null | undefined} = {};\r\n\r\n\tprivate interceptors: {[key: string]: Interceptor} = {}\r\n\r\n\theaders: {[key: string]: string | null | undefined} = {}\r\n\r\n\tconstructor(public readonly opts: XhrOptions = {}) {\r\n\t\tthis.headers = opts.headers || {};\r\n\t\tif(opts.interceptors) {\r\n\t\t\topts.interceptors.forEach(i => XHR.addInterceptor(i));\r\n\t\t}\r\n\t}\r\n\r\n\tstatic addInterceptor(fn: Interceptor): () => void {\r\n\t\tconst key = Object.keys(XHR.interceptors).length.toString();\r\n\t\tXHR.interceptors[key] = fn;\r\n\t\treturn () => { XHR.interceptors[key] = <any>null; }\r\n\t}\r\n\r\n\taddInterceptor(fn: Interceptor): () => void {\r\n\t\tconst key = Object.keys(this.interceptors).length.toString();\r\n\t\tthis.interceptors[key] = fn;\r\n\t\treturn () => { this.interceptors[key] = <any>null; }\r\n\t}\r\n\r\n\tasync request<T>(opts: RequestOptions = {}): Promise<T> {\r\n\t\tif(!this.opts.url && !opts.url) throw new Error('URL needs to be set');\r\n\t\tconst url = (opts.url?.startsWith('http') ? opts.url : (this.opts.url || '') + (opts.url || '')).replace(/([^:]\\/)\\/+/g, '$1');\r\n\r\n\t\t// Prep headers\r\n\t\tconst headers = <any>clean({\r\n\t\t\t'Content-Type': (opts.body && !(opts.body instanceof FormData)) ? 'application/json' : undefined,\r\n\t\t\t...XHR.headers,\r\n\t\t\t...this.headers,\r\n\t\t\t...opts.headers\r\n\t\t});\r\n\r\n\t\t// Send request\r\n\t\treturn fetch(url, {\r\n\t\t\theaders,\r\n\t\t\tmethod: opts.method || (opts.body ? 'POST' : 'GET'),\r\n\t\t\tbody: (headers['Content-Type']?.startsWith('application/json') && opts.body) ? JSON.stringify(opts.body) : opts.body\r\n\t\t}).then(async resp => {\r\n\t\t\tfor(let fn of [...Object.values(XHR.interceptors), ...Object.values(this.interceptors)]) {\r\n\t\t\t\tawait new Promise<void>(res => fn(resp, () => res()));\r\n\t\t\t}\r\n\r\n\t\t\tif(!resp.ok) throw new Error(resp.statusText);\r\n\t\t\tif(!opts.skipConverting && resp.headers.get('Content-Type')?.startsWith('application/json')) return await resp.json();\r\n\t\t\tif(!opts.skipConverting && resp.headers.get('Content-Type')?.startsWith('text/plain')) return await <any>resp.text();\r\n\t\t\treturn resp;\r\n\t\t});\r\n\t}\r\n}\r\n","import {XHR} from './xhr';\r\n\r\nXHR.addInterceptor((resp: Response, next: () => void) => {\r\n\tif(resp.status == 200) return next();\r\n\tif(resp.status == 400) throw new BadRequestError(resp.statusText);\r\n\tif(resp.status == 401) throw new UnauthorizedError(resp.statusText);\r\n\tif(resp.status == 403) throw new ForbiddenError(resp.statusText);\r\n\tif(resp.status == 404) throw new NotFoundError(resp.statusText);\r\n\tif(resp.status == 500) throw new InternalServerError(resp.statusText);\r\n\tthrow new CustomError(resp.statusText, resp.status);\r\n});\r\n\r\nexport class CustomError extends Error {\r\n\tstatic code = 500;\r\n\r\n\tprivate _code?: number;\r\n\tget code(): number { return this._code || (<any>this).constructor.code; }\r\n\tset code(c: number) { this._code = c; }\r\n\r\n\tconstructor(message?: string, code?: number) {\r\n\t\tsuper(message);\r\n\t\tif(code != null) this._code = code;\r\n\t}\r\n\r\n\tstatic from(err: Error): CustomError {\r\n\t\tconst code = Number((<any>err).statusCode) ?? Number((<any>err).code);\r\n\t\tconst newErr = new this(err.message || err.toString());\r\n\t\treturn Object.assign(newErr, {\r\n\t\t\tstack: err.stack,\r\n\t\t\t...err,\r\n\t\t\tcode: code ?? undefined\r\n\t\t});\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code != undefined;\r\n\t}\r\n\r\n\ttoString() {\r\n\t\treturn this.message || super.toString();\r\n\t}\r\n}\r\n\r\nexport class BadRequestError extends CustomError {\r\n\tstatic code = 400;\r\n\r\n\tconstructor(message: string = 'Bad Request') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class UnauthorizedError extends CustomError {\r\n\tstatic code = 401;\r\n\r\n\tconstructor(message: string = 'Unauthorized') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class ForbiddenError extends CustomError {\r\n\tstatic code = 403;\r\n\r\n\tconstructor(message: string = 'Forbidden') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class NotFoundError extends CustomError {\r\n\tstatic code = 404;\r\n\r\n\tconstructor(message: string = 'Not Found') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class InternalServerError extends CustomError {\r\n\tstatic code = 500;\r\n\r\n\tconstructor(message: string = 'Internal Server Error') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n","import {TypedEmitter, TypedEvents} from './emitter';\r\n\r\nexport const CliEffects = {\r\n\tCLEAR: \"\\x1b[0m\",\r\n\tBRIGHT: \"\\x1b[1m\",\r\n\tDIM: \"\\x1b[2m\",\r\n\tUNDERSCORE: \"\\x1b[4m\",\r\n\tBLINK: \"\\x1b[5m\",\r\n\tREVERSE: \"\\x1b[7m\",\r\n\tHIDDEN: \"\\x1b[8m\",\r\n}\r\n\r\nexport const CliForeground = {\r\n\tBLACK: '\\x1b[30m',\r\n\tRED: '\\x1b[31m',\r\n\tGREEN: '\\x1b[32m',\r\n\tYELLOW: '\\x1b[33m',\r\n\tBLUE: '\\x1b[34m',\r\n\tMAGENTA: '\\x1b[35m',\r\n\tCYAN: '\\x1b[36m',\r\n\tLIGHT_GREY: '\\x1b[37m',\r\n\tGREY: '\\x1b[90m',\r\n\tLIGHT_RED: '\\x1b[91m',\r\n\tLIGHT_GREEN: '\\x1b[92m',\r\n\tLIGHT_YELLOW: '\\x1b[93m',\r\n\tLIGHT_BLUE: '\\x1b[94m',\r\n\tLIGHT_MAGENTA: '\\x1b[95m',\r\n\tLIGHT_CYAN: '\\x1b[96m',\r\n\tWHITE: '\\x1b[97m',\r\n}\r\n\r\nexport const CliBackground = {\r\n\tBLACK: \"\\x1b[40m\",\r\n\tRED: \"\\x1b[41m\",\r\n\tGREEN: \"\\x1b[42m\",\r\n\tYELLOW: \"\\x1b[43m\",\r\n\tBLUE: \"\\x1b[44m\",\r\n\tMAGENTA: \"\\x1b[45m\",\r\n\tCYAN: \"\\x1b[46m\",\r\n\tWHITE: \"\\x1b[47m\",\r\n\tGREY: \"\\x1b[100m\",\r\n}\r\n\r\nexport enum LOG_LEVEL {\r\n\tERROR = 0,\r\n\tWARN = 1,\r\n\tINFO = 2,\r\n\tLOG = 3,\r\n\tDEBUG = 4,\r\n}\r\n\r\nexport type LoggerEvents = TypedEvents & {\r\n\t'ERROR': (...args: any[]) => any;\r\n\t'WARN': (...args: any[]) => any;\r\n\t'INFO': (...args: any[]) => any;\r\n\t'LOG': (...args: any[]) => any;\r\n\t'DEBUG': (...args: any[]) => any;\r\n};\r\n\r\nexport class Logger extends TypedEmitter<LoggerEvents> {\r\n\tstatic LOG_LEVEL: LOG_LEVEL = LOG_LEVEL.DEBUG;\r\n\r\n\tconstructor(public readonly namespace?: string) {\r\n\t\tsuper();\r\n\t}\r\n\r\n\tprivate pad(text: any, length: number, char: string, end = false) {\r\n\t\tconst t = text.toString();\r\n\t\tconst l = length - t.length;\r\n\t\tif(l <= 0) return t;\r\n\t\tconst padding = Array(~~(l / char.length)).fill(char).join('');\r\n\t\treturn !end ? padding + t : t + padding;\r\n\t}\r\n\r\n\tprivate format(...text: string[]): string {\r\n\t\tconst now = new Date();\r\n\t\tconst timestamp = `${now.getFullYear()}-${now.getMonth() + 1}-${now.getDate()} ${this.pad(now.getHours().toString(), 2, '0')}:${this.pad(now.getMinutes().toString(), 2, '0')}:${this.pad(now.getSeconds().toString(), 2, '0')}.${this.pad(now.getMilliseconds().toString(), 3, '0', true)}`;\r\n\t\treturn `${timestamp}${this.namespace ? ` [${this.namespace}]` : ''} ${text.join(' ')}`;\r\n\t}\r\n\r\n\tdebug(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.DEBUG) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.DEBUG, str);\r\n\t\tconsole.debug(CliForeground.LIGHT_GREY + str + CliEffects.CLEAR);\r\n\t}\r\n\r\n\tlog(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.LOG) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.LOG, str);\r\n\t\tconsole.log(CliEffects.CLEAR + str);\r\n\t}\r\n\r\n\tinfo(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.INFO) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.INFO, str);\r\n\t\tconsole.info(CliForeground.BLUE + str + CliEffects.CLEAR);\r\n\t}\r\n\r\n\twarn(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.WARN) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.WARN, str);\r\n\t\tconsole.warn(CliForeground.YELLOW + str + CliEffects.CLEAR);\r\n\t}\r\n\r\n\terror(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.ERROR) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.ERROR, str);\r\n\t\tconsole.error(CliForeground.RED + str + CliEffects.CLEAR);\r\n\t}\r\n}\r\n","export function countChars(text: string, pattern: RegExp) {\r\n\treturn text.length - text.replaceAll(pattern, '').length;\r\n}\r\n\r\nexport function createHex(length: number) {\r\n\treturn Array(length).fill(null).map(() => Math.round(Math.random() * 0xF).toString(16)).join('');\r\n}\r\n\r\n/**\r\n * String of all letters\r\n *\r\n */\r\nconst LETTER_LIST = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\r\n\r\n/**\r\n * String of all numbers\r\n *\r\n */\r\nconst NUMBER_LIST = '0123456789';\r\n\r\n/**\r\n * String of all symbols\r\n */\r\nconst SYMBOL_LIST = '~`!@#$%^&*()_-+={[}]|\\\\:;\"\\'<,>.?/';\r\n\r\n/**\r\n * String of all letters, numbers & symbols\r\n */\r\nconst CHAR_LIST = LETTER_LIST + NUMBER_LIST + SYMBOL_LIST;\r\n\r\nexport function formatPhoneNumber(number: string) {\r\n\tconst parts = /(\\+?1)?.*?(\\d{3}).*?(\\d{3}).*?(\\d{4})/g.exec(number);\r\n\tif(!parts) throw new Error(`Number cannot be parsed: ${number}`);\r\n\treturn `${parts[1] ?? ''} (${parts[2]}) ${parts[3]}-${parts[4]}`.trim();\r\n}\r\n\r\n/**\r\n * Insert a string into another string at a given position\r\n *\r\n * @example\r\n * ```\r\n * console.log(insertAt('Hello world!', ' glorious', 5);\r\n * // Output: Hello glorious world!\r\n * ```\r\n *\r\n * @param {string} target - Parent string you want to modify\r\n * @param {string} str - Value that will be injected to parent\r\n * @param {number} index - Position to inject string at\r\n * @returns {string} - New string\r\n */\r\nexport function insertAt(target: string, str: string, index: number): String {\r\n\treturn `${target.slice(0, index)}${str}${target.slice(index + 1)}`;\r\n}\r\n\r\nexport function pad(text: any, length: number, char: string, start = true) {\r\n\tconst t = text.toString();\r\n\tconst l = length - t.length;\r\n\tif(l <= 0) return t;\r\n\tconst padding = Array(~~(l / char.length)).fill(char).join('');\r\n\treturn start ? padding + t : t + padding;\r\n}\r\n\r\n/**\r\n * Generate a string of random characters.\r\n *\r\n * @example\r\n * ```ts\r\n * const random = randomString();\r\n * const randomByte = randomString(8, \"01\")\r\n * ```\r\n *\r\n * @param {number} length - length of generated string\r\n * @param {string} pool - character pool to generate string from\r\n * @return {string} generated string\r\n */\r\nexport function randomString(length: number, pool: string = CHAR_LIST): string {\r\n\treturn Array(length).fill(null).map(() => {\r\n\t\tconst n = ~~(Math.random() * pool.length);\r\n\t\treturn pool[n];\r\n\t}).join('');\r\n}\r\n\r\n/**\r\n * Generate a random string with fine control over letters, numbers & symbols\r\n *\r\n * @example\r\n * ```ts\r\n * const randomLetter = randomString(1, true);\r\n * const randomChar = randomString(1, true, true, true);\r\n * ```\r\n *\r\n * @param {number} length - length of generated string\r\n * @param {boolean} letters - Add letters to pool\r\n * @param {boolean} numbers - Add numbers to pool\r\n * @param {boolean} symbols - Add symbols to pool\r\n * @return {string} generated string\r\n */\r\nexport function randomStringBuilder(length: number, letters = false, numbers = false, symbols = false): string {\r\n\tif(!letters && !numbers && !symbols) throw new Error('Must enable at least one: letters, numbers, symbols');\r\n\treturn Array(length).fill(null).map(() => {\r\n\t\tlet c;\r\n\t\tdo {\r\n\t\t\tconst type = ~~(Math.random() * 3);\r\n\t\t\tif(letters && type == 0) {\r\n\t\t\t\tc = LETTER_LIST[~~(Math.random() * LETTER_LIST.length)];\r\n\t\t\t} else if(numbers && type == 1) {\r\n\t\t\t\tc = NUMBER_LIST[~~(Math.random() * NUMBER_LIST.length)];\r\n\t\t\t} else if(symbols && type == 2) {\r\n\t\t\t\tc = SYMBOL_LIST[~~(Math.random() * SYMBOL_LIST.length)];\r\n\t\t\t}\r\n\t\t} while(!c);\r\n\t\treturn c;\r\n\t}).join('');\r\n}\r\n\r\n/**\r\n * Find all substrings that match a given pattern.\r\n *\r\n * Roughly based on `String.prototype.matchAll`.\r\n *\r\n * @param {string} value - String to search.\r\n * @param {RegExp | string} regex - Regular expression to match.\r\n * @return {RegExpExecArray[]} Found matches.\r\n */\r\nexport function matchAll(value: string, regex: RegExp | string): RegExpExecArray[] {\r\n\tif(typeof regex === 'string') {\r\n\t\tregex = new RegExp(regex, 'g');\r\n\t}\r\n\r\n\t// https://stackoverflow.com/a/60290199\r\n\tif(!regex.global) {\r\n\t\tthrow new TypeError('Regular expression must be global.');\r\n\t}\r\n\r\n\tlet ret: RegExpExecArray[] = [];\r\n\tlet match: RegExpExecArray | null;\r\n\twhile((match = regex.exec(value)) !== null) {\r\n\t\tret.push(match);\r\n\t}\r\n\r\n\treturn ret;\r\n}\r\n\r\n/**\r\n * Create MD5 hash using native javascript\r\n * @param d String to hash\r\n * @returns {string} Hashed string\r\n */\r\nexport function md5(d: string) {\r\n\tvar r = M(V(Y(X(d),8*d.length)));return r.toLowerCase()};\r\n\tfunction M(d:any){for(var _,m=\"0123456789ABCDEF\",f=\"\",r=0;r<d.length;r++)_=d.charCodeAt(r),f+=m.charAt(_>>>4&15)+m.charAt(15&_);return f}\r\n\tfunction X(d:any){for(var _=Array(d.length>>2),m=0;m<_.length;m++)_[m]=0;for(m=0;m<8*d.length;m+=8)_[m>>5]|=(255&d.charCodeAt(m/8))<<m%32;return _}\r\n\tfunction V(d:any){for(var _=\"\",m=0;m<32*d.length;m+=8)_+=String.fromCharCode(d[m>>5]>>>m%32&255);return _}\r\n\tfunction Y(d:any,_:any){d[_>>5]|=128<<_%32,d[14+(_+64>>>9<<4)]=_;for(var m=1732584193,f=-271733879,r=-1732584194,i=271733878,n=0;n<d.length;n+=16){var h=m,t=f,g=r,e=i;f=md5_ii(f=md5_ii(f=md5_ii(f=md5_ii(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_ff(f=md5_ff(f=md5_ff(f=md5_ff(f,r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+0],7,-680876936),f,r,d[n+1],12,-389564586),m,f,d[n+2],17,606105819),i,m,d[n+3],22,-1044525330),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+4],7,-176418897),f,r,d[n+5],12,1200080426),m,f,d[n+6],17,-1473231341),i,m,d[n+7],22,-45705983),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+8],7,1770035416),f,r,d[n+9],12,-1958414417),m,f,d[n+10],17,-42063),i,m,d[n+11],22,-1990404162),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+12],7,1804603682),f,r,d[n+13],12,-40341101),m,f,d[n+14],17,-1502002290),i,m,d[n+15],22,1236535329),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+1],5,-165796510),f,r,d[n+6],9,-1069501632),m,f,d[n+11],14,643717713),i,m,d[n+0],20,-373897302),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+5],5,-701558691),f,r,d[n+10],9,38016083),m,f,d[n+15],14,-660478335),i,m,d[n+4],20,-405537848),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+9],5,568446438),f,r,d[n+14],9,-1019803690),m,f,d[n+3],14,-187363961),i,m,d[n+8],20,1163531501),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+13],5,-1444681467),f,r,d[n+2],9,-51403784),m,f,d[n+7],14,1735328473),i,m,d[n+12],20,-1926607734),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+5],4,-378558),f,r,d[n+8],11,-2022574463),m,f,d[n+11],16,1839030562),i,m,d[n+14],23,-35309556),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+1],4,-1530992060),f,r,d[n+4],11,1272893353),m,f,d[n+7],16,-155497632),i,m,d[n+10],23,-1094730640),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+13],4,681279174),f,r,d[n+0],11,-358537222),m,f,d[n+3],16,-722521979),i,m,d[n+6],23,76029189),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+9],4,-640364487),f,r,d[n+12],11,-421815835),m,f,d[n+15],16,530742520),i,m,d[n+2],23,-995338651),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+0],6,-198630844),f,r,d[n+7],10,1126891415),m,f,d[n+14],15,-1416354905),i,m,d[n+5],21,-57434055),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+12],6,1700485571),f,r,d[n+3],10,-1894986606),m,f,d[n+10],15,-1051523),i,m,d[n+1],21,-2054922799),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+8],6,1873313359),f,r,d[n+15],10,-30611744),m,f,d[n+6],15,-1560198380),i,m,d[n+13],21,1309151649),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+4],6,-145523070),f,r,d[n+11],10,-1120210379),m,f,d[n+2],15,718787259),i,m,d[n+9],21,-343485551),m=safe_add(m,h),f=safe_add(f,t),r=safe_add(r,g),i=safe_add(i,e)}return Array(m,f,r,i)}\r\n\tfunction md5_cmn(d:any,_:any,m:any,f:any,r:any,i:any){return safe_add(bit_rol(safe_add(safe_add(_,d),safe_add(f,i)),r),m)}\r\n\tfunction md5_ff(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(_&m|~_&f,d,_,r,i,n)}\r\n\tfunction md5_gg(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(_&f|m&~f,d,_,r,i,n)}\r\n\tfunction md5_hh(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(_^m^f,d,_,r,i,n)}\r\n\tfunction md5_ii(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(m^(_|~f),d,_,r,i,n)}\r\n\tfunction safe_add(d:any,_:any){var m=(65535&d)+(65535&_);return(d>>16)+(_>>16)+(m>>16)<<16|65535&m}\r\n\tfunction bit_rol(d:any,_:any){return d<<_|d>>>32-_\r\n}\r\n\r\n/**\r\n * Check if email is valid\r\n *\r\n * @param {string} email - Target\r\n * @returns {boolean} - Follows format\r\n */\r\nexport function validateEmail(email: string) {\r\n\treturn /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/.test(email);\r\n}\r\n","import {md5} from './string';\r\n\r\n/**\r\n * Convert data into a form encoded format.\r\n *\r\n * @param {any} data - data to convert\r\n * @returns {string} - Ecodeded form data\r\n */\r\nexport function formEncode(data: any): string {\r\n\treturn Object.entries(data).map(([key, value]) =>\r\n\t\tencodeURIComponent(key) + '=' + encodeURIComponent(<any>value)\r\n\t).join('&');\r\n}\r\n\r\n/**\r\n * Get profile image from Gravatar\r\n *\r\n * @param {string} email Account email address\r\n * @param {string} def Default image, can be a link or '404', see: https://docs.gravatar.com/general/images/\r\n * @returns {string} Gravatar URL\r\n */\r\nexport function gravatar(email: string, def='mp') {\r\n\tif(!email) return '';\r\n\treturn `https://www.gravatar.com/avatar/${md5(email)}?d=${def}`;\r\n}\r\n\r\n/** Parts of a URL */\r\nexport type ParsedUrl = {\r\n\tprotocol?: string,\r\n\tsubdomain?: string,\r\n\tdomain: string,\r\n\thost: string,\r\n\tport?: number,\r\n\tpath?: string,\r\n\tquery?: {[name: string]: string}\r\n\tfragment?: string\r\n}\r\n\r\n/**\r\n *\r\n * @param {string} url\r\n * @returns {RegExpExecArray}\r\n */\r\nexport function urlParser(url: string): ParsedUrl {\r\n\tconst processed = new RegExp(\r\n\t\t'(?:(?<protocol>[\\\\w\\\\d]+)\\\\:\\\\/\\\\/)?(?:(?<user>.+)\\\\@)?(?<host>(?<domain>[^:\\\\/\\\\?#@\\\\n]+)(?:\\\\:(?<port>\\\\d*))?)(?<path>\\\\/.*?)?(?:\\\\?(?<query>.*?))?(?:#(?<fragment>.*?))?$',\r\n\t\t'gm').exec(url);\r\n\tconst groups: ParsedUrl = <any>processed?.groups ?? {};\r\n\tconst domains = groups.domain.split('.');\r\n\tif(groups['port'] != null) groups.port = Number(groups.port);\r\n\tif(domains.length > 2) {\r\n\t\tgroups.domain = domains.splice(-2, 2).join('.');\r\n\t\tgroups.subdomain = domains.join('.');\r\n\t}\r\n\tif(groups.query) {\r\n\t\tconst split = (<any>groups.query).split('&'), query: any = {};\r\n\t\tsplit.forEach((q: any) => {\r\n\t\t\tconst [key, val] = q.split('=');\r\n\t\t\tquery[key] = val;\r\n\t\t});\r\n\t\tgroups.query = query;\r\n\t}\r\n\treturn groups;\r\n}\r\n","/**\r\n * Calculate the number of milliseconds until date/time\r\n *\r\n * @param {Date | number} date - Target\r\n * @returns {number} - Number of milliseconds until target\r\n */\r\nexport function timeUntil(date: Date | number): number {\r\n\treturn (date instanceof Date ? date.getTime() : date) - (new Date()).getTime();\r\n}\r\n\r\n/**\r\n * Use in conjunction with `await` to pause an async script\r\n *\r\n * @example\r\n * ```ts\r\n * async () => {\r\n * ...\r\n * await sleep(1000) // Pause for 1 second\r\n *\t ...\r\n * }\r\n * ```\r\n *\r\n * @param {number} ms - Time to pause for in milliseconds\r\n * @returns {Promise<unknown>} - Resolves promise when it's time to resume\r\n */\r\nexport function sleep(ms: number) {\r\n\treturn new Promise(res => setTimeout(res, ms));\r\n}\r\n\r\nexport function formatDate(date: Date | number | string) {\r\n\tconst d = date instanceof Date ? date : new Date(date);\r\n\treturn new Intl.DateTimeFormat(\"en-us\", {\r\n\t\tweekday: \"long\",\r\n\t\tmonth: \"short\",\r\n\t\tday: \"numeric\",\r\n\t\thour: \"numeric\",\r\n\t\tminute: \"numeric\",\r\n\t\thour12: true\r\n\t}).format(d);\r\n}\r\n"],"names":["clean","obj","undefinedOnly","o","key","value","deepCopy","dotNotation","prop","set","arr","flattenObj","parent","result","propName","includes","target","values","allowMissing","e","type","isEqual","a","b","ta","tb","mixin","constructors","c","name","sanitizedJSON","space","cache","addUnique","array","el","arrayDiff","makeUnique","v1","v2","caseInsensitiveSort","aVal","bVal","flattenArr","sortByProp","reverse","findByProp","v","i","n","makeArray","ASet","elements","index","acc","TypedEmitter","__publicField","event","args","l","listener","_a","res","unsubscribe","download","href","downloadProgress","url","downloadName","emitter","response","contentLength","total","chunks","loaded","reader","processResult","blob","chunk","progress","_XHR","opts","fn","headers","_b","resp","XHR","next","BadRequestError","UnauthorizedError","ForbiddenError","NotFoundError","InternalServerError","CustomError","message","code","err","newErr","CliEffects","CliForeground","CliBackground","LOG_LEVEL","_Logger","namespace","text","length","char","end","t","padding","now","str","Logger","countChars","pattern","createHex","LETTER_LIST","NUMBER_LIST","SYMBOL_LIST","CHAR_LIST","formatPhoneNumber","number","parts","insertAt","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/aset.ts","../src/emitter.ts","../src/download.ts","../src/xhr.ts","../src/errors.ts","../src/logger.ts","../src/string.ts","../src/misc.ts","../src/time.ts"],"sourcesContent":["/**\r\n * Removes any null values from an object in-place\r\n *\r\n * @example\r\n * ```ts\r\n * let test = {a: 0, b: false, c: null, d: 'abc'}\r\n * console.log(clean(test)); // Output: {a: 0, b: false, d: 'abc'}\r\n * ```\r\n *\r\n * @param {T} obj Object reference that will be cleaned\r\n * @param undefinedOnly Ignore null values\r\n * @returns {Partial<T>} Cleaned object\r\n */\r\nexport function clean<T>(obj: T, undefinedOnly = false): Partial<T> {\r\n\tif(obj == null) throw new Error(\"Cannot clean a NULL value\");\r\n\tif(Array.isArray(obj)) {\r\n\t\tobj = <any>obj.filter(o => o != null);\r\n\t} else {\r\n\t\tObject.entries(obj).forEach(([key, value]) => {\r\n\t\t\tif((undefinedOnly && value === undefined) || (!undefinedOnly && value == null)) delete (<any>obj)[key];\r\n\t\t});\r\n\t}\r\n\treturn <any>obj;\r\n}\r\n\r\n/**\r\n * Create a deep copy of an object (vs. a shallow copy of references)\r\n *\r\n * Should be replaced by `structuredClone` once released.\r\n *\r\n * @param {T} value Object to copy\r\n * @returns {T} Type\r\n */\r\nexport function deepCopy<T>(value: T): T {\r\n\treturn JSON.parse(JSON.stringify(value));\r\n}\r\n\r\n/**\r\n * Get/set a property of an object using dot notation\r\n *\r\n * @example\r\n * ```ts\r\n * // Get a value\r\n * const name = dotNotation<string>(person, 'firstName');\r\n * const familyCarMake = dotNotation(family, 'cars[0].make');\r\n * // Set a value\r\n * dotNotation(family, 'cars[0].make', 'toyota');\r\n * ```\r\n *\r\n * @type T Return type\r\n * @param {Object} obj source object to search\r\n * @param {string} prop property name (Dot notation & indexing allowed)\r\n * @param {any} set Set object property to value, omit to fetch value instead\r\n * @return {T} property value\r\n */\r\nexport function dotNotation<T>(obj: any, prop: string, set: T): T;\r\nexport function dotNotation<T>(obj: any, prop: string): T | undefined;\r\nexport function dotNotation<T>(obj: any, prop: string, set?: T): T | undefined {\r\n\tif(obj == null || !prop) return undefined;\r\n\t// Split property string by '.' or [index]\r\n\treturn <T>prop.split(/[.[\\]]/g).filter(prop => prop.length).reduce((obj, prop, i, arr) => {\r\n\t\tif(prop[0] == '\"' || prop[0] == \"'\") prop = prop.slice(1, -1); // Take quotes out\r\n\t\tif(!obj?.hasOwnProperty(prop)) {\r\n\t\t\tif(set == undefined) return undefined;\r\n\t\t\tobj[prop] = {};\r\n\t\t}\r\n\t\tif(set !== undefined && i == arr.length - 1)\r\n\t\t\treturn obj[prop] = set;\r\n\t\treturn obj[prop];\r\n\t}, obj);\r\n}\r\n\r\n/**\r\n * Recursively flatten a nested object, while maintaining key structure.\r\n *\r\n * @example\r\n * ```ts\r\n * const car = {honda: {model: \"Civic\"}};\r\n * console.log(flattenObj(car)); //Output {honda.model: \"Civic\"}\r\n * ```\r\n *\r\n * @param obj - Object to flatten\r\n * @param parent - Recursively check if key is a parent key or not\r\n * @param result - Result\r\n * @returns {object} - Flattened object\r\n */\r\nexport function flattenObj(obj: any, parent?: any, result: any = {}) {\r\n\tif(typeof obj === \"object\" && !Array.isArray(obj)) {\r\n\t\tfor(const key of Object.keys(obj)) {\r\n\t\t\tconst propName = parent ? parent + '.' + key : key;\r\n\t\t\tif(typeof obj[key] === 'object') {\r\n\t\t\t\tflattenObj(obj[key], propName, result);\r\n\t\t\t} else {\r\n\t\t\t\tresult[propName] = obj[key];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn result;\r\n\t}\r\n}\r\n\r\n/**\r\n * Check that an object has the following values\r\n *\r\n * @example\r\n * ```ts\r\n * const test = {a: 2, b: 2};\r\n * includes(test, {a: 1}); // true\r\n * includes(test, {b: 1, c: 3}); // false\r\n * ```\r\n *\r\n * @param target Object to search\r\n * @param values Criteria to check against\r\n * @param allowMissing Only check the keys that are available on the target\r\n * @returns {boolean} Does target include all the values\r\n */\r\nexport function includes(target: any, values: any, allowMissing = false): boolean {\r\n\tif(target == undefined) return allowMissing;\r\n\tif(Array.isArray(values)) return values.findIndex((e: any, i: number) => !includes(target[i], values[i], allowMissing)) == -1;\r\n\tconst type = typeof values;\r\n\tif(type != typeof target) return false;\r\n\tif(type == 'object') {\r\n\t\treturn Object.keys(values).find(key => !includes(target[key], values[key], allowMissing)) == null;\r\n\t}\r\n\tif(type == 'function') return target.toString() == values.toString();\r\n\treturn target == values;\r\n}\r\n\r\n/**\r\n * Deep check if two objects are equal\r\n *\r\n * @param {any} a - first item to compare\r\n * @param {any} b - second item to compare\r\n * @returns {boolean} True if they match\r\n */\r\nexport function isEqual(a: any, b: any): boolean {\r\n\tconst ta = typeof a, tb = typeof b;\r\n\tif((ta != 'object' || a == null) || (tb != 'object' || b == null))\r\n\t\treturn ta == 'function' && tb == 'function' ? a.toString() == b.toString() : a === b;\r\n\tconst keys = Object.keys(a);\r\n\tif(keys.length != Object.keys(b).length) return false;\r\n\treturn Object.keys(a).every(key => isEqual(a[key], b[key]));\r\n}\r\n\r\nexport function mixin(target: any, constructors: any[]) {\r\n\tconstructors.forEach(c => {\r\n\t\tObject.getOwnPropertyNames(c.prototype).forEach((name) => {\r\n\t\t\tObject.defineProperty(\r\n\t\t\t\ttarget.prototype,\r\n\t\t\t\tname,\r\n\t\t\t\tObject.getOwnPropertyDescriptor(c.prototype, name) ||\r\n\t\t\t\tObject.create(null)\r\n\t\t\t);\r\n\t\t});\r\n\t});\r\n}\r\n\r\nexport function sanitizedJSON(obj: any, space?: number) {\r\n\tlet cache: any[] = [];\r\n\treturn JSON.parse(JSON.stringify(obj, (key, value) => {\r\n\t\tif (typeof value === 'object' && value !== null) {\r\n\t\t\tif (cache.includes(value)) return;\r\n\t\t\tcache.push(value);\r\n\t\t}\r\n\t\treturn value;\r\n\t}, space));\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 class ASet<T> extends Array {\n\tget size() {\n\t\treturn this.length;\n\t}\n\n\tconstructor(elements: T[] = []) {\n\t\tsuper();\n\t\tif(!!elements?.['forEach'])\n\t\t\telements.forEach(el => this.add(el));\n\t}\n\n\tadd(el: T) {\n\t\tif(!this.has(el)) this.push(el);\n\t}\n\n\tdelete(el: T) {\n\t\tconst index = this.indexOf(el);\n\t\tif(index != -1) this.slice(index, 1);\n\t}\n\n\tdifference(set: ASet<T>) {\n\t\treturn new ASet<T>(this.reduce((acc, el) => {\n\t\t\tif(!set.has(el)) acc.push(el);\n\t\t\treturn acc;\n\t\t}, []));\n\t}\n\n\thas(el: T) {\n\t\treturn this.indexOf(el) != -1;\n\t}\n\n\tintersection(set: ASet<T>) {\n\t\treturn new ASet<T>(this.reduce((acc, el) => {\n\t\t\tif(set.has(el)) acc.push(el);\n\t\t\treturn acc;\n\t\t}, []));\n\t}\n\n\tisDisjointFrom(set: ASet<T>) {\n\t\treturn this.intersection(set).size == 0;\n\t}\n\n\tisSubsetOf(set: ASet<T>) {\n\t\treturn this.findIndex(el => !set.has(el)) == -1;\n\t}\n\n\tisSuperset(set: ASet<T>) {\n\t\treturn set.findIndex(el => !this.has(el)) == -1;\n\t}\n\n\tsymmetricDifference(set: ASet<T>) {\n\t\treturn new ASet([...this.difference(set), ...set.difference(this)]);\n\t}\n\n\tunion(set: ASet<T> | Array<T>) {\n\t\treturn new ASet([...this, ...set]);\n\t}\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, TypedEvents} from './emitter';\n\nexport type DownloadEvents = TypedEvents & {\n\tcomplete: (blob: Blob) => any;\n\tfailed: (error: Error) => any;\n\tprogress: (progress: number) => any;\n}\n\nexport function download(href: any, name: string) {\n\tconst a = document.createElement('a');\n\ta.href = href;\n\ta.download = name;\n\tdocument.body.appendChild(a);\n\ta.click();\n\tdocument.body.removeChild(a);\n}\n\n/**\n * Download a URL using fetch so progress can be tracked. Uses Typed Emitter to emit a \"progress\" &\n * \"complete\" event.\n *\n * @param {string} url\n * @param {string} downloadName\n * @return {TypedEmitter<DownloadEvents>}\n */\nexport function downloadProgress(url: string, downloadName?: string) {\n\tconst progress = new TypedEmitter<DownloadEvents>();\n\tfetch(url).then(response => {\n\t\tif(!response.ok) return progress.emit('failed', new Error(response.statusText));\n\t\tconst contentLength = response.headers.get('Content-Length') || '0';\n\t\tconst total = parseInt(contentLength, 10);\n\t\tlet chunks: any[] = [], loaded = 0;\n\t\tconst reader = response.body?.getReader();\n\t\treader?.read().then(function processResult(result) {\n\t\t\tif(result.done) {\n\t\t\t\tconst blob = new Blob(chunks);\n\t\t\t\tif(downloadName) {\n\t\t\t\t\tconst url = URL.createObjectURL(blob);\n\t\t\t\t\tdownload(url, downloadName);\n\t\t\t\t\tURL.revokeObjectURL(url);\n\t\t\t\t}\n\t\t\t\tprogress.emit('complete', blob);\n\t\t\t} else {\n\t\t\t\tconst chunk = result.value;\n\t\t\t\tchunks.push(chunk);\n\t\t\t\tloaded += chunk.length;\n\t\t\t\tprogress.emit('progress', loaded / total);\n\t\t\t\treader.read().then(processResult);\n\t\t\t}\n\t\t});\n\t}).catch(err => progress.emit('failed', err));\n\treturn progress;\n}\n","import {TypedEmitter, TypedEvents} from './emitter.ts';\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\tskipConverting?: boolean;\r\n\t[key: string]: any;\r\n}\r\n\r\nexport type XhrOptions = {\r\n\theaders?: {[key: string | symbol]: string | null | undefined};\r\n\tinterceptors?: Interceptor[];\r\n\turl?: string;\r\n}\r\n\r\nexport class XHR {\r\n\tprivate static interceptors: {[key: string]: Interceptor} = {};\r\n\r\n\tstatic headers: {[key: string]: string | null | undefined} = {};\r\n\r\n\tprivate interceptors: {[key: string]: Interceptor} = {}\r\n\r\n\theaders: {[key: string]: string | null | undefined} = {}\r\n\r\n\tconstructor(public readonly opts: XhrOptions = {}) {\r\n\t\tthis.headers = opts.headers || {};\r\n\t\tif(opts.interceptors) {\r\n\t\t\topts.interceptors.forEach(i => XHR.addInterceptor(i));\r\n\t\t}\r\n\t}\r\n\r\n\tstatic addInterceptor(fn: Interceptor): () => void {\r\n\t\tconst key = Object.keys(XHR.interceptors).length.toString();\r\n\t\tXHR.interceptors[key] = fn;\r\n\t\treturn () => { XHR.interceptors[key] = <any>null; }\r\n\t}\r\n\r\n\taddInterceptor(fn: Interceptor): () => void {\r\n\t\tconst key = Object.keys(this.interceptors).length.toString();\r\n\t\tthis.interceptors[key] = fn;\r\n\t\treturn () => { this.interceptors[key] = <any>null; }\r\n\t}\r\n\r\n\tasync request<T>(opts: RequestOptions = {}): Promise<T> {\r\n\t\tif(!this.opts.url && !opts.url) throw new Error('URL needs to be set');\r\n\t\tconst url = (opts.url?.startsWith('http') ? opts.url : (this.opts.url || '') + (opts.url || '')).replace(/([^:]\\/)\\/+/g, '$1');\r\n\r\n\t\t// Prep headers\r\n\t\tconst headers = <any>clean({\r\n\t\t\t'Content-Type': (opts.body && !(opts.body instanceof FormData)) ? 'application/json' : undefined,\r\n\t\t\t...XHR.headers,\r\n\t\t\t...this.headers,\r\n\t\t\t...opts.headers\r\n\t\t});\r\n\r\n\t\t// Send request\r\n\t\treturn fetch(url, {\r\n\t\t\theaders,\r\n\t\t\tmethod: opts.method || (opts.body ? 'POST' : 'GET'),\r\n\t\t\tbody: (headers['Content-Type']?.startsWith('application/json') && opts.body) ? JSON.stringify(opts.body) : opts.body\r\n\t\t}).then(async resp => {\r\n\t\t\tfor(let fn of [...Object.values(XHR.interceptors), ...Object.values(this.interceptors)]) {\r\n\t\t\t\tawait new Promise<void>(res => fn(resp, () => res()));\r\n\t\t\t}\r\n\r\n\t\t\tif(!resp.ok) throw new Error(resp.statusText);\r\n\t\t\tif(!opts.skipConverting && resp.headers.get('Content-Type')?.startsWith('application/json')) return await resp.json();\r\n\t\t\tif(!opts.skipConverting && resp.headers.get('Content-Type')?.startsWith('text/plain')) return await <any>resp.text();\r\n\t\t\treturn resp;\r\n\t\t});\r\n\t}\r\n}\r\n","import {XHR} from './xhr';\r\n\r\nXHR.addInterceptor((resp: Response, next: () => void) => {\r\n\tif(resp.status == 200) return next();\r\n\tif(resp.status == 400) throw new BadRequestError(resp.statusText);\r\n\tif(resp.status == 401) throw new UnauthorizedError(resp.statusText);\r\n\tif(resp.status == 403) throw new ForbiddenError(resp.statusText);\r\n\tif(resp.status == 404) throw new NotFoundError(resp.statusText);\r\n\tif(resp.status == 500) throw new InternalServerError(resp.statusText);\r\n\tthrow new CustomError(resp.statusText, resp.status);\r\n});\r\n\r\nexport class CustomError extends Error {\r\n\tstatic code = 500;\r\n\r\n\tprivate _code?: number;\r\n\tget code(): number { return this._code || (<any>this).constructor.code; }\r\n\tset code(c: number) { this._code = c; }\r\n\r\n\tconstructor(message?: string, code?: number) {\r\n\t\tsuper(message);\r\n\t\tif(code != null) this._code = code;\r\n\t}\r\n\r\n\tstatic from(err: Error): CustomError {\r\n\t\tconst code = Number((<any>err).statusCode) ?? Number((<any>err).code);\r\n\t\tconst newErr = new this(err.message || err.toString());\r\n\t\treturn Object.assign(newErr, {\r\n\t\t\tstack: err.stack,\r\n\t\t\t...err,\r\n\t\t\tcode: code ?? undefined\r\n\t\t});\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code != undefined;\r\n\t}\r\n\r\n\ttoString() {\r\n\t\treturn this.message || super.toString();\r\n\t}\r\n}\r\n\r\nexport class BadRequestError extends CustomError {\r\n\tstatic code = 400;\r\n\r\n\tconstructor(message: string = 'Bad Request') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class UnauthorizedError extends CustomError {\r\n\tstatic code = 401;\r\n\r\n\tconstructor(message: string = 'Unauthorized') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class ForbiddenError extends CustomError {\r\n\tstatic code = 403;\r\n\r\n\tconstructor(message: string = 'Forbidden') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class NotFoundError extends CustomError {\r\n\tstatic code = 404;\r\n\r\n\tconstructor(message: string = 'Not Found') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class InternalServerError extends CustomError {\r\n\tstatic code = 500;\r\n\r\n\tconstructor(message: string = 'Internal Server Error') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n","import {TypedEmitter, TypedEvents} from './emitter';\r\n\r\nexport const CliEffects = {\r\n\tCLEAR: \"\\x1b[0m\",\r\n\tBRIGHT: \"\\x1b[1m\",\r\n\tDIM: \"\\x1b[2m\",\r\n\tUNDERSCORE: \"\\x1b[4m\",\r\n\tBLINK: \"\\x1b[5m\",\r\n\tREVERSE: \"\\x1b[7m\",\r\n\tHIDDEN: \"\\x1b[8m\",\r\n}\r\n\r\nexport const CliForeground = {\r\n\tBLACK: '\\x1b[30m',\r\n\tRED: '\\x1b[31m',\r\n\tGREEN: '\\x1b[32m',\r\n\tYELLOW: '\\x1b[33m',\r\n\tBLUE: '\\x1b[34m',\r\n\tMAGENTA: '\\x1b[35m',\r\n\tCYAN: '\\x1b[36m',\r\n\tLIGHT_GREY: '\\x1b[37m',\r\n\tGREY: '\\x1b[90m',\r\n\tLIGHT_RED: '\\x1b[91m',\r\n\tLIGHT_GREEN: '\\x1b[92m',\r\n\tLIGHT_YELLOW: '\\x1b[93m',\r\n\tLIGHT_BLUE: '\\x1b[94m',\r\n\tLIGHT_MAGENTA: '\\x1b[95m',\r\n\tLIGHT_CYAN: '\\x1b[96m',\r\n\tWHITE: '\\x1b[97m',\r\n}\r\n\r\nexport const CliBackground = {\r\n\tBLACK: \"\\x1b[40m\",\r\n\tRED: \"\\x1b[41m\",\r\n\tGREEN: \"\\x1b[42m\",\r\n\tYELLOW: \"\\x1b[43m\",\r\n\tBLUE: \"\\x1b[44m\",\r\n\tMAGENTA: \"\\x1b[45m\",\r\n\tCYAN: \"\\x1b[46m\",\r\n\tWHITE: \"\\x1b[47m\",\r\n\tGREY: \"\\x1b[100m\",\r\n}\r\n\r\nexport enum LOG_LEVEL {\r\n\tERROR = 0,\r\n\tWARN = 1,\r\n\tINFO = 2,\r\n\tLOG = 3,\r\n\tDEBUG = 4,\r\n}\r\n\r\nexport type LoggerEvents = TypedEvents & {\r\n\t'ERROR': (...args: any[]) => any;\r\n\t'WARN': (...args: any[]) => any;\r\n\t'INFO': (...args: any[]) => any;\r\n\t'LOG': (...args: any[]) => any;\r\n\t'DEBUG': (...args: any[]) => any;\r\n};\r\n\r\nexport class Logger extends TypedEmitter<LoggerEvents> {\r\n\tstatic LOG_LEVEL: LOG_LEVEL = LOG_LEVEL.DEBUG;\r\n\r\n\tconstructor(public readonly namespace?: string) {\r\n\t\tsuper();\r\n\t}\r\n\r\n\tprivate pad(text: any, length: number, char: string, end = false) {\r\n\t\tconst t = text.toString();\r\n\t\tconst l = length - t.length;\r\n\t\tif(l <= 0) return t;\r\n\t\tconst padding = Array(~~(l / char.length)).fill(char).join('');\r\n\t\treturn !end ? padding + t : t + padding;\r\n\t}\r\n\r\n\tprivate format(...text: string[]): string {\r\n\t\tconst now = new Date();\r\n\t\tconst timestamp = `${now.getFullYear()}-${now.getMonth() + 1}-${now.getDate()} ${this.pad(now.getHours().toString(), 2, '0')}:${this.pad(now.getMinutes().toString(), 2, '0')}:${this.pad(now.getSeconds().toString(), 2, '0')}.${this.pad(now.getMilliseconds().toString(), 3, '0', true)}`;\r\n\t\treturn `${timestamp}${this.namespace ? ` [${this.namespace}]` : ''} ${text.join(' ')}`;\r\n\t}\r\n\r\n\tdebug(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.DEBUG) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.DEBUG, str);\r\n\t\tconsole.debug(CliForeground.LIGHT_GREY + str + CliEffects.CLEAR);\r\n\t}\r\n\r\n\tlog(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.LOG) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.LOG, str);\r\n\t\tconsole.log(CliEffects.CLEAR + str);\r\n\t}\r\n\r\n\tinfo(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.INFO) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.INFO, str);\r\n\t\tconsole.info(CliForeground.BLUE + str + CliEffects.CLEAR);\r\n\t}\r\n\r\n\twarn(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.WARN) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.WARN, str);\r\n\t\tconsole.warn(CliForeground.YELLOW + str + CliEffects.CLEAR);\r\n\t}\r\n\r\n\terror(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.ERROR) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.ERROR, str);\r\n\t\tconsole.error(CliForeground.RED + str + CliEffects.CLEAR);\r\n\t}\r\n}\r\n","export function countChars(text: string, pattern: RegExp) {\r\n\treturn text.length - text.replaceAll(pattern, '').length;\r\n}\r\n\r\nexport function createHex(length: number) {\r\n\treturn Array(length).fill(null).map(() => Math.round(Math.random() * 0xF).toString(16)).join('');\r\n}\r\n\r\n/**\r\n * String of all letters\r\n *\r\n */\r\nconst LETTER_LIST = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\r\n\r\n/**\r\n * String of all numbers\r\n *\r\n */\r\nconst NUMBER_LIST = '0123456789';\r\n\r\n/**\r\n * String of all symbols\r\n */\r\nconst SYMBOL_LIST = '~`!@#$%^&*()_-+={[}]|\\\\:;\"\\'<,>.?/';\r\n\r\n/**\r\n * String of all letters, numbers & symbols\r\n */\r\nconst CHAR_LIST = LETTER_LIST + NUMBER_LIST + SYMBOL_LIST;\r\n\r\nexport function formatPhoneNumber(number: string) {\r\n\tconst parts = /(\\+?1)?.*?(\\d{3}).*?(\\d{3}).*?(\\d{4})/g.exec(number);\r\n\tif(!parts) throw new Error(`Number cannot be parsed: ${number}`);\r\n\treturn `${parts[1] ?? ''} (${parts[2]}) ${parts[3]}-${parts[4]}`.trim();\r\n}\r\n\r\n/**\r\n * Insert a string into another string at a given position\r\n *\r\n * @example\r\n * ```\r\n * console.log(insertAt('Hello world!', ' glorious', 5);\r\n * // Output: Hello glorious world!\r\n * ```\r\n *\r\n * @param {string} target - Parent string you want to modify\r\n * @param {string} str - Value that will be injected to parent\r\n * @param {number} index - Position to inject string at\r\n * @returns {string} - New string\r\n */\r\nexport function insertAt(target: string, str: string, index: number): String {\r\n\treturn `${target.slice(0, index)}${str}${target.slice(index + 1)}`;\r\n}\r\n\r\nexport function pad(text: any, length: number, char: string, start = true) {\r\n\tconst t = text.toString();\r\n\tconst l = length - t.length;\r\n\tif(l <= 0) return t;\r\n\tconst padding = Array(~~(l / char.length)).fill(char).join('');\r\n\treturn start ? padding + t : t + padding;\r\n}\r\n\r\n/**\r\n * Generate a string of random characters.\r\n *\r\n * @example\r\n * ```ts\r\n * const random = randomString();\r\n * const randomByte = randomString(8, \"01\")\r\n * ```\r\n *\r\n * @param {number} length - length of generated string\r\n * @param {string} pool - character pool to generate string from\r\n * @return {string} generated string\r\n */\r\nexport function randomString(length: number, pool: string = CHAR_LIST): string {\r\n\treturn Array(length).fill(null).map(() => {\r\n\t\tconst n = ~~(Math.random() * pool.length);\r\n\t\treturn pool[n];\r\n\t}).join('');\r\n}\r\n\r\n/**\r\n * Generate a random string with fine control over letters, numbers & symbols\r\n *\r\n * @example\r\n * ```ts\r\n * const randomLetter = randomString(1, true);\r\n * const randomChar = randomString(1, true, true, true);\r\n * ```\r\n *\r\n * @param {number} length - length of generated string\r\n * @param {boolean} letters - Add letters to pool\r\n * @param {boolean} numbers - Add numbers to pool\r\n * @param {boolean} symbols - Add symbols to pool\r\n * @return {string} generated string\r\n */\r\nexport function randomStringBuilder(length: number, letters = false, numbers = false, symbols = false): string {\r\n\tif(!letters && !numbers && !symbols) throw new Error('Must enable at least one: letters, numbers, symbols');\r\n\treturn Array(length).fill(null).map(() => {\r\n\t\tlet c;\r\n\t\tdo {\r\n\t\t\tconst type = ~~(Math.random() * 3);\r\n\t\t\tif(letters && type == 0) {\r\n\t\t\t\tc = LETTER_LIST[~~(Math.random() * LETTER_LIST.length)];\r\n\t\t\t} else if(numbers && type == 1) {\r\n\t\t\t\tc = NUMBER_LIST[~~(Math.random() * NUMBER_LIST.length)];\r\n\t\t\t} else if(symbols && type == 2) {\r\n\t\t\t\tc = SYMBOL_LIST[~~(Math.random() * SYMBOL_LIST.length)];\r\n\t\t\t}\r\n\t\t} while(!c);\r\n\t\treturn c;\r\n\t}).join('');\r\n}\r\n\r\n/**\r\n * Find all substrings that match a given pattern.\r\n *\r\n * Roughly based on `String.prototype.matchAll`.\r\n *\r\n * @param {string} value - String to search.\r\n * @param {RegExp | string} regex - Regular expression to match.\r\n * @return {RegExpExecArray[]} Found matches.\r\n */\r\nexport function matchAll(value: string, regex: RegExp | string): RegExpExecArray[] {\r\n\tif(typeof regex === 'string') {\r\n\t\tregex = new RegExp(regex, 'g');\r\n\t}\r\n\r\n\t// https://stackoverflow.com/a/60290199\r\n\tif(!regex.global) {\r\n\t\tthrow new TypeError('Regular expression must be global.');\r\n\t}\r\n\r\n\tlet ret: RegExpExecArray[] = [];\r\n\tlet match: RegExpExecArray | null;\r\n\twhile((match = regex.exec(value)) !== null) {\r\n\t\tret.push(match);\r\n\t}\r\n\r\n\treturn ret;\r\n}\r\n\r\n/**\r\n * Create MD5 hash using native javascript\r\n * @param d String to hash\r\n * @returns {string} Hashed string\r\n */\r\nexport function md5(d: string) {\r\n\tvar r = M(V(Y(X(d),8*d.length)));return r.toLowerCase()};\r\n\tfunction M(d:any){for(var _,m=\"0123456789ABCDEF\",f=\"\",r=0;r<d.length;r++)_=d.charCodeAt(r),f+=m.charAt(_>>>4&15)+m.charAt(15&_);return f}\r\n\tfunction X(d:any){for(var _=Array(d.length>>2),m=0;m<_.length;m++)_[m]=0;for(m=0;m<8*d.length;m+=8)_[m>>5]|=(255&d.charCodeAt(m/8))<<m%32;return _}\r\n\tfunction V(d:any){for(var _=\"\",m=0;m<32*d.length;m+=8)_+=String.fromCharCode(d[m>>5]>>>m%32&255);return _}\r\n\tfunction Y(d:any,_:any){d[_>>5]|=128<<_%32,d[14+(_+64>>>9<<4)]=_;for(var m=1732584193,f=-271733879,r=-1732584194,i=271733878,n=0;n<d.length;n+=16){var h=m,t=f,g=r,e=i;f=md5_ii(f=md5_ii(f=md5_ii(f=md5_ii(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_ff(f=md5_ff(f=md5_ff(f=md5_ff(f,r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+0],7,-680876936),f,r,d[n+1],12,-389564586),m,f,d[n+2],17,606105819),i,m,d[n+3],22,-1044525330),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+4],7,-176418897),f,r,d[n+5],12,1200080426),m,f,d[n+6],17,-1473231341),i,m,d[n+7],22,-45705983),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+8],7,1770035416),f,r,d[n+9],12,-1958414417),m,f,d[n+10],17,-42063),i,m,d[n+11],22,-1990404162),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+12],7,1804603682),f,r,d[n+13],12,-40341101),m,f,d[n+14],17,-1502002290),i,m,d[n+15],22,1236535329),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+1],5,-165796510),f,r,d[n+6],9,-1069501632),m,f,d[n+11],14,643717713),i,m,d[n+0],20,-373897302),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+5],5,-701558691),f,r,d[n+10],9,38016083),m,f,d[n+15],14,-660478335),i,m,d[n+4],20,-405537848),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+9],5,568446438),f,r,d[n+14],9,-1019803690),m,f,d[n+3],14,-187363961),i,m,d[n+8],20,1163531501),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+13],5,-1444681467),f,r,d[n+2],9,-51403784),m,f,d[n+7],14,1735328473),i,m,d[n+12],20,-1926607734),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+5],4,-378558),f,r,d[n+8],11,-2022574463),m,f,d[n+11],16,1839030562),i,m,d[n+14],23,-35309556),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+1],4,-1530992060),f,r,d[n+4],11,1272893353),m,f,d[n+7],16,-155497632),i,m,d[n+10],23,-1094730640),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+13],4,681279174),f,r,d[n+0],11,-358537222),m,f,d[n+3],16,-722521979),i,m,d[n+6],23,76029189),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+9],4,-640364487),f,r,d[n+12],11,-421815835),m,f,d[n+15],16,530742520),i,m,d[n+2],23,-995338651),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+0],6,-198630844),f,r,d[n+7],10,1126891415),m,f,d[n+14],15,-1416354905),i,m,d[n+5],21,-57434055),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+12],6,1700485571),f,r,d[n+3],10,-1894986606),m,f,d[n+10],15,-1051523),i,m,d[n+1],21,-2054922799),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+8],6,1873313359),f,r,d[n+15],10,-30611744),m,f,d[n+6],15,-1560198380),i,m,d[n+13],21,1309151649),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+4],6,-145523070),f,r,d[n+11],10,-1120210379),m,f,d[n+2],15,718787259),i,m,d[n+9],21,-343485551),m=safe_add(m,h),f=safe_add(f,t),r=safe_add(r,g),i=safe_add(i,e)}return Array(m,f,r,i)}\r\n\tfunction md5_cmn(d:any,_:any,m:any,f:any,r:any,i:any){return safe_add(bit_rol(safe_add(safe_add(_,d),safe_add(f,i)),r),m)}\r\n\tfunction md5_ff(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(_&m|~_&f,d,_,r,i,n)}\r\n\tfunction md5_gg(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(_&f|m&~f,d,_,r,i,n)}\r\n\tfunction md5_hh(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(_^m^f,d,_,r,i,n)}\r\n\tfunction md5_ii(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(m^(_|~f),d,_,r,i,n)}\r\n\tfunction safe_add(d:any,_:any){var m=(65535&d)+(65535&_);return(d>>16)+(_>>16)+(m>>16)<<16|65535&m}\r\n\tfunction bit_rol(d:any,_:any){return d<<_|d>>>32-_\r\n}\r\n\r\n/**\r\n * Check if email is valid\r\n *\r\n * @param {string} email - Target\r\n * @returns {boolean} - Follows format\r\n */\r\nexport function validateEmail(email: string) {\r\n\treturn /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/.test(email);\r\n}\r\n","import {md5} from './string';\r\n\r\n/**\r\n * Convert data into a form encoded format.\r\n *\r\n * @param {any} data - data to convert\r\n * @returns {string} - Ecodeded form data\r\n */\r\nexport function formEncode(data: any): string {\r\n\treturn Object.entries(data).map(([key, value]) =>\r\n\t\tencodeURIComponent(key) + '=' + encodeURIComponent(<any>value)\r\n\t).join('&');\r\n}\r\n\r\n/**\r\n * Get profile image from Gravatar\r\n *\r\n * @param {string} email Account email address\r\n * @param {string} def Default image, can be a link or '404', see: https://docs.gravatar.com/general/images/\r\n * @returns {string} Gravatar URL\r\n */\r\nexport function gravatar(email: string, def='mp') {\r\n\tif(!email) return '';\r\n\treturn `https://www.gravatar.com/avatar/${md5(email)}?d=${def}`;\r\n}\r\n\r\n/** Parts of a URL */\r\nexport type ParsedUrl = {\r\n\tprotocol?: string,\r\n\tsubdomain?: string,\r\n\tdomain: string,\r\n\thost: string,\r\n\tport?: number,\r\n\tpath?: string,\r\n\tquery?: {[name: string]: string}\r\n\tfragment?: string\r\n}\r\n\r\n/**\r\n *\r\n * @param {string} url\r\n * @returns {RegExpExecArray}\r\n */\r\nexport function urlParser(url: string): ParsedUrl {\r\n\tconst processed = new RegExp(\r\n\t\t'(?:(?<protocol>[\\\\w\\\\d]+)\\\\:\\\\/\\\\/)?(?:(?<user>.+)\\\\@)?(?<host>(?<domain>[^:\\\\/\\\\?#@\\\\n]+)(?:\\\\:(?<port>\\\\d*))?)(?<path>\\\\/.*?)?(?:\\\\?(?<query>.*?))?(?:#(?<fragment>.*?))?$',\r\n\t\t'gm').exec(url);\r\n\tconst groups: ParsedUrl = <any>processed?.groups ?? {};\r\n\tconst domains = groups.domain.split('.');\r\n\tif(groups['port'] != null) groups.port = Number(groups.port);\r\n\tif(domains.length > 2) {\r\n\t\tgroups.domain = domains.splice(-2, 2).join('.');\r\n\t\tgroups.subdomain = domains.join('.');\r\n\t}\r\n\tif(groups.query) {\r\n\t\tconst split = (<any>groups.query).split('&'), query: any = {};\r\n\t\tsplit.forEach((q: any) => {\r\n\t\t\tconst [key, val] = q.split('=');\r\n\t\t\tquery[key] = val;\r\n\t\t});\r\n\t\tgroups.query = query;\r\n\t}\r\n\treturn groups;\r\n}\r\n","/**\r\n * Calculate the number of milliseconds until date/time\r\n *\r\n * @param {Date | number} date - Target\r\n * @returns {number} - Number of milliseconds until target\r\n */\r\nexport function timeUntil(date: Date | number): number {\r\n\treturn (date instanceof Date ? date.getTime() : date) - (new Date()).getTime();\r\n}\r\n\r\n/**\r\n * Use in conjunction with `await` to pause an async script\r\n *\r\n * @example\r\n * ```ts\r\n * async () => {\r\n * ...\r\n * await sleep(1000) // Pause for 1 second\r\n *\t ...\r\n * }\r\n * ```\r\n *\r\n * @param {number} ms - Time to pause for in milliseconds\r\n * @returns {Promise<unknown>} - Resolves promise when it's time to resume\r\n */\r\nexport function sleep(ms: number) {\r\n\treturn new Promise(res => setTimeout(res, ms));\r\n}\r\n\r\nexport function formatDate(date: Date | number | string) {\r\n\tconst d = date instanceof Date ? date : new Date(date);\r\n\treturn new Intl.DateTimeFormat(\"en-us\", {\r\n\t\tweekday: \"long\",\r\n\t\tmonth: \"short\",\r\n\t\tday: \"numeric\",\r\n\t\thour: \"numeric\",\r\n\t\tminute: \"numeric\",\r\n\t\thour12: true\r\n\t}).format(d);\r\n}\r\n"],"names":["clean","obj","undefinedOnly","o","key","value","deepCopy","dotNotation","prop","set","arr","flattenObj","parent","result","propName","includes","target","values","allowMissing","e","type","isEqual","a","b","ta","tb","mixin","constructors","c","name","sanitizedJSON","space","cache","addUnique","array","el","arrayDiff","makeUnique","v1","v2","caseInsensitiveSort","aVal","bVal","flattenArr","sortByProp","reverse","findByProp","v","i","n","makeArray","ASet","elements","index","acc","TypedEmitter","__publicField","event","args","l","listener","_a","res","unsubscribe","download","href","downloadProgress","url","downloadName","progress","response","contentLength","total","chunks","loaded","reader","processResult","blob","chunk","err","_XHR","opts","fn","headers","_b","resp","XHR","next","BadRequestError","UnauthorizedError","ForbiddenError","NotFoundError","InternalServerError","CustomError","message","code","newErr","CliEffects","CliForeground","CliBackground","LOG_LEVEL","_Logger","namespace","text","length","char","end","t","padding","now","str","Logger","countChars","pattern","createHex","LETTER_LIST","NUMBER_LIST","SYMBOL_LIST","CHAR_LIST","formatPhoneNumber","number","parts","insertAt","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
@@ -11,7 +11,7 @@ function q(n, e = !1) {
11
11
  function rt(n) {
12
12
  return JSON.parse(JSON.stringify(n));
13
13
  }
14
- function b(n, e, t) {
14
+ function C(n, e, t) {
15
15
  if (!(n == null || !e))
16
16
  return e.split(/[.[\]]/g).filter((r) => r.length).reduce((r, o, s, i) => {
17
17
  if ((o[0] == '"' || o[0] == "'") && (o = o.slice(1, -1)), !(r != null && r.hasOwnProperty(o))) {
@@ -76,7 +76,7 @@ function ct(n, e) {
76
76
  }
77
77
  function ut(n) {
78
78
  return function(e, t) {
79
- const r = b(e, n), o = b(t, n);
79
+ const r = C(e, n), o = C(t, n);
80
80
  return typeof r != "string" || typeof o != "string" ? 1 : r.toLowerCase().localeCompare(o.toLowerCase());
81
81
  };
82
82
  }
@@ -85,7 +85,7 @@ function F(n, e = []) {
85
85
  }
86
86
  function at(n, e = !1) {
87
87
  return function(t, r) {
88
- const o = b(t, n), s = b(r, n);
88
+ const o = C(t, n), s = C(r, n);
89
89
  return typeof o == "number" && typeof s == "number" ? (e ? -1 : 1) * (o - s) : o > s ? e ? -1 : 1 : o < s ? e ? 1 : -1 : 0;
90
90
  };
91
91
  }
@@ -139,7 +139,7 @@ class A extends Array {
139
139
  return new A([...this, ...e]);
140
140
  }
141
141
  }
142
- class k {
142
+ class N {
143
143
  constructor() {
144
144
  l(this, "listeners", {});
145
145
  }
@@ -180,34 +180,34 @@ class k {
180
180
  });
181
181
  }
182
182
  }
183
- l(k, "listeners", {});
183
+ l(N, "listeners", {});
184
184
  function J(n, e) {
185
185
  const t = document.createElement("a");
186
186
  t.href = n, t.download = e, document.body.appendChild(t), t.click(), document.body.removeChild(t);
187
187
  }
188
188
  function ft(n, e) {
189
- const t = new k();
189
+ const t = new N();
190
190
  return fetch(n).then((r) => {
191
191
  var w;
192
+ if (!r.ok)
193
+ return t.emit("failed", new Error(r.statusText));
192
194
  const o = r.headers.get("Content-Length") || "0", s = parseInt(o, 10);
193
195
  let i = [], d = 0;
194
196
  const g = (w = r.body) == null ? void 0 : w.getReader();
195
- g == null || g.read().then(function x($) {
196
- if ($.done) {
197
+ g == null || g.read().then(function x(k) {
198
+ if (k.done) {
197
199
  const m = new Blob(i);
198
200
  if (e) {
199
- const O = URL.createObjectURL(m);
200
- J(O, e), URL.revokeObjectURL(O);
201
+ const $ = URL.createObjectURL(m);
202
+ J($, e), URL.revokeObjectURL($);
201
203
  }
202
204
  t.emit("complete", m);
203
205
  } else {
204
- const m = $.value;
205
- i.push(m), d += m.length;
206
- const O = d / s;
207
- t.emit("progress", O), g.read().then(x);
206
+ const m = k.value;
207
+ i.push(m), d += m.length, t.emit("progress", d / s), g.read().then(x);
208
208
  }
209
209
  });
210
- }), t;
210
+ }).catch((r) => t.emit("failed", r)), t;
211
211
  }
212
212
  const y = class y {
213
213
  constructor(e = {}) {
@@ -252,8 +252,8 @@ const y = class y {
252
252
  }
253
253
  };
254
254
  l(y, "interceptors", {}), l(y, "headers", {});
255
- let S = y;
256
- S.addInterceptor((n, e) => {
255
+ let b = y;
256
+ b.addInterceptor((n, e) => {
257
257
  if (n.status == 200)
258
258
  return e();
259
259
  throw n.status == 400 ? new j(n.statusText) : n.status == 401 ? new U(n.statusText) : n.status == 403 ? new M(n.statusText) : n.status == 404 ? new P(n.statusText) : n.status == 500 ? new Y(n.statusText) : new E(n.statusText, n.status);
@@ -339,7 +339,7 @@ const B = {
339
339
  BLINK: "\x1B[5m",
340
340
  REVERSE: "\x1B[7m",
341
341
  HIDDEN: "\x1B[8m"
342
- }, C = {
342
+ }, O = {
343
343
  BLACK: "\x1B[30m",
344
344
  RED: "\x1B[31m",
345
345
  GREEN: "\x1B[32m",
@@ -368,7 +368,7 @@ const B = {
368
368
  GREY: "\x1B[100m"
369
369
  };
370
370
  var K = /* @__PURE__ */ ((n) => (n[n.ERROR = 0] = "ERROR", n[n.WARN = 1] = "WARN", n[n.INFO = 2] = "INFO", n[n.LOG = 3] = "LOG", n[n.DEBUG = 4] = "DEBUG", n))(K || {});
371
- const f = class f extends k {
371
+ const f = class f extends N {
372
372
  constructor(e) {
373
373
  super(), this.namespace = e;
374
374
  }
@@ -387,7 +387,7 @@ const f = class f extends k {
387
387
  if (f.LOG_LEVEL < 4)
388
388
  return;
389
389
  const t = this.format(...e);
390
- f.emit(4, t), console.debug(C.LIGHT_GREY + t + B.CLEAR);
390
+ f.emit(4, t), console.debug(O.LIGHT_GREY + t + B.CLEAR);
391
391
  }
392
392
  log(...e) {
393
393
  if (f.LOG_LEVEL < 3)
@@ -399,19 +399,19 @@ const f = class f extends k {
399
399
  if (f.LOG_LEVEL < 2)
400
400
  return;
401
401
  const t = this.format(...e);
402
- f.emit(2, t), console.info(C.BLUE + t + B.CLEAR);
402
+ f.emit(2, t), console.info(O.BLUE + t + B.CLEAR);
403
403
  }
404
404
  warn(...e) {
405
405
  if (f.LOG_LEVEL < 1)
406
406
  return;
407
407
  const t = this.format(...e);
408
- f.emit(1, t), console.warn(C.YELLOW + t + B.CLEAR);
408
+ f.emit(1, t), console.warn(O.YELLOW + t + B.CLEAR);
409
409
  }
410
410
  error(...e) {
411
411
  if (f.LOG_LEVEL < 0)
412
412
  return;
413
413
  const t = this.format(...e);
414
- f.emit(0, t), console.error(C.RED + t + B.CLEAR);
414
+ f.emit(0, t), console.error(O.RED + t + B.CLEAR);
415
415
  }
416
416
  };
417
417
  l(f, "LOG_LEVEL", 4);
@@ -422,7 +422,7 @@ function gt(n, e) {
422
422
  function yt(n) {
423
423
  return Array(n).fill(null).map(() => Math.round(Math.random() * 15).toString(16)).join("");
424
424
  }
425
- const T = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", I = "0123456789", N = "~`!@#$%^&*()_-+={[}]|\\:;\"'<,>.?/", V = T + I + N;
425
+ const L = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", S = "0123456789", I = "~`!@#$%^&*()_-+={[}]|\\:;\"'<,>.?/", V = L + S + I;
426
426
  function pt(n) {
427
427
  const e = /(\+?1)?.*?(\d{3}).*?(\d{3}).*?(\d{4})/g.exec(n);
428
428
  if (!e)
@@ -452,7 +452,7 @@ function mt(n, e = !1, t = !1, r = !1) {
452
452
  let o;
453
453
  do {
454
454
  const s = ~~(Math.random() * 3);
455
- e && s == 0 ? o = T[~~(Math.random() * T.length)] : t && s == 1 ? o = I[~~(Math.random() * I.length)] : r && s == 2 && (o = N[~~(Math.random() * N.length)]);
455
+ e && s == 0 ? o = L[~~(Math.random() * L.length)] : t && s == 1 ? o = S[~~(Math.random() * S.length)] : r && s == 2 && (o = I[~~(Math.random() * I.length)]);
456
456
  } while (!o);
457
457
  return o;
458
458
  }).join("");
@@ -494,20 +494,20 @@ function tt(n, e) {
494
494
  }
495
495
  return Array(t, r, o, s);
496
496
  }
497
- function L(n, e, t, r, o, s) {
497
+ function T(n, e, t, r, o, s) {
498
498
  return p(et(p(p(e, n), p(r, s)), o), t);
499
499
  }
500
500
  function c(n, e, t, r, o, s, i) {
501
- return L(e & t | ~e & r, n, e, o, s, i);
501
+ return T(e & t | ~e & r, n, e, o, s, i);
502
502
  }
503
503
  function u(n, e, t, r, o, s, i) {
504
- return L(e & r | t & ~r, n, e, o, s, i);
504
+ return T(e & r | t & ~r, n, e, o, s, i);
505
505
  }
506
506
  function a(n, e, t, r, o, s, i) {
507
- return L(e ^ t ^ r, n, e, o, s, i);
507
+ return T(e ^ t ^ r, n, e, o, s, i);
508
508
  }
509
509
  function h(n, e, t, r, o, s, i) {
510
- return L(t ^ (e | ~r), n, e, o, s, i);
510
+ return T(t ^ (e | ~r), n, e, o, s, i);
511
511
  }
512
512
  function p(n, e) {
513
513
  var t = (65535 & n) + (65535 & e);
@@ -541,13 +541,13 @@ function Ct(n) {
541
541
  }
542
542
  return t;
543
543
  }
544
- function bt(n) {
544
+ function Tt(n) {
545
545
  return (n instanceof Date ? n.getTime() : n) - (/* @__PURE__ */ new Date()).getTime();
546
546
  }
547
- function Lt(n) {
547
+ function bt(n) {
548
548
  return new Promise((e) => setTimeout(e, n));
549
549
  }
550
- function St(n) {
550
+ function Lt(n) {
551
551
  const e = n instanceof Date ? n : new Date(n);
552
552
  return new Intl.DateTimeFormat("en-us", {
553
553
  weekday: "long",
@@ -563,16 +563,16 @@ export {
563
563
  j as BadRequestError,
564
564
  dt as CliBackground,
565
565
  B as CliEffects,
566
- C as CliForeground,
566
+ O as CliForeground,
567
567
  E as CustomError,
568
568
  M as ForbiddenError,
569
569
  Y as InternalServerError,
570
570
  K as LOG_LEVEL,
571
571
  G as Logger,
572
572
  P as NotFoundError,
573
- k as TypedEmitter,
573
+ N as TypedEmitter,
574
574
  U as UnauthorizedError,
575
- S as XHR,
575
+ b as XHR,
576
576
  it as addUnique,
577
577
  ct as arrayDiff,
578
578
  ut as caseInsensitiveSort,
@@ -580,14 +580,14 @@ export {
580
580
  gt as countChars,
581
581
  yt as createHex,
582
582
  rt as deepCopy,
583
- b as dotNotation,
583
+ C as dotNotation,
584
584
  J as download,
585
585
  ft as downloadProgress,
586
586
  ht as findByProp,
587
587
  F as flattenArr,
588
588
  v as flattenObj,
589
589
  Rt as formEncode,
590
- St as formatDate,
590
+ Lt as formatDate,
591
591
  pt as formatPhoneNumber,
592
592
  Ot as gravatar,
593
593
  D as includes,
@@ -602,9 +602,9 @@ export {
602
602
  xt as randomString,
603
603
  mt as randomStringBuilder,
604
604
  st as sanitizedJSON,
605
- Lt as sleep,
605
+ bt as sleep,
606
606
  at as sortByProp,
607
- bt as timeUntil,
607
+ Tt as timeUntil,
608
608
  Ct as urlParser,
609
609
  At as validateEmail
610
610
  };
@@ -1 +1 @@
1
- {"version":3,"file":"utils.mjs","sources":["../src/objects.ts","../src/array.ts","../src/aset.ts","../src/emitter.ts","../src/download.ts","../src/xhr.ts","../src/errors.ts","../src/logger.ts","../src/string.ts","../src/misc.ts","../src/time.ts"],"sourcesContent":["/**\r\n * Removes any null values from an object in-place\r\n *\r\n * @example\r\n * ```ts\r\n * let test = {a: 0, b: false, c: null, d: 'abc'}\r\n * console.log(clean(test)); // Output: {a: 0, b: false, d: 'abc'}\r\n * ```\r\n *\r\n * @param {T} obj Object reference that will be cleaned\r\n * @param undefinedOnly Ignore null values\r\n * @returns {Partial<T>} Cleaned object\r\n */\r\nexport function clean<T>(obj: T, undefinedOnly = false): Partial<T> {\r\n\tif(obj == null) throw new Error(\"Cannot clean a NULL value\");\r\n\tif(Array.isArray(obj)) {\r\n\t\tobj = <any>obj.filter(o => o != null);\r\n\t} else {\r\n\t\tObject.entries(obj).forEach(([key, value]) => {\r\n\t\t\tif((undefinedOnly && value === undefined) || (!undefinedOnly && value == null)) delete (<any>obj)[key];\r\n\t\t});\r\n\t}\r\n\treturn <any>obj;\r\n}\r\n\r\n/**\r\n * Create a deep copy of an object (vs. a shallow copy of references)\r\n *\r\n * Should be replaced by `structuredClone` once released.\r\n *\r\n * @param {T} value Object to copy\r\n * @returns {T} Type\r\n */\r\nexport function deepCopy<T>(value: T): T {\r\n\treturn JSON.parse(JSON.stringify(value));\r\n}\r\n\r\n/**\r\n * Get/set a property of an object using dot notation\r\n *\r\n * @example\r\n * ```ts\r\n * // Get a value\r\n * const name = dotNotation<string>(person, 'firstName');\r\n * const familyCarMake = dotNotation(family, 'cars[0].make');\r\n * // Set a value\r\n * dotNotation(family, 'cars[0].make', 'toyota');\r\n * ```\r\n *\r\n * @type T Return type\r\n * @param {Object} obj source object to search\r\n * @param {string} prop property name (Dot notation & indexing allowed)\r\n * @param {any} set Set object property to value, omit to fetch value instead\r\n * @return {T} property value\r\n */\r\nexport function dotNotation<T>(obj: any, prop: string, set: T): T;\r\nexport function dotNotation<T>(obj: any, prop: string): T | undefined;\r\nexport function dotNotation<T>(obj: any, prop: string, set?: T): T | undefined {\r\n\tif(obj == null || !prop) return undefined;\r\n\t// Split property string by '.' or [index]\r\n\treturn <T>prop.split(/[.[\\]]/g).filter(prop => prop.length).reduce((obj, prop, i, arr) => {\r\n\t\tif(prop[0] == '\"' || prop[0] == \"'\") prop = prop.slice(1, -1); // Take quotes out\r\n\t\tif(!obj?.hasOwnProperty(prop)) {\r\n\t\t\tif(set == undefined) return undefined;\r\n\t\t\tobj[prop] = {};\r\n\t\t}\r\n\t\tif(set !== undefined && i == arr.length - 1)\r\n\t\t\treturn obj[prop] = set;\r\n\t\treturn obj[prop];\r\n\t}, obj);\r\n}\r\n\r\n/**\r\n * Recursively flatten a nested object, while maintaining key structure.\r\n *\r\n * @example\r\n * ```ts\r\n * const car = {honda: {model: \"Civic\"}};\r\n * console.log(flattenObj(car)); //Output {honda.model: \"Civic\"}\r\n * ```\r\n *\r\n * @param obj - Object to flatten\r\n * @param parent - Recursively check if key is a parent key or not\r\n * @param result - Result\r\n * @returns {object} - Flattened object\r\n */\r\nexport function flattenObj(obj: any, parent?: any, result: any = {}) {\r\n\tif(typeof obj === \"object\" && !Array.isArray(obj)) {\r\n\t\tfor(const key of Object.keys(obj)) {\r\n\t\t\tconst propName = parent ? parent + '.' + key : key;\r\n\t\t\tif(typeof obj[key] === 'object') {\r\n\t\t\t\tflattenObj(obj[key], propName, result);\r\n\t\t\t} else {\r\n\t\t\t\tresult[propName] = obj[key];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn result;\r\n\t}\r\n}\r\n\r\n/**\r\n * Check that an object has the following values\r\n *\r\n * @example\r\n * ```ts\r\n * const test = {a: 2, b: 2};\r\n * includes(test, {a: 1}); // true\r\n * includes(test, {b: 1, c: 3}); // false\r\n * ```\r\n *\r\n * @param target Object to search\r\n * @param values Criteria to check against\r\n * @param allowMissing Only check the keys that are available on the target\r\n * @returns {boolean} Does target include all the values\r\n */\r\nexport function includes(target: any, values: any, allowMissing = false): boolean {\r\n\tif(target == undefined) return allowMissing;\r\n\tif(Array.isArray(values)) return values.findIndex((e: any, i: number) => !includes(target[i], values[i], allowMissing)) == -1;\r\n\tconst type = typeof values;\r\n\tif(type != typeof target) return false;\r\n\tif(type == 'object') {\r\n\t\treturn Object.keys(values).find(key => !includes(target[key], values[key], allowMissing)) == null;\r\n\t}\r\n\tif(type == 'function') return target.toString() == values.toString();\r\n\treturn target == values;\r\n}\r\n\r\n/**\r\n * Deep check if two objects are equal\r\n *\r\n * @param {any} a - first item to compare\r\n * @param {any} b - second item to compare\r\n * @returns {boolean} True if they match\r\n */\r\nexport function isEqual(a: any, b: any): boolean {\r\n\tconst ta = typeof a, tb = typeof b;\r\n\tif((ta != 'object' || a == null) || (tb != 'object' || b == null))\r\n\t\treturn ta == 'function' && tb == 'function' ? a.toString() == b.toString() : a === b;\r\n\tconst keys = Object.keys(a);\r\n\tif(keys.length != Object.keys(b).length) return false;\r\n\treturn Object.keys(a).every(key => isEqual(a[key], b[key]));\r\n}\r\n\r\nexport function mixin(target: any, constructors: any[]) {\r\n\tconstructors.forEach(c => {\r\n\t\tObject.getOwnPropertyNames(c.prototype).forEach((name) => {\r\n\t\t\tObject.defineProperty(\r\n\t\t\t\ttarget.prototype,\r\n\t\t\t\tname,\r\n\t\t\t\tObject.getOwnPropertyDescriptor(c.prototype, name) ||\r\n\t\t\t\tObject.create(null)\r\n\t\t\t);\r\n\t\t});\r\n\t});\r\n}\r\n\r\nexport function sanitizedJSON(obj: any, space?: number) {\r\n\tlet cache: any[] = [];\r\n\treturn JSON.parse(JSON.stringify(obj, (key, value) => {\r\n\t\tif (typeof value === 'object' && value !== null) {\r\n\t\t\tif (cache.includes(value)) return;\r\n\t\t\tcache.push(value);\r\n\t\t}\r\n\t\treturn value;\r\n\t}, space));\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 class ASet<T> extends Array {\n\tget size() {\n\t\treturn this.length;\n\t}\n\n\tconstructor(elements: T[] = []) {\n\t\tsuper();\n\t\tif(!!elements?.['forEach'])\n\t\t\telements.forEach(el => this.add(el));\n\t}\n\n\tadd(el: T) {\n\t\tif(!this.has(el)) this.push(el);\n\t}\n\n\tdelete(el: T) {\n\t\tconst index = this.indexOf(el);\n\t\tif(index != -1) this.slice(index, 1);\n\t}\n\n\tdifference(set: ASet<T>) {\n\t\treturn new ASet<T>(this.reduce((acc, el) => {\n\t\t\tif(!set.has(el)) acc.push(el);\n\t\t\treturn acc;\n\t\t}, []));\n\t}\n\n\thas(el: T) {\n\t\treturn this.indexOf(el) != -1;\n\t}\n\n\tintersection(set: ASet<T>) {\n\t\treturn new ASet<T>(this.reduce((acc, el) => {\n\t\t\tif(set.has(el)) acc.push(el);\n\t\t\treturn acc;\n\t\t}, []));\n\t}\n\n\tisDisjointFrom(set: ASet<T>) {\n\t\treturn this.intersection(set).size == 0;\n\t}\n\n\tisSubsetOf(set: ASet<T>) {\n\t\treturn this.findIndex(el => !set.has(el)) == -1;\n\t}\n\n\tisSuperset(set: ASet<T>) {\n\t\treturn set.findIndex(el => !this.has(el)) == -1;\n\t}\n\n\tsymmetricDifference(set: ASet<T>) {\n\t\treturn new ASet([...this.difference(set), ...set.difference(this)]);\n\t}\n\n\tunion(set: ASet<T> | Array<T>) {\n\t\treturn new ASet([...this, ...set]);\n\t}\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, TypedEvents} from './emitter';\n\nexport type downloadEvents = TypedEvents & {\n\tcomplete: (blob: Blob) => any;\n\tprogress: (progress: number) => any;\n}\n\nexport function download(href: any, name: string) {\n\tconst a = document.createElement('a');\n\ta.href = href;\n\ta.download = name;\n\tdocument.body.appendChild(a);\n\ta.click();\n\tdocument.body.removeChild(a);\n}\n\n/**\n * Download a URL using fetch so progress can be tracked. Uses Typed Emitter to emit a \"progress\" &\n * \"complete\" event.\n *\n * @param {string} url\n * @param {string} downloadName\n * @return {TypedEmitter<downloadEvents>}\n */\nexport function downloadProgress(url: string, downloadName?: string) {\n\tconst emitter = new TypedEmitter<downloadEvents>();\n\tfetch(url).then(response => {\n\t\tconst contentLength = response.headers.get('Content-Length') || '0';\n\t\tconst total = parseInt(contentLength, 10);\n\t\tlet chunks: any[] = [], loaded = 0;\n\t\tconst reader = response.body?.getReader();\n\t\treader?.read().then(function processResult(result) {\n\t\t\tif(result.done) {\n\t\t\t\tconst blob = new Blob(chunks);\n\t\t\t\tif(downloadName) {\n\t\t\t\t\tconst url = URL.createObjectURL(blob);\n\t\t\t\t\tdownload(url, downloadName);\n\t\t\t\t\tURL.revokeObjectURL(url);\n\t\t\t\t}\n\t\t\t\temitter.emit('complete', blob);\n\t\t\t} else {\n\t\t\t\tconst chunk = result.value;\n\t\t\t\tchunks.push(chunk);\n\t\t\t\tloaded += chunk.length;\n\t\t\t\tconst progress = loaded / total;\n\t\t\t\temitter.emit('progress', progress);\n\t\t\t\treader.read().then(processResult);\n\t\t\t}\n\t\t});\n\t});\n\treturn emitter;\n}\n","import {TypedEmitter, TypedEvents} from './emitter.ts';\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\tskipConverting?: boolean;\r\n\t[key: string]: any;\r\n}\r\n\r\nexport type XhrOptions = {\r\n\theaders?: {[key: string | symbol]: string | null | undefined};\r\n\tinterceptors?: Interceptor[];\r\n\turl?: string;\r\n}\r\n\r\nexport class XHR {\r\n\tprivate static interceptors: {[key: string]: Interceptor} = {};\r\n\r\n\tstatic headers: {[key: string]: string | null | undefined} = {};\r\n\r\n\tprivate interceptors: {[key: string]: Interceptor} = {}\r\n\r\n\theaders: {[key: string]: string | null | undefined} = {}\r\n\r\n\tconstructor(public readonly opts: XhrOptions = {}) {\r\n\t\tthis.headers = opts.headers || {};\r\n\t\tif(opts.interceptors) {\r\n\t\t\topts.interceptors.forEach(i => XHR.addInterceptor(i));\r\n\t\t}\r\n\t}\r\n\r\n\tstatic addInterceptor(fn: Interceptor): () => void {\r\n\t\tconst key = Object.keys(XHR.interceptors).length.toString();\r\n\t\tXHR.interceptors[key] = fn;\r\n\t\treturn () => { XHR.interceptors[key] = <any>null; }\r\n\t}\r\n\r\n\taddInterceptor(fn: Interceptor): () => void {\r\n\t\tconst key = Object.keys(this.interceptors).length.toString();\r\n\t\tthis.interceptors[key] = fn;\r\n\t\treturn () => { this.interceptors[key] = <any>null; }\r\n\t}\r\n\r\n\tasync request<T>(opts: RequestOptions = {}): Promise<T> {\r\n\t\tif(!this.opts.url && !opts.url) throw new Error('URL needs to be set');\r\n\t\tconst url = (opts.url?.startsWith('http') ? opts.url : (this.opts.url || '') + (opts.url || '')).replace(/([^:]\\/)\\/+/g, '$1');\r\n\r\n\t\t// Prep headers\r\n\t\tconst headers = <any>clean({\r\n\t\t\t'Content-Type': (opts.body && !(opts.body instanceof FormData)) ? 'application/json' : undefined,\r\n\t\t\t...XHR.headers,\r\n\t\t\t...this.headers,\r\n\t\t\t...opts.headers\r\n\t\t});\r\n\r\n\t\t// Send request\r\n\t\treturn fetch(url, {\r\n\t\t\theaders,\r\n\t\t\tmethod: opts.method || (opts.body ? 'POST' : 'GET'),\r\n\t\t\tbody: (headers['Content-Type']?.startsWith('application/json') && opts.body) ? JSON.stringify(opts.body) : opts.body\r\n\t\t}).then(async resp => {\r\n\t\t\tfor(let fn of [...Object.values(XHR.interceptors), ...Object.values(this.interceptors)]) {\r\n\t\t\t\tawait new Promise<void>(res => fn(resp, () => res()));\r\n\t\t\t}\r\n\r\n\t\t\tif(!resp.ok) throw new Error(resp.statusText);\r\n\t\t\tif(!opts.skipConverting && resp.headers.get('Content-Type')?.startsWith('application/json')) return await resp.json();\r\n\t\t\tif(!opts.skipConverting && resp.headers.get('Content-Type')?.startsWith('text/plain')) return await <any>resp.text();\r\n\t\t\treturn resp;\r\n\t\t});\r\n\t}\r\n}\r\n","import {XHR} from './xhr';\r\n\r\nXHR.addInterceptor((resp: Response, next: () => void) => {\r\n\tif(resp.status == 200) return next();\r\n\tif(resp.status == 400) throw new BadRequestError(resp.statusText);\r\n\tif(resp.status == 401) throw new UnauthorizedError(resp.statusText);\r\n\tif(resp.status == 403) throw new ForbiddenError(resp.statusText);\r\n\tif(resp.status == 404) throw new NotFoundError(resp.statusText);\r\n\tif(resp.status == 500) throw new InternalServerError(resp.statusText);\r\n\tthrow new CustomError(resp.statusText, resp.status);\r\n});\r\n\r\nexport class CustomError extends Error {\r\n\tstatic code = 500;\r\n\r\n\tprivate _code?: number;\r\n\tget code(): number { return this._code || (<any>this).constructor.code; }\r\n\tset code(c: number) { this._code = c; }\r\n\r\n\tconstructor(message?: string, code?: number) {\r\n\t\tsuper(message);\r\n\t\tif(code != null) this._code = code;\r\n\t}\r\n\r\n\tstatic from(err: Error): CustomError {\r\n\t\tconst code = Number((<any>err).statusCode) ?? Number((<any>err).code);\r\n\t\tconst newErr = new this(err.message || err.toString());\r\n\t\treturn Object.assign(newErr, {\r\n\t\t\tstack: err.stack,\r\n\t\t\t...err,\r\n\t\t\tcode: code ?? undefined\r\n\t\t});\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code != undefined;\r\n\t}\r\n\r\n\ttoString() {\r\n\t\treturn this.message || super.toString();\r\n\t}\r\n}\r\n\r\nexport class BadRequestError extends CustomError {\r\n\tstatic code = 400;\r\n\r\n\tconstructor(message: string = 'Bad Request') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class UnauthorizedError extends CustomError {\r\n\tstatic code = 401;\r\n\r\n\tconstructor(message: string = 'Unauthorized') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class ForbiddenError extends CustomError {\r\n\tstatic code = 403;\r\n\r\n\tconstructor(message: string = 'Forbidden') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class NotFoundError extends CustomError {\r\n\tstatic code = 404;\r\n\r\n\tconstructor(message: string = 'Not Found') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class InternalServerError extends CustomError {\r\n\tstatic code = 500;\r\n\r\n\tconstructor(message: string = 'Internal Server Error') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n","import {TypedEmitter, TypedEvents} from './emitter';\r\n\r\nexport const CliEffects = {\r\n\tCLEAR: \"\\x1b[0m\",\r\n\tBRIGHT: \"\\x1b[1m\",\r\n\tDIM: \"\\x1b[2m\",\r\n\tUNDERSCORE: \"\\x1b[4m\",\r\n\tBLINK: \"\\x1b[5m\",\r\n\tREVERSE: \"\\x1b[7m\",\r\n\tHIDDEN: \"\\x1b[8m\",\r\n}\r\n\r\nexport const CliForeground = {\r\n\tBLACK: '\\x1b[30m',\r\n\tRED: '\\x1b[31m',\r\n\tGREEN: '\\x1b[32m',\r\n\tYELLOW: '\\x1b[33m',\r\n\tBLUE: '\\x1b[34m',\r\n\tMAGENTA: '\\x1b[35m',\r\n\tCYAN: '\\x1b[36m',\r\n\tLIGHT_GREY: '\\x1b[37m',\r\n\tGREY: '\\x1b[90m',\r\n\tLIGHT_RED: '\\x1b[91m',\r\n\tLIGHT_GREEN: '\\x1b[92m',\r\n\tLIGHT_YELLOW: '\\x1b[93m',\r\n\tLIGHT_BLUE: '\\x1b[94m',\r\n\tLIGHT_MAGENTA: '\\x1b[95m',\r\n\tLIGHT_CYAN: '\\x1b[96m',\r\n\tWHITE: '\\x1b[97m',\r\n}\r\n\r\nexport const CliBackground = {\r\n\tBLACK: \"\\x1b[40m\",\r\n\tRED: \"\\x1b[41m\",\r\n\tGREEN: \"\\x1b[42m\",\r\n\tYELLOW: \"\\x1b[43m\",\r\n\tBLUE: \"\\x1b[44m\",\r\n\tMAGENTA: \"\\x1b[45m\",\r\n\tCYAN: \"\\x1b[46m\",\r\n\tWHITE: \"\\x1b[47m\",\r\n\tGREY: \"\\x1b[100m\",\r\n}\r\n\r\nexport enum LOG_LEVEL {\r\n\tERROR = 0,\r\n\tWARN = 1,\r\n\tINFO = 2,\r\n\tLOG = 3,\r\n\tDEBUG = 4,\r\n}\r\n\r\nexport type LoggerEvents = TypedEvents & {\r\n\t'ERROR': (...args: any[]) => any;\r\n\t'WARN': (...args: any[]) => any;\r\n\t'INFO': (...args: any[]) => any;\r\n\t'LOG': (...args: any[]) => any;\r\n\t'DEBUG': (...args: any[]) => any;\r\n};\r\n\r\nexport class Logger extends TypedEmitter<LoggerEvents> {\r\n\tstatic LOG_LEVEL: LOG_LEVEL = LOG_LEVEL.DEBUG;\r\n\r\n\tconstructor(public readonly namespace?: string) {\r\n\t\tsuper();\r\n\t}\r\n\r\n\tprivate pad(text: any, length: number, char: string, end = false) {\r\n\t\tconst t = text.toString();\r\n\t\tconst l = length - t.length;\r\n\t\tif(l <= 0) return t;\r\n\t\tconst padding = Array(~~(l / char.length)).fill(char).join('');\r\n\t\treturn !end ? padding + t : t + padding;\r\n\t}\r\n\r\n\tprivate format(...text: string[]): string {\r\n\t\tconst now = new Date();\r\n\t\tconst timestamp = `${now.getFullYear()}-${now.getMonth() + 1}-${now.getDate()} ${this.pad(now.getHours().toString(), 2, '0')}:${this.pad(now.getMinutes().toString(), 2, '0')}:${this.pad(now.getSeconds().toString(), 2, '0')}.${this.pad(now.getMilliseconds().toString(), 3, '0', true)}`;\r\n\t\treturn `${timestamp}${this.namespace ? ` [${this.namespace}]` : ''} ${text.join(' ')}`;\r\n\t}\r\n\r\n\tdebug(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.DEBUG) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.DEBUG, str);\r\n\t\tconsole.debug(CliForeground.LIGHT_GREY + str + CliEffects.CLEAR);\r\n\t}\r\n\r\n\tlog(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.LOG) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.LOG, str);\r\n\t\tconsole.log(CliEffects.CLEAR + str);\r\n\t}\r\n\r\n\tinfo(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.INFO) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.INFO, str);\r\n\t\tconsole.info(CliForeground.BLUE + str + CliEffects.CLEAR);\r\n\t}\r\n\r\n\twarn(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.WARN) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.WARN, str);\r\n\t\tconsole.warn(CliForeground.YELLOW + str + CliEffects.CLEAR);\r\n\t}\r\n\r\n\terror(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.ERROR) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.ERROR, str);\r\n\t\tconsole.error(CliForeground.RED + str + CliEffects.CLEAR);\r\n\t}\r\n}\r\n","export function countChars(text: string, pattern: RegExp) {\r\n\treturn text.length - text.replaceAll(pattern, '').length;\r\n}\r\n\r\nexport function createHex(length: number) {\r\n\treturn Array(length).fill(null).map(() => Math.round(Math.random() * 0xF).toString(16)).join('');\r\n}\r\n\r\n/**\r\n * String of all letters\r\n *\r\n */\r\nconst LETTER_LIST = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\r\n\r\n/**\r\n * String of all numbers\r\n *\r\n */\r\nconst NUMBER_LIST = '0123456789';\r\n\r\n/**\r\n * String of all symbols\r\n */\r\nconst SYMBOL_LIST = '~`!@#$%^&*()_-+={[}]|\\\\:;\"\\'<,>.?/';\r\n\r\n/**\r\n * String of all letters, numbers & symbols\r\n */\r\nconst CHAR_LIST = LETTER_LIST + NUMBER_LIST + SYMBOL_LIST;\r\n\r\nexport function formatPhoneNumber(number: string) {\r\n\tconst parts = /(\\+?1)?.*?(\\d{3}).*?(\\d{3}).*?(\\d{4})/g.exec(number);\r\n\tif(!parts) throw new Error(`Number cannot be parsed: ${number}`);\r\n\treturn `${parts[1] ?? ''} (${parts[2]}) ${parts[3]}-${parts[4]}`.trim();\r\n}\r\n\r\n/**\r\n * Insert a string into another string at a given position\r\n *\r\n * @example\r\n * ```\r\n * console.log(insertAt('Hello world!', ' glorious', 5);\r\n * // Output: Hello glorious world!\r\n * ```\r\n *\r\n * @param {string} target - Parent string you want to modify\r\n * @param {string} str - Value that will be injected to parent\r\n * @param {number} index - Position to inject string at\r\n * @returns {string} - New string\r\n */\r\nexport function insertAt(target: string, str: string, index: number): String {\r\n\treturn `${target.slice(0, index)}${str}${target.slice(index + 1)}`;\r\n}\r\n\r\nexport function pad(text: any, length: number, char: string, start = true) {\r\n\tconst t = text.toString();\r\n\tconst l = length - t.length;\r\n\tif(l <= 0) return t;\r\n\tconst padding = Array(~~(l / char.length)).fill(char).join('');\r\n\treturn start ? padding + t : t + padding;\r\n}\r\n\r\n/**\r\n * Generate a string of random characters.\r\n *\r\n * @example\r\n * ```ts\r\n * const random = randomString();\r\n * const randomByte = randomString(8, \"01\")\r\n * ```\r\n *\r\n * @param {number} length - length of generated string\r\n * @param {string} pool - character pool to generate string from\r\n * @return {string} generated string\r\n */\r\nexport function randomString(length: number, pool: string = CHAR_LIST): string {\r\n\treturn Array(length).fill(null).map(() => {\r\n\t\tconst n = ~~(Math.random() * pool.length);\r\n\t\treturn pool[n];\r\n\t}).join('');\r\n}\r\n\r\n/**\r\n * Generate a random string with fine control over letters, numbers & symbols\r\n *\r\n * @example\r\n * ```ts\r\n * const randomLetter = randomString(1, true);\r\n * const randomChar = randomString(1, true, true, true);\r\n * ```\r\n *\r\n * @param {number} length - length of generated string\r\n * @param {boolean} letters - Add letters to pool\r\n * @param {boolean} numbers - Add numbers to pool\r\n * @param {boolean} symbols - Add symbols to pool\r\n * @return {string} generated string\r\n */\r\nexport function randomStringBuilder(length: number, letters = false, numbers = false, symbols = false): string {\r\n\tif(!letters && !numbers && !symbols) throw new Error('Must enable at least one: letters, numbers, symbols');\r\n\treturn Array(length).fill(null).map(() => {\r\n\t\tlet c;\r\n\t\tdo {\r\n\t\t\tconst type = ~~(Math.random() * 3);\r\n\t\t\tif(letters && type == 0) {\r\n\t\t\t\tc = LETTER_LIST[~~(Math.random() * LETTER_LIST.length)];\r\n\t\t\t} else if(numbers && type == 1) {\r\n\t\t\t\tc = NUMBER_LIST[~~(Math.random() * NUMBER_LIST.length)];\r\n\t\t\t} else if(symbols && type == 2) {\r\n\t\t\t\tc = SYMBOL_LIST[~~(Math.random() * SYMBOL_LIST.length)];\r\n\t\t\t}\r\n\t\t} while(!c);\r\n\t\treturn c;\r\n\t}).join('');\r\n}\r\n\r\n/**\r\n * Find all substrings that match a given pattern.\r\n *\r\n * Roughly based on `String.prototype.matchAll`.\r\n *\r\n * @param {string} value - String to search.\r\n * @param {RegExp | string} regex - Regular expression to match.\r\n * @return {RegExpExecArray[]} Found matches.\r\n */\r\nexport function matchAll(value: string, regex: RegExp | string): RegExpExecArray[] {\r\n\tif(typeof regex === 'string') {\r\n\t\tregex = new RegExp(regex, 'g');\r\n\t}\r\n\r\n\t// https://stackoverflow.com/a/60290199\r\n\tif(!regex.global) {\r\n\t\tthrow new TypeError('Regular expression must be global.');\r\n\t}\r\n\r\n\tlet ret: RegExpExecArray[] = [];\r\n\tlet match: RegExpExecArray | null;\r\n\twhile((match = regex.exec(value)) !== null) {\r\n\t\tret.push(match);\r\n\t}\r\n\r\n\treturn ret;\r\n}\r\n\r\n/**\r\n * Create MD5 hash using native javascript\r\n * @param d String to hash\r\n * @returns {string} Hashed string\r\n */\r\nexport function md5(d: string) {\r\n\tvar r = M(V(Y(X(d),8*d.length)));return r.toLowerCase()};\r\n\tfunction M(d:any){for(var _,m=\"0123456789ABCDEF\",f=\"\",r=0;r<d.length;r++)_=d.charCodeAt(r),f+=m.charAt(_>>>4&15)+m.charAt(15&_);return f}\r\n\tfunction X(d:any){for(var _=Array(d.length>>2),m=0;m<_.length;m++)_[m]=0;for(m=0;m<8*d.length;m+=8)_[m>>5]|=(255&d.charCodeAt(m/8))<<m%32;return _}\r\n\tfunction V(d:any){for(var _=\"\",m=0;m<32*d.length;m+=8)_+=String.fromCharCode(d[m>>5]>>>m%32&255);return _}\r\n\tfunction Y(d:any,_:any){d[_>>5]|=128<<_%32,d[14+(_+64>>>9<<4)]=_;for(var m=1732584193,f=-271733879,r=-1732584194,i=271733878,n=0;n<d.length;n+=16){var h=m,t=f,g=r,e=i;f=md5_ii(f=md5_ii(f=md5_ii(f=md5_ii(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_ff(f=md5_ff(f=md5_ff(f=md5_ff(f,r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+0],7,-680876936),f,r,d[n+1],12,-389564586),m,f,d[n+2],17,606105819),i,m,d[n+3],22,-1044525330),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+4],7,-176418897),f,r,d[n+5],12,1200080426),m,f,d[n+6],17,-1473231341),i,m,d[n+7],22,-45705983),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+8],7,1770035416),f,r,d[n+9],12,-1958414417),m,f,d[n+10],17,-42063),i,m,d[n+11],22,-1990404162),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+12],7,1804603682),f,r,d[n+13],12,-40341101),m,f,d[n+14],17,-1502002290),i,m,d[n+15],22,1236535329),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+1],5,-165796510),f,r,d[n+6],9,-1069501632),m,f,d[n+11],14,643717713),i,m,d[n+0],20,-373897302),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+5],5,-701558691),f,r,d[n+10],9,38016083),m,f,d[n+15],14,-660478335),i,m,d[n+4],20,-405537848),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+9],5,568446438),f,r,d[n+14],9,-1019803690),m,f,d[n+3],14,-187363961),i,m,d[n+8],20,1163531501),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+13],5,-1444681467),f,r,d[n+2],9,-51403784),m,f,d[n+7],14,1735328473),i,m,d[n+12],20,-1926607734),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+5],4,-378558),f,r,d[n+8],11,-2022574463),m,f,d[n+11],16,1839030562),i,m,d[n+14],23,-35309556),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+1],4,-1530992060),f,r,d[n+4],11,1272893353),m,f,d[n+7],16,-155497632),i,m,d[n+10],23,-1094730640),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+13],4,681279174),f,r,d[n+0],11,-358537222),m,f,d[n+3],16,-722521979),i,m,d[n+6],23,76029189),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+9],4,-640364487),f,r,d[n+12],11,-421815835),m,f,d[n+15],16,530742520),i,m,d[n+2],23,-995338651),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+0],6,-198630844),f,r,d[n+7],10,1126891415),m,f,d[n+14],15,-1416354905),i,m,d[n+5],21,-57434055),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+12],6,1700485571),f,r,d[n+3],10,-1894986606),m,f,d[n+10],15,-1051523),i,m,d[n+1],21,-2054922799),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+8],6,1873313359),f,r,d[n+15],10,-30611744),m,f,d[n+6],15,-1560198380),i,m,d[n+13],21,1309151649),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+4],6,-145523070),f,r,d[n+11],10,-1120210379),m,f,d[n+2],15,718787259),i,m,d[n+9],21,-343485551),m=safe_add(m,h),f=safe_add(f,t),r=safe_add(r,g),i=safe_add(i,e)}return Array(m,f,r,i)}\r\n\tfunction md5_cmn(d:any,_:any,m:any,f:any,r:any,i:any){return safe_add(bit_rol(safe_add(safe_add(_,d),safe_add(f,i)),r),m)}\r\n\tfunction md5_ff(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(_&m|~_&f,d,_,r,i,n)}\r\n\tfunction md5_gg(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(_&f|m&~f,d,_,r,i,n)}\r\n\tfunction md5_hh(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(_^m^f,d,_,r,i,n)}\r\n\tfunction md5_ii(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(m^(_|~f),d,_,r,i,n)}\r\n\tfunction safe_add(d:any,_:any){var m=(65535&d)+(65535&_);return(d>>16)+(_>>16)+(m>>16)<<16|65535&m}\r\n\tfunction bit_rol(d:any,_:any){return d<<_|d>>>32-_\r\n}\r\n\r\n/**\r\n * Check if email is valid\r\n *\r\n * @param {string} email - Target\r\n * @returns {boolean} - Follows format\r\n */\r\nexport function validateEmail(email: string) {\r\n\treturn /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/.test(email);\r\n}\r\n","import {md5} from './string';\r\n\r\n/**\r\n * Convert data into a form encoded format.\r\n *\r\n * @param {any} data - data to convert\r\n * @returns {string} - Ecodeded form data\r\n */\r\nexport function formEncode(data: any): string {\r\n\treturn Object.entries(data).map(([key, value]) =>\r\n\t\tencodeURIComponent(key) + '=' + encodeURIComponent(<any>value)\r\n\t).join('&');\r\n}\r\n\r\n/**\r\n * Get profile image from Gravatar\r\n *\r\n * @param {string} email Account email address\r\n * @param {string} def Default image, can be a link or '404', see: https://docs.gravatar.com/general/images/\r\n * @returns {string} Gravatar URL\r\n */\r\nexport function gravatar(email: string, def='mp') {\r\n\tif(!email) return '';\r\n\treturn `https://www.gravatar.com/avatar/${md5(email)}?d=${def}`;\r\n}\r\n\r\n/** Parts of a URL */\r\nexport type ParsedUrl = {\r\n\tprotocol?: string,\r\n\tsubdomain?: string,\r\n\tdomain: string,\r\n\thost: string,\r\n\tport?: number,\r\n\tpath?: string,\r\n\tquery?: {[name: string]: string}\r\n\tfragment?: string\r\n}\r\n\r\n/**\r\n *\r\n * @param {string} url\r\n * @returns {RegExpExecArray}\r\n */\r\nexport function urlParser(url: string): ParsedUrl {\r\n\tconst processed = new RegExp(\r\n\t\t'(?:(?<protocol>[\\\\w\\\\d]+)\\\\:\\\\/\\\\/)?(?:(?<user>.+)\\\\@)?(?<host>(?<domain>[^:\\\\/\\\\?#@\\\\n]+)(?:\\\\:(?<port>\\\\d*))?)(?<path>\\\\/.*?)?(?:\\\\?(?<query>.*?))?(?:#(?<fragment>.*?))?$',\r\n\t\t'gm').exec(url);\r\n\tconst groups: ParsedUrl = <any>processed?.groups ?? {};\r\n\tconst domains = groups.domain.split('.');\r\n\tif(groups['port'] != null) groups.port = Number(groups.port);\r\n\tif(domains.length > 2) {\r\n\t\tgroups.domain = domains.splice(-2, 2).join('.');\r\n\t\tgroups.subdomain = domains.join('.');\r\n\t}\r\n\tif(groups.query) {\r\n\t\tconst split = (<any>groups.query).split('&'), query: any = {};\r\n\t\tsplit.forEach((q: any) => {\r\n\t\t\tconst [key, val] = q.split('=');\r\n\t\t\tquery[key] = val;\r\n\t\t});\r\n\t\tgroups.query = query;\r\n\t}\r\n\treturn groups;\r\n}\r\n","/**\r\n * Calculate the number of milliseconds until date/time\r\n *\r\n * @param {Date | number} date - Target\r\n * @returns {number} - Number of milliseconds until target\r\n */\r\nexport function timeUntil(date: Date | number): number {\r\n\treturn (date instanceof Date ? date.getTime() : date) - (new Date()).getTime();\r\n}\r\n\r\n/**\r\n * Use in conjunction with `await` to pause an async script\r\n *\r\n * @example\r\n * ```ts\r\n * async () => {\r\n * ...\r\n * await sleep(1000) // Pause for 1 second\r\n *\t ...\r\n * }\r\n * ```\r\n *\r\n * @param {number} ms - Time to pause for in milliseconds\r\n * @returns {Promise<unknown>} - Resolves promise when it's time to resume\r\n */\r\nexport function sleep(ms: number) {\r\n\treturn new Promise(res => setTimeout(res, ms));\r\n}\r\n\r\nexport function formatDate(date: Date | number | string) {\r\n\tconst d = date instanceof Date ? date : new Date(date);\r\n\treturn new Intl.DateTimeFormat(\"en-us\", {\r\n\t\tweekday: \"long\",\r\n\t\tmonth: \"short\",\r\n\t\tday: \"numeric\",\r\n\t\thour: \"numeric\",\r\n\t\tminute: \"numeric\",\r\n\t\thour12: true\r\n\t}).format(d);\r\n}\r\n"],"names":["clean","obj","undefinedOnly","o","key","value","deepCopy","dotNotation","prop","set","i","arr","flattenObj","parent","result","propName","includes","target","values","allowMissing","e","type","isEqual","a","b","ta","tb","mixin","constructors","c","name","sanitizedJSON","space","cache","addUnique","array","el","arrayDiff","makeUnique","v1","v2","caseInsensitiveSort","aVal","bVal","flattenArr","sortByProp","reverse","findByProp","v","n","makeArray","ASet","elements","index","acc","TypedEmitter","__publicField","event","args","l","listener","_a","res","unsubscribe","download","href","downloadProgress","url","downloadName","emitter","response","contentLength","total","chunks","loaded","reader","processResult","blob","chunk","progress","_XHR","opts","fn","_b","headers","resp","XHR","next","BadRequestError","UnauthorizedError","ForbiddenError","NotFoundError","InternalServerError","CustomError","message","code","err","newErr","CliEffects","CliForeground","CliBackground","LOG_LEVEL","_Logger","namespace","text","length","char","end","t","padding","now","str","Logger","countChars","pattern","createHex","LETTER_LIST","NUMBER_LIST","SYMBOL_LIST","CHAR_LIST","formatPhoneNumber","number","parts","insertAt","pad","start","randomString","pool","randomStringBuilder","letters","numbers","symbols","matchAll","regex","ret","match","md5","d","r","M","V","Y","_","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/aset.ts","../src/emitter.ts","../src/download.ts","../src/xhr.ts","../src/errors.ts","../src/logger.ts","../src/string.ts","../src/misc.ts","../src/time.ts"],"sourcesContent":["/**\r\n * Removes any null values from an object in-place\r\n *\r\n * @example\r\n * ```ts\r\n * let test = {a: 0, b: false, c: null, d: 'abc'}\r\n * console.log(clean(test)); // Output: {a: 0, b: false, d: 'abc'}\r\n * ```\r\n *\r\n * @param {T} obj Object reference that will be cleaned\r\n * @param undefinedOnly Ignore null values\r\n * @returns {Partial<T>} Cleaned object\r\n */\r\nexport function clean<T>(obj: T, undefinedOnly = false): Partial<T> {\r\n\tif(obj == null) throw new Error(\"Cannot clean a NULL value\");\r\n\tif(Array.isArray(obj)) {\r\n\t\tobj = <any>obj.filter(o => o != null);\r\n\t} else {\r\n\t\tObject.entries(obj).forEach(([key, value]) => {\r\n\t\t\tif((undefinedOnly && value === undefined) || (!undefinedOnly && value == null)) delete (<any>obj)[key];\r\n\t\t});\r\n\t}\r\n\treturn <any>obj;\r\n}\r\n\r\n/**\r\n * Create a deep copy of an object (vs. a shallow copy of references)\r\n *\r\n * Should be replaced by `structuredClone` once released.\r\n *\r\n * @param {T} value Object to copy\r\n * @returns {T} Type\r\n */\r\nexport function deepCopy<T>(value: T): T {\r\n\treturn JSON.parse(JSON.stringify(value));\r\n}\r\n\r\n/**\r\n * Get/set a property of an object using dot notation\r\n *\r\n * @example\r\n * ```ts\r\n * // Get a value\r\n * const name = dotNotation<string>(person, 'firstName');\r\n * const familyCarMake = dotNotation(family, 'cars[0].make');\r\n * // Set a value\r\n * dotNotation(family, 'cars[0].make', 'toyota');\r\n * ```\r\n *\r\n * @type T Return type\r\n * @param {Object} obj source object to search\r\n * @param {string} prop property name (Dot notation & indexing allowed)\r\n * @param {any} set Set object property to value, omit to fetch value instead\r\n * @return {T} property value\r\n */\r\nexport function dotNotation<T>(obj: any, prop: string, set: T): T;\r\nexport function dotNotation<T>(obj: any, prop: string): T | undefined;\r\nexport function dotNotation<T>(obj: any, prop: string, set?: T): T | undefined {\r\n\tif(obj == null || !prop) return undefined;\r\n\t// Split property string by '.' or [index]\r\n\treturn <T>prop.split(/[.[\\]]/g).filter(prop => prop.length).reduce((obj, prop, i, arr) => {\r\n\t\tif(prop[0] == '\"' || prop[0] == \"'\") prop = prop.slice(1, -1); // Take quotes out\r\n\t\tif(!obj?.hasOwnProperty(prop)) {\r\n\t\t\tif(set == undefined) return undefined;\r\n\t\t\tobj[prop] = {};\r\n\t\t}\r\n\t\tif(set !== undefined && i == arr.length - 1)\r\n\t\t\treturn obj[prop] = set;\r\n\t\treturn obj[prop];\r\n\t}, obj);\r\n}\r\n\r\n/**\r\n * Recursively flatten a nested object, while maintaining key structure.\r\n *\r\n * @example\r\n * ```ts\r\n * const car = {honda: {model: \"Civic\"}};\r\n * console.log(flattenObj(car)); //Output {honda.model: \"Civic\"}\r\n * ```\r\n *\r\n * @param obj - Object to flatten\r\n * @param parent - Recursively check if key is a parent key or not\r\n * @param result - Result\r\n * @returns {object} - Flattened object\r\n */\r\nexport function flattenObj(obj: any, parent?: any, result: any = {}) {\r\n\tif(typeof obj === \"object\" && !Array.isArray(obj)) {\r\n\t\tfor(const key of Object.keys(obj)) {\r\n\t\t\tconst propName = parent ? parent + '.' + key : key;\r\n\t\t\tif(typeof obj[key] === 'object') {\r\n\t\t\t\tflattenObj(obj[key], propName, result);\r\n\t\t\t} else {\r\n\t\t\t\tresult[propName] = obj[key];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn result;\r\n\t}\r\n}\r\n\r\n/**\r\n * Check that an object has the following values\r\n *\r\n * @example\r\n * ```ts\r\n * const test = {a: 2, b: 2};\r\n * includes(test, {a: 1}); // true\r\n * includes(test, {b: 1, c: 3}); // false\r\n * ```\r\n *\r\n * @param target Object to search\r\n * @param values Criteria to check against\r\n * @param allowMissing Only check the keys that are available on the target\r\n * @returns {boolean} Does target include all the values\r\n */\r\nexport function includes(target: any, values: any, allowMissing = false): boolean {\r\n\tif(target == undefined) return allowMissing;\r\n\tif(Array.isArray(values)) return values.findIndex((e: any, i: number) => !includes(target[i], values[i], allowMissing)) == -1;\r\n\tconst type = typeof values;\r\n\tif(type != typeof target) return false;\r\n\tif(type == 'object') {\r\n\t\treturn Object.keys(values).find(key => !includes(target[key], values[key], allowMissing)) == null;\r\n\t}\r\n\tif(type == 'function') return target.toString() == values.toString();\r\n\treturn target == values;\r\n}\r\n\r\n/**\r\n * Deep check if two objects are equal\r\n *\r\n * @param {any} a - first item to compare\r\n * @param {any} b - second item to compare\r\n * @returns {boolean} True if they match\r\n */\r\nexport function isEqual(a: any, b: any): boolean {\r\n\tconst ta = typeof a, tb = typeof b;\r\n\tif((ta != 'object' || a == null) || (tb != 'object' || b == null))\r\n\t\treturn ta == 'function' && tb == 'function' ? a.toString() == b.toString() : a === b;\r\n\tconst keys = Object.keys(a);\r\n\tif(keys.length != Object.keys(b).length) return false;\r\n\treturn Object.keys(a).every(key => isEqual(a[key], b[key]));\r\n}\r\n\r\nexport function mixin(target: any, constructors: any[]) {\r\n\tconstructors.forEach(c => {\r\n\t\tObject.getOwnPropertyNames(c.prototype).forEach((name) => {\r\n\t\t\tObject.defineProperty(\r\n\t\t\t\ttarget.prototype,\r\n\t\t\t\tname,\r\n\t\t\t\tObject.getOwnPropertyDescriptor(c.prototype, name) ||\r\n\t\t\t\tObject.create(null)\r\n\t\t\t);\r\n\t\t});\r\n\t});\r\n}\r\n\r\nexport function sanitizedJSON(obj: any, space?: number) {\r\n\tlet cache: any[] = [];\r\n\treturn JSON.parse(JSON.stringify(obj, (key, value) => {\r\n\t\tif (typeof value === 'object' && value !== null) {\r\n\t\t\tif (cache.includes(value)) return;\r\n\t\t\tcache.push(value);\r\n\t\t}\r\n\t\treturn value;\r\n\t}, space));\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 class ASet<T> extends Array {\n\tget size() {\n\t\treturn this.length;\n\t}\n\n\tconstructor(elements: T[] = []) {\n\t\tsuper();\n\t\tif(!!elements?.['forEach'])\n\t\t\telements.forEach(el => this.add(el));\n\t}\n\n\tadd(el: T) {\n\t\tif(!this.has(el)) this.push(el);\n\t}\n\n\tdelete(el: T) {\n\t\tconst index = this.indexOf(el);\n\t\tif(index != -1) this.slice(index, 1);\n\t}\n\n\tdifference(set: ASet<T>) {\n\t\treturn new ASet<T>(this.reduce((acc, el) => {\n\t\t\tif(!set.has(el)) acc.push(el);\n\t\t\treturn acc;\n\t\t}, []));\n\t}\n\n\thas(el: T) {\n\t\treturn this.indexOf(el) != -1;\n\t}\n\n\tintersection(set: ASet<T>) {\n\t\treturn new ASet<T>(this.reduce((acc, el) => {\n\t\t\tif(set.has(el)) acc.push(el);\n\t\t\treturn acc;\n\t\t}, []));\n\t}\n\n\tisDisjointFrom(set: ASet<T>) {\n\t\treturn this.intersection(set).size == 0;\n\t}\n\n\tisSubsetOf(set: ASet<T>) {\n\t\treturn this.findIndex(el => !set.has(el)) == -1;\n\t}\n\n\tisSuperset(set: ASet<T>) {\n\t\treturn set.findIndex(el => !this.has(el)) == -1;\n\t}\n\n\tsymmetricDifference(set: ASet<T>) {\n\t\treturn new ASet([...this.difference(set), ...set.difference(this)]);\n\t}\n\n\tunion(set: ASet<T> | Array<T>) {\n\t\treturn new ASet([...this, ...set]);\n\t}\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, TypedEvents} from './emitter';\n\nexport type DownloadEvents = TypedEvents & {\n\tcomplete: (blob: Blob) => any;\n\tfailed: (error: Error) => any;\n\tprogress: (progress: number) => any;\n}\n\nexport function download(href: any, name: string) {\n\tconst a = document.createElement('a');\n\ta.href = href;\n\ta.download = name;\n\tdocument.body.appendChild(a);\n\ta.click();\n\tdocument.body.removeChild(a);\n}\n\n/**\n * Download a URL using fetch so progress can be tracked. Uses Typed Emitter to emit a \"progress\" &\n * \"complete\" event.\n *\n * @param {string} url\n * @param {string} downloadName\n * @return {TypedEmitter<DownloadEvents>}\n */\nexport function downloadProgress(url: string, downloadName?: string) {\n\tconst progress = new TypedEmitter<DownloadEvents>();\n\tfetch(url).then(response => {\n\t\tif(!response.ok) return progress.emit('failed', new Error(response.statusText));\n\t\tconst contentLength = response.headers.get('Content-Length') || '0';\n\t\tconst total = parseInt(contentLength, 10);\n\t\tlet chunks: any[] = [], loaded = 0;\n\t\tconst reader = response.body?.getReader();\n\t\treader?.read().then(function processResult(result) {\n\t\t\tif(result.done) {\n\t\t\t\tconst blob = new Blob(chunks);\n\t\t\t\tif(downloadName) {\n\t\t\t\t\tconst url = URL.createObjectURL(blob);\n\t\t\t\t\tdownload(url, downloadName);\n\t\t\t\t\tURL.revokeObjectURL(url);\n\t\t\t\t}\n\t\t\t\tprogress.emit('complete', blob);\n\t\t\t} else {\n\t\t\t\tconst chunk = result.value;\n\t\t\t\tchunks.push(chunk);\n\t\t\t\tloaded += chunk.length;\n\t\t\t\tprogress.emit('progress', loaded / total);\n\t\t\t\treader.read().then(processResult);\n\t\t\t}\n\t\t});\n\t}).catch(err => progress.emit('failed', err));\n\treturn progress;\n}\n","import {TypedEmitter, TypedEvents} from './emitter.ts';\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\tskipConverting?: boolean;\r\n\t[key: string]: any;\r\n}\r\n\r\nexport type XhrOptions = {\r\n\theaders?: {[key: string | symbol]: string | null | undefined};\r\n\tinterceptors?: Interceptor[];\r\n\turl?: string;\r\n}\r\n\r\nexport class XHR {\r\n\tprivate static interceptors: {[key: string]: Interceptor} = {};\r\n\r\n\tstatic headers: {[key: string]: string | null | undefined} = {};\r\n\r\n\tprivate interceptors: {[key: string]: Interceptor} = {}\r\n\r\n\theaders: {[key: string]: string | null | undefined} = {}\r\n\r\n\tconstructor(public readonly opts: XhrOptions = {}) {\r\n\t\tthis.headers = opts.headers || {};\r\n\t\tif(opts.interceptors) {\r\n\t\t\topts.interceptors.forEach(i => XHR.addInterceptor(i));\r\n\t\t}\r\n\t}\r\n\r\n\tstatic addInterceptor(fn: Interceptor): () => void {\r\n\t\tconst key = Object.keys(XHR.interceptors).length.toString();\r\n\t\tXHR.interceptors[key] = fn;\r\n\t\treturn () => { XHR.interceptors[key] = <any>null; }\r\n\t}\r\n\r\n\taddInterceptor(fn: Interceptor): () => void {\r\n\t\tconst key = Object.keys(this.interceptors).length.toString();\r\n\t\tthis.interceptors[key] = fn;\r\n\t\treturn () => { this.interceptors[key] = <any>null; }\r\n\t}\r\n\r\n\tasync request<T>(opts: RequestOptions = {}): Promise<T> {\r\n\t\tif(!this.opts.url && !opts.url) throw new Error('URL needs to be set');\r\n\t\tconst url = (opts.url?.startsWith('http') ? opts.url : (this.opts.url || '') + (opts.url || '')).replace(/([^:]\\/)\\/+/g, '$1');\r\n\r\n\t\t// Prep headers\r\n\t\tconst headers = <any>clean({\r\n\t\t\t'Content-Type': (opts.body && !(opts.body instanceof FormData)) ? 'application/json' : undefined,\r\n\t\t\t...XHR.headers,\r\n\t\t\t...this.headers,\r\n\t\t\t...opts.headers\r\n\t\t});\r\n\r\n\t\t// Send request\r\n\t\treturn fetch(url, {\r\n\t\t\theaders,\r\n\t\t\tmethod: opts.method || (opts.body ? 'POST' : 'GET'),\r\n\t\t\tbody: (headers['Content-Type']?.startsWith('application/json') && opts.body) ? JSON.stringify(opts.body) : opts.body\r\n\t\t}).then(async resp => {\r\n\t\t\tfor(let fn of [...Object.values(XHR.interceptors), ...Object.values(this.interceptors)]) {\r\n\t\t\t\tawait new Promise<void>(res => fn(resp, () => res()));\r\n\t\t\t}\r\n\r\n\t\t\tif(!resp.ok) throw new Error(resp.statusText);\r\n\t\t\tif(!opts.skipConverting && resp.headers.get('Content-Type')?.startsWith('application/json')) return await resp.json();\r\n\t\t\tif(!opts.skipConverting && resp.headers.get('Content-Type')?.startsWith('text/plain')) return await <any>resp.text();\r\n\t\t\treturn resp;\r\n\t\t});\r\n\t}\r\n}\r\n","import {XHR} from './xhr';\r\n\r\nXHR.addInterceptor((resp: Response, next: () => void) => {\r\n\tif(resp.status == 200) return next();\r\n\tif(resp.status == 400) throw new BadRequestError(resp.statusText);\r\n\tif(resp.status == 401) throw new UnauthorizedError(resp.statusText);\r\n\tif(resp.status == 403) throw new ForbiddenError(resp.statusText);\r\n\tif(resp.status == 404) throw new NotFoundError(resp.statusText);\r\n\tif(resp.status == 500) throw new InternalServerError(resp.statusText);\r\n\tthrow new CustomError(resp.statusText, resp.status);\r\n});\r\n\r\nexport class CustomError extends Error {\r\n\tstatic code = 500;\r\n\r\n\tprivate _code?: number;\r\n\tget code(): number { return this._code || (<any>this).constructor.code; }\r\n\tset code(c: number) { this._code = c; }\r\n\r\n\tconstructor(message?: string, code?: number) {\r\n\t\tsuper(message);\r\n\t\tif(code != null) this._code = code;\r\n\t}\r\n\r\n\tstatic from(err: Error): CustomError {\r\n\t\tconst code = Number((<any>err).statusCode) ?? Number((<any>err).code);\r\n\t\tconst newErr = new this(err.message || err.toString());\r\n\t\treturn Object.assign(newErr, {\r\n\t\t\tstack: err.stack,\r\n\t\t\t...err,\r\n\t\t\tcode: code ?? undefined\r\n\t\t});\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code != undefined;\r\n\t}\r\n\r\n\ttoString() {\r\n\t\treturn this.message || super.toString();\r\n\t}\r\n}\r\n\r\nexport class BadRequestError extends CustomError {\r\n\tstatic code = 400;\r\n\r\n\tconstructor(message: string = 'Bad Request') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class UnauthorizedError extends CustomError {\r\n\tstatic code = 401;\r\n\r\n\tconstructor(message: string = 'Unauthorized') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class ForbiddenError extends CustomError {\r\n\tstatic code = 403;\r\n\r\n\tconstructor(message: string = 'Forbidden') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class NotFoundError extends CustomError {\r\n\tstatic code = 404;\r\n\r\n\tconstructor(message: string = 'Not Found') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class InternalServerError extends CustomError {\r\n\tstatic code = 500;\r\n\r\n\tconstructor(message: string = 'Internal Server Error') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n","import {TypedEmitter, TypedEvents} from './emitter';\r\n\r\nexport const CliEffects = {\r\n\tCLEAR: \"\\x1b[0m\",\r\n\tBRIGHT: \"\\x1b[1m\",\r\n\tDIM: \"\\x1b[2m\",\r\n\tUNDERSCORE: \"\\x1b[4m\",\r\n\tBLINK: \"\\x1b[5m\",\r\n\tREVERSE: \"\\x1b[7m\",\r\n\tHIDDEN: \"\\x1b[8m\",\r\n}\r\n\r\nexport const CliForeground = {\r\n\tBLACK: '\\x1b[30m',\r\n\tRED: '\\x1b[31m',\r\n\tGREEN: '\\x1b[32m',\r\n\tYELLOW: '\\x1b[33m',\r\n\tBLUE: '\\x1b[34m',\r\n\tMAGENTA: '\\x1b[35m',\r\n\tCYAN: '\\x1b[36m',\r\n\tLIGHT_GREY: '\\x1b[37m',\r\n\tGREY: '\\x1b[90m',\r\n\tLIGHT_RED: '\\x1b[91m',\r\n\tLIGHT_GREEN: '\\x1b[92m',\r\n\tLIGHT_YELLOW: '\\x1b[93m',\r\n\tLIGHT_BLUE: '\\x1b[94m',\r\n\tLIGHT_MAGENTA: '\\x1b[95m',\r\n\tLIGHT_CYAN: '\\x1b[96m',\r\n\tWHITE: '\\x1b[97m',\r\n}\r\n\r\nexport const CliBackground = {\r\n\tBLACK: \"\\x1b[40m\",\r\n\tRED: \"\\x1b[41m\",\r\n\tGREEN: \"\\x1b[42m\",\r\n\tYELLOW: \"\\x1b[43m\",\r\n\tBLUE: \"\\x1b[44m\",\r\n\tMAGENTA: \"\\x1b[45m\",\r\n\tCYAN: \"\\x1b[46m\",\r\n\tWHITE: \"\\x1b[47m\",\r\n\tGREY: \"\\x1b[100m\",\r\n}\r\n\r\nexport enum LOG_LEVEL {\r\n\tERROR = 0,\r\n\tWARN = 1,\r\n\tINFO = 2,\r\n\tLOG = 3,\r\n\tDEBUG = 4,\r\n}\r\n\r\nexport type LoggerEvents = TypedEvents & {\r\n\t'ERROR': (...args: any[]) => any;\r\n\t'WARN': (...args: any[]) => any;\r\n\t'INFO': (...args: any[]) => any;\r\n\t'LOG': (...args: any[]) => any;\r\n\t'DEBUG': (...args: any[]) => any;\r\n};\r\n\r\nexport class Logger extends TypedEmitter<LoggerEvents> {\r\n\tstatic LOG_LEVEL: LOG_LEVEL = LOG_LEVEL.DEBUG;\r\n\r\n\tconstructor(public readonly namespace?: string) {\r\n\t\tsuper();\r\n\t}\r\n\r\n\tprivate pad(text: any, length: number, char: string, end = false) {\r\n\t\tconst t = text.toString();\r\n\t\tconst l = length - t.length;\r\n\t\tif(l <= 0) return t;\r\n\t\tconst padding = Array(~~(l / char.length)).fill(char).join('');\r\n\t\treturn !end ? padding + t : t + padding;\r\n\t}\r\n\r\n\tprivate format(...text: string[]): string {\r\n\t\tconst now = new Date();\r\n\t\tconst timestamp = `${now.getFullYear()}-${now.getMonth() + 1}-${now.getDate()} ${this.pad(now.getHours().toString(), 2, '0')}:${this.pad(now.getMinutes().toString(), 2, '0')}:${this.pad(now.getSeconds().toString(), 2, '0')}.${this.pad(now.getMilliseconds().toString(), 3, '0', true)}`;\r\n\t\treturn `${timestamp}${this.namespace ? ` [${this.namespace}]` : ''} ${text.join(' ')}`;\r\n\t}\r\n\r\n\tdebug(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.DEBUG) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.DEBUG, str);\r\n\t\tconsole.debug(CliForeground.LIGHT_GREY + str + CliEffects.CLEAR);\r\n\t}\r\n\r\n\tlog(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.LOG) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.LOG, str);\r\n\t\tconsole.log(CliEffects.CLEAR + str);\r\n\t}\r\n\r\n\tinfo(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.INFO) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.INFO, str);\r\n\t\tconsole.info(CliForeground.BLUE + str + CliEffects.CLEAR);\r\n\t}\r\n\r\n\twarn(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.WARN) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.WARN, str);\r\n\t\tconsole.warn(CliForeground.YELLOW + str + CliEffects.CLEAR);\r\n\t}\r\n\r\n\terror(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.ERROR) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.ERROR, str);\r\n\t\tconsole.error(CliForeground.RED + str + CliEffects.CLEAR);\r\n\t}\r\n}\r\n","export function countChars(text: string, pattern: RegExp) {\r\n\treturn text.length - text.replaceAll(pattern, '').length;\r\n}\r\n\r\nexport function createHex(length: number) {\r\n\treturn Array(length).fill(null).map(() => Math.round(Math.random() * 0xF).toString(16)).join('');\r\n}\r\n\r\n/**\r\n * String of all letters\r\n *\r\n */\r\nconst LETTER_LIST = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\r\n\r\n/**\r\n * String of all numbers\r\n *\r\n */\r\nconst NUMBER_LIST = '0123456789';\r\n\r\n/**\r\n * String of all symbols\r\n */\r\nconst SYMBOL_LIST = '~`!@#$%^&*()_-+={[}]|\\\\:;\"\\'<,>.?/';\r\n\r\n/**\r\n * String of all letters, numbers & symbols\r\n */\r\nconst CHAR_LIST = LETTER_LIST + NUMBER_LIST + SYMBOL_LIST;\r\n\r\nexport function formatPhoneNumber(number: string) {\r\n\tconst parts = /(\\+?1)?.*?(\\d{3}).*?(\\d{3}).*?(\\d{4})/g.exec(number);\r\n\tif(!parts) throw new Error(`Number cannot be parsed: ${number}`);\r\n\treturn `${parts[1] ?? ''} (${parts[2]}) ${parts[3]}-${parts[4]}`.trim();\r\n}\r\n\r\n/**\r\n * Insert a string into another string at a given position\r\n *\r\n * @example\r\n * ```\r\n * console.log(insertAt('Hello world!', ' glorious', 5);\r\n * // Output: Hello glorious world!\r\n * ```\r\n *\r\n * @param {string} target - Parent string you want to modify\r\n * @param {string} str - Value that will be injected to parent\r\n * @param {number} index - Position to inject string at\r\n * @returns {string} - New string\r\n */\r\nexport function insertAt(target: string, str: string, index: number): String {\r\n\treturn `${target.slice(0, index)}${str}${target.slice(index + 1)}`;\r\n}\r\n\r\nexport function pad(text: any, length: number, char: string, start = true) {\r\n\tconst t = text.toString();\r\n\tconst l = length - t.length;\r\n\tif(l <= 0) return t;\r\n\tconst padding = Array(~~(l / char.length)).fill(char).join('');\r\n\treturn start ? padding + t : t + padding;\r\n}\r\n\r\n/**\r\n * Generate a string of random characters.\r\n *\r\n * @example\r\n * ```ts\r\n * const random = randomString();\r\n * const randomByte = randomString(8, \"01\")\r\n * ```\r\n *\r\n * @param {number} length - length of generated string\r\n * @param {string} pool - character pool to generate string from\r\n * @return {string} generated string\r\n */\r\nexport function randomString(length: number, pool: string = CHAR_LIST): string {\r\n\treturn Array(length).fill(null).map(() => {\r\n\t\tconst n = ~~(Math.random() * pool.length);\r\n\t\treturn pool[n];\r\n\t}).join('');\r\n}\r\n\r\n/**\r\n * Generate a random string with fine control over letters, numbers & symbols\r\n *\r\n * @example\r\n * ```ts\r\n * const randomLetter = randomString(1, true);\r\n * const randomChar = randomString(1, true, true, true);\r\n * ```\r\n *\r\n * @param {number} length - length of generated string\r\n * @param {boolean} letters - Add letters to pool\r\n * @param {boolean} numbers - Add numbers to pool\r\n * @param {boolean} symbols - Add symbols to pool\r\n * @return {string} generated string\r\n */\r\nexport function randomStringBuilder(length: number, letters = false, numbers = false, symbols = false): string {\r\n\tif(!letters && !numbers && !symbols) throw new Error('Must enable at least one: letters, numbers, symbols');\r\n\treturn Array(length).fill(null).map(() => {\r\n\t\tlet c;\r\n\t\tdo {\r\n\t\t\tconst type = ~~(Math.random() * 3);\r\n\t\t\tif(letters && type == 0) {\r\n\t\t\t\tc = LETTER_LIST[~~(Math.random() * LETTER_LIST.length)];\r\n\t\t\t} else if(numbers && type == 1) {\r\n\t\t\t\tc = NUMBER_LIST[~~(Math.random() * NUMBER_LIST.length)];\r\n\t\t\t} else if(symbols && type == 2) {\r\n\t\t\t\tc = SYMBOL_LIST[~~(Math.random() * SYMBOL_LIST.length)];\r\n\t\t\t}\r\n\t\t} while(!c);\r\n\t\treturn c;\r\n\t}).join('');\r\n}\r\n\r\n/**\r\n * Find all substrings that match a given pattern.\r\n *\r\n * Roughly based on `String.prototype.matchAll`.\r\n *\r\n * @param {string} value - String to search.\r\n * @param {RegExp | string} regex - Regular expression to match.\r\n * @return {RegExpExecArray[]} Found matches.\r\n */\r\nexport function matchAll(value: string, regex: RegExp | string): RegExpExecArray[] {\r\n\tif(typeof regex === 'string') {\r\n\t\tregex = new RegExp(regex, 'g');\r\n\t}\r\n\r\n\t// https://stackoverflow.com/a/60290199\r\n\tif(!regex.global) {\r\n\t\tthrow new TypeError('Regular expression must be global.');\r\n\t}\r\n\r\n\tlet ret: RegExpExecArray[] = [];\r\n\tlet match: RegExpExecArray | null;\r\n\twhile((match = regex.exec(value)) !== null) {\r\n\t\tret.push(match);\r\n\t}\r\n\r\n\treturn ret;\r\n}\r\n\r\n/**\r\n * Create MD5 hash using native javascript\r\n * @param d String to hash\r\n * @returns {string} Hashed string\r\n */\r\nexport function md5(d: string) {\r\n\tvar r = M(V(Y(X(d),8*d.length)));return r.toLowerCase()};\r\n\tfunction M(d:any){for(var _,m=\"0123456789ABCDEF\",f=\"\",r=0;r<d.length;r++)_=d.charCodeAt(r),f+=m.charAt(_>>>4&15)+m.charAt(15&_);return f}\r\n\tfunction X(d:any){for(var _=Array(d.length>>2),m=0;m<_.length;m++)_[m]=0;for(m=0;m<8*d.length;m+=8)_[m>>5]|=(255&d.charCodeAt(m/8))<<m%32;return _}\r\n\tfunction V(d:any){for(var _=\"\",m=0;m<32*d.length;m+=8)_+=String.fromCharCode(d[m>>5]>>>m%32&255);return _}\r\n\tfunction Y(d:any,_:any){d[_>>5]|=128<<_%32,d[14+(_+64>>>9<<4)]=_;for(var m=1732584193,f=-271733879,r=-1732584194,i=271733878,n=0;n<d.length;n+=16){var h=m,t=f,g=r,e=i;f=md5_ii(f=md5_ii(f=md5_ii(f=md5_ii(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_ff(f=md5_ff(f=md5_ff(f=md5_ff(f,r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+0],7,-680876936),f,r,d[n+1],12,-389564586),m,f,d[n+2],17,606105819),i,m,d[n+3],22,-1044525330),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+4],7,-176418897),f,r,d[n+5],12,1200080426),m,f,d[n+6],17,-1473231341),i,m,d[n+7],22,-45705983),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+8],7,1770035416),f,r,d[n+9],12,-1958414417),m,f,d[n+10],17,-42063),i,m,d[n+11],22,-1990404162),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+12],7,1804603682),f,r,d[n+13],12,-40341101),m,f,d[n+14],17,-1502002290),i,m,d[n+15],22,1236535329),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+1],5,-165796510),f,r,d[n+6],9,-1069501632),m,f,d[n+11],14,643717713),i,m,d[n+0],20,-373897302),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+5],5,-701558691),f,r,d[n+10],9,38016083),m,f,d[n+15],14,-660478335),i,m,d[n+4],20,-405537848),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+9],5,568446438),f,r,d[n+14],9,-1019803690),m,f,d[n+3],14,-187363961),i,m,d[n+8],20,1163531501),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+13],5,-1444681467),f,r,d[n+2],9,-51403784),m,f,d[n+7],14,1735328473),i,m,d[n+12],20,-1926607734),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+5],4,-378558),f,r,d[n+8],11,-2022574463),m,f,d[n+11],16,1839030562),i,m,d[n+14],23,-35309556),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+1],4,-1530992060),f,r,d[n+4],11,1272893353),m,f,d[n+7],16,-155497632),i,m,d[n+10],23,-1094730640),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+13],4,681279174),f,r,d[n+0],11,-358537222),m,f,d[n+3],16,-722521979),i,m,d[n+6],23,76029189),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+9],4,-640364487),f,r,d[n+12],11,-421815835),m,f,d[n+15],16,530742520),i,m,d[n+2],23,-995338651),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+0],6,-198630844),f,r,d[n+7],10,1126891415),m,f,d[n+14],15,-1416354905),i,m,d[n+5],21,-57434055),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+12],6,1700485571),f,r,d[n+3],10,-1894986606),m,f,d[n+10],15,-1051523),i,m,d[n+1],21,-2054922799),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+8],6,1873313359),f,r,d[n+15],10,-30611744),m,f,d[n+6],15,-1560198380),i,m,d[n+13],21,1309151649),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+4],6,-145523070),f,r,d[n+11],10,-1120210379),m,f,d[n+2],15,718787259),i,m,d[n+9],21,-343485551),m=safe_add(m,h),f=safe_add(f,t),r=safe_add(r,g),i=safe_add(i,e)}return Array(m,f,r,i)}\r\n\tfunction md5_cmn(d:any,_:any,m:any,f:any,r:any,i:any){return safe_add(bit_rol(safe_add(safe_add(_,d),safe_add(f,i)),r),m)}\r\n\tfunction md5_ff(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(_&m|~_&f,d,_,r,i,n)}\r\n\tfunction md5_gg(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(_&f|m&~f,d,_,r,i,n)}\r\n\tfunction md5_hh(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(_^m^f,d,_,r,i,n)}\r\n\tfunction md5_ii(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(m^(_|~f),d,_,r,i,n)}\r\n\tfunction safe_add(d:any,_:any){var m=(65535&d)+(65535&_);return(d>>16)+(_>>16)+(m>>16)<<16|65535&m}\r\n\tfunction bit_rol(d:any,_:any){return d<<_|d>>>32-_\r\n}\r\n\r\n/**\r\n * Check if email is valid\r\n *\r\n * @param {string} email - Target\r\n * @returns {boolean} - Follows format\r\n */\r\nexport function validateEmail(email: string) {\r\n\treturn /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/.test(email);\r\n}\r\n","import {md5} from './string';\r\n\r\n/**\r\n * Convert data into a form encoded format.\r\n *\r\n * @param {any} data - data to convert\r\n * @returns {string} - Ecodeded form data\r\n */\r\nexport function formEncode(data: any): string {\r\n\treturn Object.entries(data).map(([key, value]) =>\r\n\t\tencodeURIComponent(key) + '=' + encodeURIComponent(<any>value)\r\n\t).join('&');\r\n}\r\n\r\n/**\r\n * Get profile image from Gravatar\r\n *\r\n * @param {string} email Account email address\r\n * @param {string} def Default image, can be a link or '404', see: https://docs.gravatar.com/general/images/\r\n * @returns {string} Gravatar URL\r\n */\r\nexport function gravatar(email: string, def='mp') {\r\n\tif(!email) return '';\r\n\treturn `https://www.gravatar.com/avatar/${md5(email)}?d=${def}`;\r\n}\r\n\r\n/** Parts of a URL */\r\nexport type ParsedUrl = {\r\n\tprotocol?: string,\r\n\tsubdomain?: string,\r\n\tdomain: string,\r\n\thost: string,\r\n\tport?: number,\r\n\tpath?: string,\r\n\tquery?: {[name: string]: string}\r\n\tfragment?: string\r\n}\r\n\r\n/**\r\n *\r\n * @param {string} url\r\n * @returns {RegExpExecArray}\r\n */\r\nexport function urlParser(url: string): ParsedUrl {\r\n\tconst processed = new RegExp(\r\n\t\t'(?:(?<protocol>[\\\\w\\\\d]+)\\\\:\\\\/\\\\/)?(?:(?<user>.+)\\\\@)?(?<host>(?<domain>[^:\\\\/\\\\?#@\\\\n]+)(?:\\\\:(?<port>\\\\d*))?)(?<path>\\\\/.*?)?(?:\\\\?(?<query>.*?))?(?:#(?<fragment>.*?))?$',\r\n\t\t'gm').exec(url);\r\n\tconst groups: ParsedUrl = <any>processed?.groups ?? {};\r\n\tconst domains = groups.domain.split('.');\r\n\tif(groups['port'] != null) groups.port = Number(groups.port);\r\n\tif(domains.length > 2) {\r\n\t\tgroups.domain = domains.splice(-2, 2).join('.');\r\n\t\tgroups.subdomain = domains.join('.');\r\n\t}\r\n\tif(groups.query) {\r\n\t\tconst split = (<any>groups.query).split('&'), query: any = {};\r\n\t\tsplit.forEach((q: any) => {\r\n\t\t\tconst [key, val] = q.split('=');\r\n\t\t\tquery[key] = val;\r\n\t\t});\r\n\t\tgroups.query = query;\r\n\t}\r\n\treturn groups;\r\n}\r\n","/**\r\n * Calculate the number of milliseconds until date/time\r\n *\r\n * @param {Date | number} date - Target\r\n * @returns {number} - Number of milliseconds until target\r\n */\r\nexport function timeUntil(date: Date | number): number {\r\n\treturn (date instanceof Date ? date.getTime() : date) - (new Date()).getTime();\r\n}\r\n\r\n/**\r\n * Use in conjunction with `await` to pause an async script\r\n *\r\n * @example\r\n * ```ts\r\n * async () => {\r\n * ...\r\n * await sleep(1000) // Pause for 1 second\r\n *\t ...\r\n * }\r\n * ```\r\n *\r\n * @param {number} ms - Time to pause for in milliseconds\r\n * @returns {Promise<unknown>} - Resolves promise when it's time to resume\r\n */\r\nexport function sleep(ms: number) {\r\n\treturn new Promise(res => setTimeout(res, ms));\r\n}\r\n\r\nexport function formatDate(date: Date | number | string) {\r\n\tconst d = date instanceof Date ? date : new Date(date);\r\n\treturn new Intl.DateTimeFormat(\"en-us\", {\r\n\t\tweekday: \"long\",\r\n\t\tmonth: \"short\",\r\n\t\tday: \"numeric\",\r\n\t\thour: \"numeric\",\r\n\t\tminute: \"numeric\",\r\n\t\thour12: true\r\n\t}).format(d);\r\n}\r\n"],"names":["clean","obj","undefinedOnly","o","key","value","deepCopy","dotNotation","prop","set","i","arr","flattenObj","parent","result","propName","includes","target","values","allowMissing","e","type","isEqual","a","b","ta","tb","mixin","constructors","c","name","sanitizedJSON","space","cache","addUnique","array","el","arrayDiff","makeUnique","v1","v2","caseInsensitiveSort","aVal","bVal","flattenArr","sortByProp","reverse","findByProp","v","n","makeArray","ASet","elements","index","acc","TypedEmitter","__publicField","event","args","l","listener","_a","res","unsubscribe","download","href","downloadProgress","url","downloadName","progress","response","contentLength","total","chunks","loaded","reader","processResult","blob","chunk","err","_XHR","opts","fn","_b","headers","resp","XHR","next","BadRequestError","UnauthorizedError","ForbiddenError","NotFoundError","InternalServerError","CustomError","message","code","newErr","CliEffects","CliForeground","CliBackground","LOG_LEVEL","_Logger","namespace","text","length","char","end","t","padding","now","str","Logger","countChars","pattern","createHex","LETTER_LIST","NUMBER_LIST","SYMBOL_LIST","CHAR_LIST","formatPhoneNumber","number","parts","insertAt","pad","start","randomString","pool","randomStringBuilder","letters","numbers","symbols","matchAll","regex","ret","match","md5","d","r","M","V","Y","_","m","f","h","g","md5_ii","md5_hh","md5_gg","md5_ff","safe_add","md5_cmn","bit_rol","validateEmail","email","formEncode","data","gravatar","def","urlParser","processed","groups","domains","split","query","q","val","timeUntil","date","sleep","ms","formatDate"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ztimson/utils",
3
- "version": "0.7.2",
3
+ "version": "0.8.0",
4
4
  "description": "Utility library",
5
5
  "author": "Zak Timson",
6
6
  "license": "MIT",