@ztimson/utils 0.15.1 → 0.15.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/aset.d.ts CHANGED
@@ -1,14 +1,71 @@
1
+ /**
2
+ * An array which functions as a set. It guarantees unique elements
3
+ * and provides set functions for comparisons
4
+ */
1
5
  export declare class ASet<T> extends Array {
6
+ /** Number of elements in set */
2
7
  get size(): number;
8
+ /**
9
+ * Array to create set from, duplicate values will be removed
10
+ * @param {T[]} elements Elements which will be added to set
11
+ */
3
12
  constructor(elements?: T[]);
13
+ /**
14
+ * Add single element to set if unique
15
+ * @param {T} el Element to add
16
+ */
4
17
  add(el: T): void;
18
+ /**
19
+ * Delete element from set
20
+ * @param {T} el Element that will be deleted
21
+ */
5
22
  delete(el: T): void;
23
+ /**
24
+ * Create list of elements this set has which the comparison set does not
25
+ * @param {ASet<T>} set Set to compare against
26
+ * @return {ASet<T>} Different elements
27
+ */
6
28
  difference(set: ASet<T>): ASet<T>;
29
+ /**
30
+ * Check if set includes element
31
+ * @param {T} el Element to look for
32
+ * @return {boolean} True if element was found, false otherwise
33
+ */
7
34
  has(el: T): boolean;
35
+ /**
36
+ * Create list of elements this set has in common with the comparison set
37
+ * @param {ASet<T>} set Set to compare against
38
+ * @return {boolean} Set of common elements
39
+ */
8
40
  intersection(set: ASet<T>): ASet<T>;
41
+ /**
42
+ * Check if this set has no elements in common with the comparison set
43
+ * @param {ASet<T>} set Set to compare against
44
+ * @return {boolean} True if nothing in common, false otherwise
45
+ */
9
46
  isDisjointFrom(set: ASet<T>): boolean;
47
+ /**
48
+ * Check if all elements in this set are included in the comparison set
49
+ * @param {ASet<T>} set Set to compare against
50
+ * @return {boolean} True if all elements are included, false otherwise
51
+ */
10
52
  isSubsetOf(set: ASet<T>): boolean;
53
+ /**
54
+ * Check if all elements from comparison set are included in this set
55
+ * @param {ASet<T>} set Set to compare against
56
+ * @return {boolean} True if all elements are included, false otherwise
57
+ */
11
58
  isSuperset(set: ASet<T>): boolean;
59
+ /**
60
+ * Create list of elements that are only in one set but not both (XOR)
61
+ * @param {ASet<T>} set Set to compare against
62
+ * @return {ASet<T>} New set of unique elements
63
+ */
12
64
  symmetricDifference(set: ASet<T>): ASet<any>;
65
+ /**
66
+ * Create joined list of elements included in this & the comparison set
67
+ * @param {ASet<T>} set Set join
68
+ * @return {ASet<T>} New set of both previous sets combined
69
+ */
13
70
  union(set: ASet<T> | Array<T>): ASet<any>;
14
71
  }
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- (function(c,g){typeof exports=="object"&&typeof module<"u"?g(exports):typeof define=="function"&&define.amd?define(["exports"],g):(c=typeof globalThis<"u"?globalThis:c||self,g(c.utils={}))})(this,function(c){"use strict";var vt=Object.defineProperty;var Ft=(c,g,A)=>g in c?vt(c,g,{enumerable:!0,configurable:!0,writable:!0,value:A}):c[g]=A;var l=(c,g,A)=>(Ft(c,typeof g!="symbol"?g+"":g,A),A);function g(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 H(n,...e){return e.forEach(t=>{for(const r in t)t[r]&&typeof t[r]=="object"&&!Array.isArray(t[r])?(n[r]||(n[r]={}),H(n[r],t[r])):n[r]=t[r]}),n}function L(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 rt(n){const e=new FormData;return Object.entries(n).forEach(([t,r])=>e.append(t,r)),e}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 S(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=>S(n[i],e[i]))}function ot(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 k(n){try{return JSON.parse(n)}catch{return n}}function it(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 st(n){return Object.entries(n).map(([e,t])=>encodeURIComponent(e)+"="+encodeURIComponent(t)).join("&")}function ct(n,e){return n.indexOf(e)===-1&&n.push(e),n}function at(n,e){return J([...n.filter(t=>!e.includes(r=>S(t,r))),...e.filter(t=>!n.includes(r=>S(t,r)))])}function ut(n){return function(e,t){const r=L(e,n),o=L(t,n);return typeof r!="string"||typeof o!="string"?1:r.toLowerCase().localeCompare(o.toLowerCase())}}function W(n,e=[]){return n.forEach(t=>Array.isArray(t)?W(t,e):e.push(t)),e}function lt(n,e=!1){return function(t,r){const o=L(t,n),i=L(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 ft(n,e){return t=>S(t[n],e)}function J(n){for(let e=n.length-1;e>=0;e--)n.slice(0,e).find(t=>S(t,n[e]))&&n.splice(e,1);return n}function ht(n){return Array.isArray(n)?n:[n]}class O 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 O(this.reduce((t,r)=>(e.has(r)||t.push(r),t),[]))}has(e){return this.indexOf(e)!=-1}intersection(e){return new O(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 O([...this.difference(e),...e.difference(this)])}union(e){return new O([...this,...e])}}class B extends Promise{constructor(t){super((r,o)=>t(i=>r(i),i=>o(i),i=>this.progress=i));l(this,"listeners",[]);l(this,"_progress",0)}get progress(){return this._progress}set progress(t){t!=this._progress&&(this._progress=t,this.listeners.forEach(r=>r(t)))}static from(t){return t instanceof B?t:new B((r,o)=>t.then((...i)=>r(...i)).catch((...i)=>o(...i)))}from(t){const r=B.from(t);return this.onProgress(o=>r.progress=o),r}onProgress(t){return this.listeners.push(t),this}then(t,r){const o=super.then(t,r);return this.from(o)}catch(t){return this.from(super.catch(t))}finally(t){return this.from(super.finally(t))}}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 dt(n,e){const t=URL.createObjectURL(n);z(t,e),URL.revokeObjectURL(t)}function yt(n={}){return new Promise(e=>{const t=document.createElement("input");t.type="file",t.accept=n.accept||"*",t.style.display="none",t.multiple=!!n.multiple,t.onblur=t.onchange=async()=>{e(Array.from(t.files)),t.remove()},document.body.appendChild(t),t.click()})}function gt(n){return new B((e,t,r)=>{const o=new XMLHttpRequest,i=new FormData;n.files.forEach(s=>i.append("file",s)),o.withCredentials=!!n.withCredentials,o.upload.addEventListener("progress",s=>s.lengthComputable?r(s.loaded/s.total):null),o.addEventListener("loadend",()=>e(k(o.responseText))),o.addEventListener("error",()=>t(k(o.responseText))),o.addEventListener("timeout",()=>t({error:"Request timed out"})),o.open("POST",n.url),Object.entries(n.headers||{}).forEach(([s,E])=>o.setRequestHeader(s,E)),o.send(i)})}class j{constructor(){l(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()})})}}l(j,"listeners",{});class b extends Error{constructor(t,r){super(t);l(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()}}l(b,"code",500);class x extends b{constructor(e="Bad Request"){super(e)}static instanceof(e){return e.constructor.code==this.code}}l(x,"code",400);class V extends b{constructor(e="Unauthorized"){super(e)}static instanceof(e){return e.constructor.code==this.code}}l(V,"code",401);class K extends b{constructor(e="Forbidden"){super(e)}static instanceof(e){return e.constructor.code==this.code}}l(K,"code",403);class Z extends b{constructor(e="Not Found"){super(e)}static instanceof(e){return e.constructor.code==this.code}}l(Z,"code",404);class X extends b{constructor(e="Internal Server Error"){super(e)}static instanceof(e){return e.constructor.code==this.code}}l(X,"code",500);const p=class p{constructor(e={}){l(this,"interceptors",{});l(this,"headers",{});l(this,"url");this.url=e.url??null,this.headers=e.headers||{},e.interceptors&&e.interceptors.forEach(t=>p.addInterceptor(t))}static addInterceptor(e){const t=Object.keys(p.interceptors).length.toString();return p.interceptors[t]=e,()=>{p.interceptors[t]=null}}addInterceptor(e){const t=Object.keys(this.interceptors).length.toString();return this.interceptors[t]=e,()=>{this.interceptors[t]=null}}request(e={}){var o;if(!this.url&&!e.url)throw new Error("URL needs to be set");let t=((o=e.url)!=null&&o.startsWith("http")?e.url:(this.url||"")+(e.url||"")).replace(/([^:]\/)\/+/g,"$1");if(e.fragment&&(t.includes("#")?t.replace(/#.*(\?|\n)/g,(i,s)=>`#${e.fragment}${s}`):t+="#"+e.fragment),e.query){const i=Array.isArray(e.query)?e.query:Object.keys(e.query).map(s=>({key:s,value:e.query[s]}));t+=(t.includes("?")?"&":"?")+i.map(s=>`${s.key}=${s.value}`).join("&")}const r=g({"Content-Type":e.body?e.body instanceof FormData?"multipart/form-data":"application/json":void 0,...p.headers,...this.headers,...e.headers});return typeof e.body=="object"&&e.body!=null&&r["Content-Type"]=="application/json"&&(e.body=JSON.stringify(e.body)),new B((i,s,E)=>{fetch(t,{headers:r,method:e.method||(e.body?"POST":"GET"),body:e.body}).then(async a=>{var et,nt;for(let u of[...Object.values(p.interceptors),...Object.values(this.interceptors)])await new Promise(I=>u(a,()=>I()));const D=a.headers.get("Content-Length"),v=D?parseInt(D,10):0;let tt=0;const F=(et=a.body)==null?void 0:et.getReader(),Mt=new ReadableStream({start(u){function I(){F==null||F.read().then(N=>{if(N.done)return u.close();tt+=N.value.byteLength,E(tt/v),u.enqueue(N.value),I()}).catch(N=>u.error(N))}I()}});if(a.data=new Response(Mt),e.decode==null||e.decode){const u=(nt=a.headers.get("Content-Type"))==null?void 0:nt.toLowerCase();u!=null&&u.includes("form")?a.data=await a.data.formData():u!=null&&u.includes("json")?a.data=await a.data.json():u!=null&&u.includes("text")?a.data=await a.data.text():u!=null&&u.includes("application")&&(a.data=await a.data.blob())}a.ok?i(a):s(a)})})}};l(p,"interceptors",{}),l(p,"headers",{});let P=p;const R={CLEAR:"\x1B[0m",BRIGHT:"\x1B[1m",DIM:"\x1B[2m",UNDERSCORE:"\x1B[4m",BLINK:"\x1B[5m",REVERSE:"\x1B[7m",HIDDEN:"\x1B[8m"},C={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"},mt={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 Q=(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))(Q||{});const m=class m extends j{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 E=Array(~~(s/r.length)).fill(r).join("");return o?i+E:E+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(m.LOG_LEVEL<4)return;const t=this.format(...e);m.emit(4,t),console.debug(C.LIGHT_GREY+t+R.CLEAR)}log(...e){if(m.LOG_LEVEL<3)return;const t=this.format(...e);m.emit(3,t),console.log(R.CLEAR+t)}info(...e){if(m.LOG_LEVEL<2)return;const t=this.format(...e);m.emit(2,t),console.info(C.BLUE+t+R.CLEAR)}warn(...e){if(m.LOG_LEVEL<1)return;const t=this.format(...e);m.emit(1,t),console.warn(C.YELLOW+t+R.CLEAR)}error(...e){if(m.LOG_LEVEL<0)return;const t=this.format(...e);m.emit(0,t),console.error(C.RED+t+R.CLEAR)}};l(m,"LOG_LEVEL",4);let U=m;function Et(n){const e=(E,a)=>a<1e-7?E:e(a,~~(E%a)),t=n.toString().length-2;let r=Math.pow(10,t),o=n*r;const i=e(o,r);o=~~(o/i),r=~~(r/i);const s=~~(o/r);return o-=s*r,`${s?s+" ":""}${~~o}/${~~r}`}function pt(n){let e=n.split(" ");const t=e.length==2?Number(e[0]):0;return e=e.pop().split("/"),t+Number(e[0])/Number(e[1])}function wt(n,e){return n.length-n.replaceAll(e,"").length}function At(n){return Array(n).fill(null).map(()=>Math.round(Math.random()*15).toString(16)).join("")}const q="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",G="0123456789",M="~`!@#$%^&*()_-+={[}]|\\:;\"'<,>.?/",Bt=q+G+M;function bt(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 St(n,e,t){return`${n.slice(0,t)}${e}${n.slice(t+1)}`}function Ot(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 Rt(n,e=Bt){return Array(n).fill(null).map(()=>{const t=~~(Math.random()*e.length);return e[t]}).join("")}function Lt(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=q[~~(Math.random()*q.length)]:t&&i==1?o=G[~~(Math.random()*G.length)]:r&&i==2&&(o=M[~~(Math.random()*M.length)])}while(!o);return o}).join("")}function Ct(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 _(n){var e=Nt(Dt(It(Tt(n),8*n.length)));return e.toLowerCase()}function Nt(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 Tt(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 Dt(n){for(var e="",t=0;t<32*n.length;t+=8)e+=String.fromCharCode(n[t>>5]>>>t%32&255);return e}function It(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 E=t,a=r,D=o,v=i;r=y(r=y(r=y(r=y(r=d(r=d(r=d(r=d(r=h(r=h(r=h(r=h(r=f(r=f(r=f(r=f(r,o=f(o,i=f(i,t=f(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=f(o,i=f(i,t=f(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=f(o,i=f(i,t=f(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=f(o,i=f(i,t=f(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=h(o,i=h(i,t=h(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=h(o,i=h(i,t=h(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=h(o,i=h(i,t=h(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=h(o,i=h(i,t=h(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=d(o,i=d(i,t=d(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=d(o,i=d(i,t=d(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=d(o,i=d(i,t=d(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=d(o,i=d(i,t=d(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=y(o,i=y(i,t=y(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=y(o,i=y(i,t=y(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=y(o,i=y(i,t=y(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=y(o,i=y(i,t=y(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=w(t,E),r=w(r,a),o=w(o,D),i=w(i,v)}return Array(t,r,o,i)}function T(n,e,t,r,o,i){return w($t(w(w(e,n),w(r,i)),o),t)}function f(n,e,t,r,o,i,s){return T(e&t|~e&r,n,e,o,i,s)}function h(n,e,t,r,o,i,s){return T(e&r|t&~r,n,e,o,i,s)}function d(n,e,t,r,o,i,s){return T(e^t^r,n,e,o,i,s)}function y(n,e,t,r,o,i,s){return T(t^(e|~r),n,e,o,i,s)}function w(n,e){var t=(65535&n)+(65535&e);return(n>>16)+(e>>16)+(t>>16)<<16|65535&t}function $t(n,e){return n<<e|n>>>32-e}function kt(n){return/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/.test(n)}function jt(n,e="mp"){return n?`https://www.gravatar.com/avatar/${_(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[E,a]=s.split("=");i[E]=a}),t.query=i}return t}function Ut(n){return(n instanceof Date?n.getTime():n)-new Date().getTime()}function qt(n){return new Promise(e=>setTimeout(e,n))}function Gt(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=O,c.BadRequestError=x,c.CliBackground=mt,c.CliEffects=R,c.CliForeground=C,c.CustomError=b,c.ForbiddenError=K,c.Http=P,c.InternalServerError=X,c.JSONAttemptParse=k,c.JSONSanitized=it,c.LOG_LEVEL=Q,c.Logger=U,c.NotFoundError=Z,c.PromiseProgress=B,c.TypedEmitter=j,c.UnauthorizedError=V,c.addUnique=ct,c.arrayDiff=at,c.caseInsensitiveSort=ut,c.clean=g,c.countChars=wt,c.createHex=At,c.dec2Frac=Et,c.deepCopy=A,c.deepMerge=H,c.dotNotation=L,c.download=z,c.downloadBlob=dt,c.fileBrowser=yt,c.findByProp=ft,c.flattenArr=W,c.flattenObj=Y,c.formData=rt,c.formatDate=Gt,c.formatPhoneNumber=bt,c.fracToDec=pt,c.gravatar=jt,c.includes=$,c.insertAt=St,c.isEqual=S,c.makeArray=ht,c.makeUnique=J,c.matchAll=Ct,c.md5=_,c.mixin=ot,c.pad=Ot,c.randomString=Rt,c.randomStringBuilder=Lt,c.sleep=qt,c.sortByProp=lt,c.timeUntil=Ut,c.uploadWithProgress=gt,c.urlEncode=st,c.urlParser=Pt,c.validateEmail=kt,Object.defineProperty(c,Symbol.toStringTag,{value:"Module"})});
1
+ (function(c,g){typeof exports=="object"&&typeof module<"u"?g(exports):typeof define=="function"&&define.amd?define(["exports"],g):(c=typeof globalThis<"u"?globalThis:c||self,g(c.utils={}))})(this,function(c){"use strict";var Ft=Object.defineProperty;var Ht=(c,g,A)=>g in c?Ft(c,g,{enumerable:!0,configurable:!0,writable:!0,value:A}):c[g]=A;var l=(c,g,A)=>(Ht(c,typeof g!="symbol"?g+"":g,A),A);function g(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 H(n,...e){return e.forEach(t=>{for(const r in t)t[r]&&typeof t[r]=="object"&&!Array.isArray(t[r])?(n[r]||(n[r]={}),H(n[r],t[r])):n[r]=t[r]}),n}function L(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 ot(n){const e=new FormData;return Object.entries(n).forEach(([t,r])=>e.append(t,r)),e}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 S(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=>S(n[i],e[i]))}function it(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 k(n){try{return JSON.parse(n)}catch{return n}}function st(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 ct(n){return Object.entries(n).map(([e,t])=>encodeURIComponent(e)+"="+encodeURIComponent(t)).join("&")}function at(n,e){return n.indexOf(e)===-1&&n.push(e),n}function ut(n,e){return J([...n.filter(t=>!e.includes(r=>S(t,r))),...e.filter(t=>!n.includes(r=>S(t,r)))])}function lt(n){return function(e,t){const r=L(e,n),o=L(t,n);return typeof r!="string"||typeof o!="string"?1:r.toLowerCase().localeCompare(o.toLowerCase())}}function W(n,e=[]){return n.forEach(t=>Array.isArray(t)?W(t,e):e.push(t)),e}function ft(n,e=!1){return function(t,r){const o=L(t,n),i=L(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 ht(n,e){return t=>S(t[n],e)}function J(n){for(let e=n.length-1;e>=0;e--)n.slice(0,e).find(t=>S(t,n[e]))&&n.splice(e,1);return n}function dt(n){return Array.isArray(n)?n:[n]}class O 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 O(this.filter(t=>!e.has(t)))}has(e){return this.indexOf(e)!=-1}intersection(e){return new O(this.filter(t=>e.has(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 O([...this.difference(e),...e.difference(this)])}union(e){return new O([...this,...e])}}class B extends Promise{constructor(t){super((r,o)=>t(i=>r(i),i=>o(i),i=>this.progress=i));l(this,"listeners",[]);l(this,"_progress",0)}get progress(){return this._progress}set progress(t){t!=this._progress&&(this._progress=t,this.listeners.forEach(r=>r(t)))}static from(t){return t instanceof B?t:new B((r,o)=>t.then((...i)=>r(...i)).catch((...i)=>o(...i)))}from(t){const r=B.from(t);return this.onProgress(o=>r.progress=o),r}onProgress(t){return this.listeners.push(t),this}then(t,r){const o=super.then(t,r);return this.from(o)}catch(t){return this.from(super.catch(t))}finally(t){return this.from(super.finally(t))}}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 yt(n,e){const t=URL.createObjectURL(n);z(t,e),URL.revokeObjectURL(t)}function gt(n={}){return new Promise(e=>{const t=document.createElement("input");t.type="file",t.accept=n.accept||"*",t.style.display="none",t.multiple=!!n.multiple,t.onblur=t.onchange=async()=>{e(Array.from(t.files)),t.remove()},document.body.appendChild(t),t.click()})}function mt(n){return new B((e,t,r)=>{const o=new XMLHttpRequest,i=new FormData;n.files.forEach(s=>i.append("file",s)),o.withCredentials=!!n.withCredentials,o.upload.addEventListener("progress",s=>s.lengthComputable?r(s.loaded/s.total):null),o.addEventListener("loadend",()=>e(k(o.responseText))),o.addEventListener("error",()=>t(k(o.responseText))),o.addEventListener("timeout",()=>t({error:"Request timed out"})),o.open("POST",n.url),Object.entries(n.headers||{}).forEach(([s,E])=>o.setRequestHeader(s,E)),o.send(i)})}class j{constructor(){l(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()})})}}l(j,"listeners",{});class b extends Error{constructor(t,r){super(t);l(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()}}l(b,"code",500);class V extends b{constructor(e="Bad Request"){super(e)}static instanceof(e){return e.constructor.code==this.code}}l(V,"code",400);class x extends b{constructor(e="Unauthorized"){super(e)}static instanceof(e){return e.constructor.code==this.code}}l(x,"code",401);class K extends b{constructor(e="Forbidden"){super(e)}static instanceof(e){return e.constructor.code==this.code}}l(K,"code",403);class Z extends b{constructor(e="Not Found"){super(e)}static instanceof(e){return e.constructor.code==this.code}}l(Z,"code",404);class X extends b{constructor(e="Internal Server Error"){super(e)}static instanceof(e){return e.constructor.code==this.code}}l(X,"code",500);const p=class p{constructor(e={}){l(this,"interceptors",{});l(this,"headers",{});l(this,"url");this.url=e.url??null,this.headers=e.headers||{},e.interceptors&&e.interceptors.forEach(t=>p.addInterceptor(t))}static addInterceptor(e){const t=Object.keys(p.interceptors).length.toString();return p.interceptors[t]=e,()=>{p.interceptors[t]=null}}addInterceptor(e){const t=Object.keys(this.interceptors).length.toString();return this.interceptors[t]=e,()=>{this.interceptors[t]=null}}request(e={}){var o;if(!this.url&&!e.url)throw new Error("URL needs to be set");let t=((o=e.url)!=null&&o.startsWith("http")?e.url:(this.url||"")+(e.url||"")).replace(/([^:]\/)\/+/g,"$1");if(e.fragment&&(t.includes("#")?t.replace(/#.*(\?|\n)/g,(i,s)=>`#${e.fragment}${s}`):t+="#"+e.fragment),e.query){const i=Array.isArray(e.query)?e.query:Object.keys(e.query).map(s=>({key:s,value:e.query[s]}));t+=(t.includes("?")?"&":"?")+i.map(s=>`${s.key}=${s.value}`).join("&")}const r=g({"Content-Type":e.body?e.body instanceof FormData?"multipart/form-data":"application/json":void 0,...p.headers,...this.headers,...e.headers});return typeof e.body=="object"&&e.body!=null&&r["Content-Type"]=="application/json"&&(e.body=JSON.stringify(e.body)),new B((i,s,E)=>{fetch(t,{headers:r,method:e.method||(e.body?"POST":"GET"),body:e.body}).then(async a=>{var nt,rt;for(let u of[...Object.values(p.interceptors),...Object.values(this.interceptors)])await new Promise(I=>u(a,()=>I()));const D=a.headers.get("Content-Length"),v=D?parseInt(D,10):0;let et=0;const F=(nt=a.body)==null?void 0:nt.getReader(),vt=new ReadableStream({start(u){function I(){F==null||F.read().then(N=>{if(N.done)return u.close();et+=N.value.byteLength,E(et/v),u.enqueue(N.value),I()}).catch(N=>u.error(N))}I()}});if(a.data=new Response(vt),e.decode==null||e.decode){const u=(rt=a.headers.get("Content-Type"))==null?void 0:rt.toLowerCase();u!=null&&u.includes("form")?a.data=await a.data.formData():u!=null&&u.includes("json")?a.data=await a.data.json():u!=null&&u.includes("text")?a.data=await a.data.text():u!=null&&u.includes("application")&&(a.data=await a.data.blob())}a.ok?i(a):s(a)})})}};l(p,"interceptors",{}),l(p,"headers",{});let P=p;const R={CLEAR:"\x1B[0m",BRIGHT:"\x1B[1m",DIM:"\x1B[2m",UNDERSCORE:"\x1B[4m",BLINK:"\x1B[5m",REVERSE:"\x1B[7m",HIDDEN:"\x1B[8m"},C={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"},Et={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 Q=(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))(Q||{});const m=class m extends j{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 E=Array(~~(s/r.length)).fill(r).join("");return o?i+E:E+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(m.LOG_LEVEL<4)return;const t=this.format(...e);m.emit(4,t),console.debug(C.LIGHT_GREY+t+R.CLEAR)}log(...e){if(m.LOG_LEVEL<3)return;const t=this.format(...e);m.emit(3,t),console.log(R.CLEAR+t)}info(...e){if(m.LOG_LEVEL<2)return;const t=this.format(...e);m.emit(2,t),console.info(C.BLUE+t+R.CLEAR)}warn(...e){if(m.LOG_LEVEL<1)return;const t=this.format(...e);m.emit(1,t),console.warn(C.YELLOW+t+R.CLEAR)}error(...e){if(m.LOG_LEVEL<0)return;const t=this.format(...e);m.emit(0,t),console.error(C.RED+t+R.CLEAR)}};l(m,"LOG_LEVEL",4);let U=m;function pt(n){const e=(E,a)=>a<1e-7?E:e(a,~~(E%a)),t=n.toString().length-2;let r=Math.pow(10,t),o=n*r;const i=e(o,r);o=~~(o/i),r=~~(r/i);const s=~~(o/r);return o-=s*r,`${s?s+" ":""}${~~o}/${~~r}`}function wt(n){let e=n.split(" ");const t=e.length==2?Number(e[0]):0;return e=e.pop().split("/"),t+Number(e[0])/Number(e[1])}function At(n,e){return n.length-n.replaceAll(e,"").length}function Bt(n){return Array(n).fill(null).map(()=>Math.round(Math.random()*15).toString(16)).join("")}const q="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",G="0123456789",M="~`!@#$%^&*()_-+={[}]|\\:;\"'<,>.?/",bt=q+G+M;function St(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 Ot(n,e,t){return`${n.slice(0,t)}${e}${n.slice(t+1)}`}function Rt(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 Lt(n,e=bt){return Array(n).fill(null).map(()=>{const t=~~(Math.random()*e.length);return e[t]}).join("")}function Ct(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=q[~~(Math.random()*q.length)]:t&&i==1?o=G[~~(Math.random()*G.length)]:r&&i==2&&(o=M[~~(Math.random()*M.length)])}while(!o);return o}).join("")}function Nt(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 _(n){var e=Tt(It($t(Dt(n),8*n.length)));return e.toLowerCase()}function Tt(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 Dt(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 It(n){for(var e="",t=0;t<32*n.length;t+=8)e+=String.fromCharCode(n[t>>5]>>>t%32&255);return e}function $t(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 E=t,a=r,D=o,v=i;r=y(r=y(r=y(r=y(r=d(r=d(r=d(r=d(r=h(r=h(r=h(r=h(r=f(r=f(r=f(r=f(r,o=f(o,i=f(i,t=f(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=f(o,i=f(i,t=f(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=f(o,i=f(i,t=f(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=f(o,i=f(i,t=f(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=h(o,i=h(i,t=h(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=h(o,i=h(i,t=h(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=h(o,i=h(i,t=h(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=h(o,i=h(i,t=h(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=d(o,i=d(i,t=d(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=d(o,i=d(i,t=d(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=d(o,i=d(i,t=d(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=d(o,i=d(i,t=d(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=y(o,i=y(i,t=y(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=y(o,i=y(i,t=y(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=y(o,i=y(i,t=y(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=y(o,i=y(i,t=y(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=w(t,E),r=w(r,a),o=w(o,D),i=w(i,v)}return Array(t,r,o,i)}function T(n,e,t,r,o,i){return w(kt(w(w(e,n),w(r,i)),o),t)}function f(n,e,t,r,o,i,s){return T(e&t|~e&r,n,e,o,i,s)}function h(n,e,t,r,o,i,s){return T(e&r|t&~r,n,e,o,i,s)}function d(n,e,t,r,o,i,s){return T(e^t^r,n,e,o,i,s)}function y(n,e,t,r,o,i,s){return T(t^(e|~r),n,e,o,i,s)}function w(n,e){var t=(65535&n)+(65535&e);return(n>>16)+(e>>16)+(t>>16)<<16|65535&t}function kt(n,e){return n<<e|n>>>32-e}function jt(n){return/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/.test(n)}function Pt(n,e="mp"){return n?`https://www.gravatar.com/avatar/${_(n)}?d=${e}`:""}function Ut(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[E,a]=s.split("=");i[E]=a}),t.query=i}return t}function qt(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)}function tt(n){return new Promise(e=>setTimeout(e,n))}async function Gt(n,e=100){for(;n();)await tt(e)}function Mt(n){return(n instanceof Date?n.getTime():n)-new Date().getTime()}c.ASet=O,c.BadRequestError=V,c.CliBackground=Et,c.CliEffects=R,c.CliForeground=C,c.CustomError=b,c.ForbiddenError=K,c.Http=P,c.InternalServerError=X,c.JSONAttemptParse=k,c.JSONSanitized=st,c.LOG_LEVEL=Q,c.Logger=U,c.NotFoundError=Z,c.PromiseProgress=B,c.TypedEmitter=j,c.UnauthorizedError=x,c.addUnique=at,c.arrayDiff=ut,c.caseInsensitiveSort=lt,c.clean=g,c.countChars=At,c.createHex=Bt,c.dec2Frac=pt,c.deepCopy=A,c.deepMerge=H,c.dotNotation=L,c.download=z,c.downloadBlob=yt,c.fileBrowser=gt,c.findByProp=ht,c.flattenArr=W,c.flattenObj=Y,c.formData=ot,c.formatDate=qt,c.formatPhoneNumber=St,c.fracToDec=wt,c.gravatar=Pt,c.includes=$,c.insertAt=Ot,c.isEqual=S,c.makeArray=dt,c.makeUnique=J,c.matchAll=Nt,c.md5=_,c.mixin=it,c.pad=Rt,c.randomString=Lt,c.randomStringBuilder=Ct,c.sleep=tt,c.sleepUntil=Gt,c.sortByProp=ft,c.timeUntil=Mt,c.uploadWithProgress=mt,c.urlEncode=ct,c.urlParser=Ut,c.validateEmail=jt,Object.defineProperty(c,Symbol.toStringTag,{value:"Module"})});
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/objects.ts","../src/array.ts","../src/aset.ts","../src/promise-progress.ts","../src/files.ts","../src/emitter.ts","../src/errors.ts","../src/http.ts","../src/logger.ts","../src/math.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 * Merge any number of objects into the target\r\n *\r\n * @param target Destination of all properties\r\n * @param sources Objects that will copied into target\r\n * @return {any} The des\r\n */\r\nexport function deepMerge<T>(target: any, ...sources: any[]): T {\r\n\tsources.forEach(s => {\r\n\t\tfor(const key in s) {\r\n\t\t\tif(s[key] && typeof s[key] == 'object' && !Array.isArray(s[key])) {\r\n\t\t\t\tif(!target[key]) target[key] = {};\r\n\t\t\t\tdeepMerge(target[key], s[key]);\r\n\t\t\t} else {\r\n\t\t\t\ttarget[key] = s[key];\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\treturn target;\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 * Convert object to FormData\r\n * @param target - Object to convert\r\n * @return {FormData} - Form object\r\n */\r\nexport function formData(target: any): FormData {\r\n\tconst data = new FormData();\r\n\tObject.entries(target).forEach(([key, value]) => data.append(key, <any>value));\r\n\treturn data;\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 JSONAttemptParse<T>(json: string): T | string {\r\n\ttry { return JSON.parse(json); }\r\n\tcatch { return json; }\r\n}\r\n\r\nexport function JSONSanitized(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\r\n/**\r\n * Convert object into URL encoded string\r\n *\r\n * @param {any} data - data to convert\r\n * @returns {string} - Encoded form data\r\n */\r\nexport function urlEncode(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","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 ProgressCallback = (progress: number) => any;\n\nexport class PromiseProgress<T> extends Promise<T> {\n\tprivate listeners: ProgressCallback[] = [];\n\n\tprivate _progress = 0;\n\tget progress() { return this._progress; }\n\tset progress(p: number) {\n\t\tif(p == this._progress) return;\n\t\tthis._progress = p;\n\t\tthis.listeners.forEach(l => l(p));\n\t}\n\n\tconstructor(executor: (resolve: (value: T) => any, reject: (reason: any) => void, progress: (progress: number) => any) => void) {\n\t\tsuper((resolve, reject) => executor(\n\t\t\t(value: T) => resolve(value),\n\t\t\t(reason: any) => reject(reason),\n\t\t\t(progress: number) => this.progress = progress,\n\t\t));\n\t}\n\n\tstatic from<T>(promise: Promise<T>): PromiseProgress<T> {\n\t\tif(promise instanceof PromiseProgress) return promise;\n\t\treturn new PromiseProgress<T>((res, rej) => promise\n\t\t\t.then((...args) => res(...args))\n\t\t\t.catch((...args) => rej(...args)));\n\t}\n\n\tprivate from(promise: Promise<T>): PromiseProgress<T> {\n\t\tconst newPromise = PromiseProgress.from(promise);\n\t\tthis.onProgress(p => newPromise.progress = p);\n\t\treturn newPromise;\n\t}\n\n\tonProgress(callback: ProgressCallback) {\n\t\tthis.listeners.push(callback);\n\t\treturn this;\n\t}\n\n\tthen(res?: (v: T) => any, rej?: (err: any) => any): PromiseProgress<any> {\n\t\tconst resp = super.then(res, rej);\n\t\treturn this.from(resp);\n\t}\n\n\tcatch(rej?: (err: any) => any): PromiseProgress<any> {\n\t\treturn this.from(super.catch(rej));\n\t}\n\n\tfinally(res?: () => any): PromiseProgress<any> {\n\t\treturn this.from(super.finally(res));\n\t}\n}\n","import {deepCopy, JSONAttemptParse} from './objects.ts';\nimport {PromiseProgress} from './promise-progress';\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\nexport function downloadBlob(blob: Blob, name: string) {\n\tconst url = URL.createObjectURL(blob);\n\tdownload(url, name);\n\tURL.revokeObjectURL(url);\n}\n\nexport function fileBrowser(options: {accept?: string, multiple?: boolean} = {}): Promise<File[]> {\n\treturn new Promise(res => {\n\t\tconst input = document.createElement('input');\n\t\tinput.type = 'file';\n\t\tinput.accept = options.accept || '*';\n\t\tinput.style.display='none';\n\t\tinput.multiple = !!options.multiple;\n\t\tinput.onblur = input.onchange = async () => {\n\t\t\tres(Array.from(<any>input.files));\n\t\t\tinput.remove();\n\t\t}\n\t\tdocument.body.appendChild(input);\n\t\tinput.click();\n\t});\n}\n\nexport function uploadWithProgress<T>(options: {\n\turl: string;\n\tfiles: File[];\n\theaders?: {[key: string]: string};\n\twithCredentials?: boolean;\n}): PromiseProgress<T> {\n\treturn new PromiseProgress<T>((res, rej, prog) => {\n\t\tconst xhr = new XMLHttpRequest();\n\t\tconst formData = new FormData();\n\t\toptions.files.forEach(f => formData.append('file', f));\n\n\t\txhr.withCredentials = !!options.withCredentials;\n\t\txhr.upload.addEventListener('progress', (event) => event.lengthComputable ? prog(event.loaded / event.total) : null);\n\t\txhr.addEventListener('loadend', () => res(<T>JSONAttemptParse(xhr.responseText)));\n\t\txhr.addEventListener('error', () => rej(JSONAttemptParse(xhr.responseText)));\n\t\txhr.addEventListener('timeout', () => rej({error: 'Request timed out'}));\n\n\t\txhr.open('POST', options.url);\n\t\tObject.entries(options.headers || {}).forEach(([key, value]) => xhr.setRequestHeader(key, value));\n\t\txhr.send(formData);\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","export 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 {clean} from './objects';\nimport {PromiseProgress} from './promise-progress';\n\nexport type DecodedResponse<T> = Response & {data: T | null}\n\nexport type HttpInterceptor = (response: Response, next: () => void) => void;\n\nexport type HttpRequestOptions = {\n\tbody?: any;\n\tdecode?: boolean;\n\tfragment?: string;\n\theaders?: {[key: string | symbol]: string | null | undefined};\n\tmethod?: 'GET' | 'POST' | 'PATCH' | 'DELETE';\n\tquery?: {key: string, value: string}[] | {[key: string]: string};\n\turl?: string;\n\t[key: string]: any;\n}\n\nexport type HttpDefaults = {\n\theaders?: {[key: string | symbol]: string | null | undefined};\n\tinterceptors?: HttpInterceptor[];\n\turl?: string;\n}\n\nexport class Http {\n\tprivate static interceptors: {[key: string]: HttpInterceptor} = {};\n\n\tstatic headers: {[key: string]: string | null | undefined} = {};\n\n\tprivate interceptors: {[key: string]: HttpInterceptor} = {}\n\n\theaders: {[key: string]: string | null | undefined} = {}\n\turl!: string | null;\n\n\tconstructor(defaults: HttpDefaults = {}) {\n\t\tthis.url = defaults.url ?? null;\n\t\tthis.headers = defaults.headers || {};\n\t\tif(defaults.interceptors) {\n\t\t\tdefaults.interceptors.forEach(i => Http.addInterceptor(i));\n\t\t}\n\t}\n\n\tstatic addInterceptor(fn: HttpInterceptor): () => void {\n\t\tconst key = Object.keys(Http.interceptors).length.toString();\n\t\tHttp.interceptors[key] = fn;\n\t\treturn () => { Http.interceptors[key] = <any>null; }\n\t}\n\n\taddInterceptor(fn: HttpInterceptor): () => void {\n\t\tconst key = Object.keys(this.interceptors).length.toString();\n\t\tthis.interceptors[key] = fn;\n\t\treturn () => { this.interceptors[key] = <any>null; }\n\t}\n\n\trequest<T>(opts: HttpRequestOptions = {}): PromiseProgress<DecodedResponse<T>> {\n\t\tif(!this.url && !opts.url) throw new Error('URL needs to be set');\n\t\tlet url = (opts.url?.startsWith('http') ? opts.url : (this.url || '') + (opts.url || '')).replace(/([^:]\\/)\\/+/g, '$1');\n\t\tif(opts.fragment) url.includes('#') ? url.replace(/#.*(\\?|\\n)/g, (match, arg1) => `#${opts.fragment}${arg1}`) : url += '#' + opts.fragment;\n\t\tif(opts.query) {\n\t\t\tconst q = Array.isArray(opts.query) ? opts.query :\n\t\t\t\tObject.keys(opts.query).map(k => ({key: k, value: (<any>opts.query)[k]}))\n\t\t\turl += (url.includes('?') ? '&' : '?') + q.map(q => `${q.key}=${q.value}`).join('&');\n\t\t}\n\n\t\t// Prep headers\n\t\tconst headers = <any>clean({\n\t\t\t'Content-Type': !opts.body ? undefined : (opts.body instanceof FormData ? 'multipart/form-data' : 'application/json'),\n\t\t\t...Http.headers,\n\t\t\t...this.headers,\n\t\t\t...opts.headers\n\t\t});\n\n\t\tif(typeof opts.body == 'object' && opts.body != null && headers['Content-Type'] == 'application/json')\n\t\t\topts.body = JSON.stringify(opts.body);\n\n\t\t// Send request\n\t\treturn new PromiseProgress((res, rej, prog) => {\n\t\t\tfetch(url, {\n\t\t\t\theaders,\n\t\t\t\tmethod: opts.method || (opts.body ? 'POST' : 'GET'),\n\t\t\t\tbody: opts.body\n\t\t\t}).then(async (resp: any) => {\n\t\t\t\tfor(let fn of [...Object.values(Http.interceptors), ...Object.values(this.interceptors)]) {\n\t\t\t\t\tawait new Promise<void>(res => fn(resp, () => res()));\n\t\t\t\t}\n\n\t\t\t\tconst contentLength = resp.headers.get('Content-Length');\n\t\t\t\tconst total = contentLength ? parseInt(contentLength, 10) : 0;\n\t\t\t\tlet loaded = 0;\n\n\t\t\t\tconst reader = resp.body?.getReader();\n\t\t\t\tconst stream = new ReadableStream({\n\t\t\t\t\tstart(controller) {\n\t\t\t\t\t\tfunction push() {\n\t\t\t\t\t\t\treader?.read().then((event: any) => {\n\t\t\t\t\t\t\t\tif(event.done) return controller.close();\n\t\t\t\t\t\t\t\tloaded += event.value.byteLength;\n\t\t\t\t\t\t\t\tprog(loaded / total);\n\t\t\t\t\t\t\t\tcontroller.enqueue(event.value);\n\t\t\t\t\t\t\t\tpush();\n\t\t\t\t\t\t\t}).catch((error: any) => controller.error(error));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpush();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tresp.data = new Response(stream);\n\t\t\t\tif(opts.decode == null || opts.decode) {\n\t\t\t\t\tconst content = resp.headers.get('Content-Type')?.toLowerCase();\n\t\t\t\t\tif(content?.includes('form')) resp.data = <T>await resp.data.formData();\n\t\t\t\t\telse if(content?.includes('json')) resp.data = <T>await resp.data.json();\n\t\t\t\t\telse if(content?.includes('text')) resp.data = <T>await resp.data.text();\n\t\t\t\t\telse if(content?.includes('application')) resp.data = <T>await resp.data.blob();\n\t\t\t\t}\n\n\t\t\t\tif(resp.ok) res(resp);\n\t\t\t\telse rej(resp);\n\t\t\t})\n\t\t});\n\t}\n}\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","/**\n * Convert decimal number to fraction\n *\n * @example\n * ```js\n * dec2Frac(1.25) // Outputs: \"1 1/4\"\n * ```\n *\n * @param {number} num Number to convert\n * @return {string} Fraction with remainder\n */\nexport function dec2Frac(num: number) {\n\tconst gcd = (a: number, b: number): number => {\n\t\tif (b < 0.0000001) return a;\n\t\treturn gcd(b, ~~(a % b));\n\t};\n\n\tconst len = num.toString().length - 2;\n\tlet denominator = Math.pow(10, len);\n\tlet numerator = num * denominator;\n\tconst divisor = gcd(numerator, denominator);\n\tnumerator = ~~(numerator / divisor);\n\tdenominator = ~~(denominator / divisor)\n\tconst remainder = ~~(numerator / denominator);\n\tnumerator -= remainder * denominator;\n\treturn `${remainder ? remainder + ' ' : ''}${~~(numerator)}/${~~(denominator)}`;\n}\n\n/**\n * Convert fraction to decimal number\n *\n * @example\n * ```js\n * fracToDec('1 1/4') // Outputs: 1.25\n * ```\n *\n * @param {string} frac Fraction to convert\n * @return {number} Faction as a decimal\n */\nexport function fracToDec(frac: string) {\n\tlet split = frac.split(' ');\n\tconst whole = split.length == 2 ? Number(split[0]) : 0;\n\tsplit = (<string>split.pop()).split('/');\n\treturn whole + (Number(split[0]) / Number(split[1]));\n}\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 * 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","deepMerge","target","sources","s","dotNotation","prop","set","arr","flattenObj","parent","result","propName","formData","data","includes","values","allowMissing","e","type","isEqual","a","b","ta","tb","mixin","constructors","c","name","JSONAttemptParse","json","JSONSanitized","space","cache","urlEncode","addUnique","array","el","arrayDiff","makeUnique","v1","v2","caseInsensitiveSort","aVal","bVal","flattenArr","sortByProp","reverse","findByProp","v","i","n","makeArray","ASet","elements","index","acc","PromiseProgress","executor","resolve","reject","reason","progress","__publicField","p","l","promise","res","rej","args","newPromise","callback","resp","download","href","downloadBlob","blob","url","fileBrowser","options","input","uploadWithProgress","prog","xhr","f","event","TypedEmitter","listener","_a","unsubscribe","CustomError","message","code","err","newErr","BadRequestError","UnauthorizedError","ForbiddenError","NotFoundError","InternalServerError","_Http","defaults","fn","opts","match","arg1","q","k","headers","contentLength","total","loaded","reader","stream","controller","push","error","content","_b","Http","CliEffects","CliForeground","CliBackground","LOG_LEVEL","_Logger","namespace","text","length","char","end","t","padding","now","str","Logger","dec2Frac","num","gcd","len","denominator","numerator","divisor","remainder","fracToDec","frac","split","whole","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","md5","d","r","M","V","Y","X","_","m","h","g","md5_ii","md5_hh","md5_gg","md5_ff","safe_add","md5_cmn","bit_rol","validateEmail","email","gravatar","def","urlParser","processed","groups","domains","query","val","timeUntil","date","sleep","ms","formatDate"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/objects.ts","../src/array.ts","../src/aset.ts","../src/promise-progress.ts","../src/files.ts","../src/emitter.ts","../src/errors.ts","../src/http.ts","../src/logger.ts","../src/math.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 * Merge any number of objects into the target\r\n *\r\n * @param target Destination of all properties\r\n * @param sources Objects that will copied into target\r\n * @return {any} The des\r\n */\r\nexport function deepMerge<T>(target: any, ...sources: any[]): T {\r\n\tsources.forEach(s => {\r\n\t\tfor(const key in s) {\r\n\t\t\tif(s[key] && typeof s[key] == 'object' && !Array.isArray(s[key])) {\r\n\t\t\t\tif(!target[key]) target[key] = {};\r\n\t\t\t\tdeepMerge(target[key], s[key]);\r\n\t\t\t} else {\r\n\t\t\t\ttarget[key] = s[key];\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\treturn target;\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 * Convert object to FormData\r\n * @param target - Object to convert\r\n * @return {FormData} - Form object\r\n */\r\nexport function formData(target: any): FormData {\r\n\tconst data = new FormData();\r\n\tObject.entries(target).forEach(([key, value]) => data.append(key, <any>value));\r\n\treturn data;\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 JSONAttemptParse<T>(json: string): T | string {\r\n\ttry { return JSON.parse(json); }\r\n\tcatch { return json; }\r\n}\r\n\r\nexport function JSONSanitized(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\r\n/**\r\n * Convert object into URL encoded string\r\n *\r\n * @param {any} data - data to convert\r\n * @returns {string} - Encoded form data\r\n */\r\nexport function urlEncode(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","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","/**\n * An array which functions as a set. It guarantees unique elements\n * and provides set functions for comparisons\n */\nexport class ASet<T> extends Array {\n\t/** Number of elements in set */\n\tget size() {\n\t\treturn this.length;\n\t}\n\n\t/**\n\t * Array to create set from, duplicate values will be removed\n\t * @param {T[]} elements Elements which will be added to set\n\t */\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\t/**\n\t * Add single element to set if unique\n\t * @param {T} el Element to add\n\t */\n\tadd(el: T) {\n\t\tif(!this.has(el)) this.push(el);\n\t}\n\n\t/**\n\t * Delete element from set\n\t * @param {T} el Element that will be deleted\n\t */\n\tdelete(el: T) {\n\t\tconst index = this.indexOf(el);\n\t\tif(index != -1) this.slice(index, 1);\n\t}\n\n\t/**\n\t * Create list of elements this set has which the comparison set does not\n\t * @param {ASet<T>} set Set to compare against\n\t * @return {ASet<T>} Different elements\n\t */\n\tdifference(set: ASet<T>) {\n\t\treturn new ASet<T>(this.filter(el => !set.has(el)));\n\t}\n\n\t/**\n\t * Check if set includes element\n\t * @param {T} el Element to look for\n\t * @return {boolean} True if element was found, false otherwise\n\t */\n\thas(el: T) {\n\t\treturn this.indexOf(el) != -1;\n\t}\n\n\t/**\n\t * Create list of elements this set has in common with the comparison set\n\t * @param {ASet<T>} set Set to compare against\n\t * @return {boolean} Set of common elements\n\t */\n\tintersection(set: ASet<T>) {\n\t\treturn new ASet<T>(this.filter(el => set.has(el)));\n\t}\n\n\t/**\n\t * Check if this set has no elements in common with the comparison set\n\t * @param {ASet<T>} set Set to compare against\n\t * @return {boolean} True if nothing in common, false otherwise\n\t */\n\tisDisjointFrom(set: ASet<T>) {\n\t\treturn this.intersection(set).size == 0;\n\t}\n\n\t/**\n\t * Check if all elements in this set are included in the comparison set\n\t * @param {ASet<T>} set Set to compare against\n\t * @return {boolean} True if all elements are included, false otherwise\n\t */\n\tisSubsetOf(set: ASet<T>) {\n\t\treturn this.findIndex(el => !set.has(el)) == -1;\n\t}\n\n\t/**\n\t * Check if all elements from comparison set are included in this set\n\t * @param {ASet<T>} set Set to compare against\n\t * @return {boolean} True if all elements are included, false otherwise\n\t */\n\tisSuperset(set: ASet<T>) {\n\t\treturn set.findIndex(el => !this.has(el)) == -1;\n\t}\n\n\t/**\n\t * Create list of elements that are only in one set but not both (XOR)\n\t * @param {ASet<T>} set Set to compare against\n\t * @return {ASet<T>} New set of unique elements\n\t */\n\tsymmetricDifference(set: ASet<T>) {\n\t\treturn new ASet([...this.difference(set), ...set.difference(this)]);\n\t}\n\n\t/**\n\t * Create joined list of elements included in this & the comparison set\n\t * @param {ASet<T>} set Set join\n\t * @return {ASet<T>} New set of both previous sets combined\n\t */\n\tunion(set: ASet<T> | Array<T>) {\n\t\treturn new ASet([...this, ...set]);\n\t}\n}\n","export type ProgressCallback = (progress: number) => any;\n\nexport class PromiseProgress<T> extends Promise<T> {\n\tprivate listeners: ProgressCallback[] = [];\n\n\tprivate _progress = 0;\n\tget progress() { return this._progress; }\n\tset progress(p: number) {\n\t\tif(p == this._progress) return;\n\t\tthis._progress = p;\n\t\tthis.listeners.forEach(l => l(p));\n\t}\n\n\tconstructor(executor: (resolve: (value: T) => any, reject: (reason: any) => void, progress: (progress: number) => any) => void) {\n\t\tsuper((resolve, reject) => executor(\n\t\t\t(value: T) => resolve(value),\n\t\t\t(reason: any) => reject(reason),\n\t\t\t(progress: number) => this.progress = progress,\n\t\t));\n\t}\n\n\tstatic from<T>(promise: Promise<T>): PromiseProgress<T> {\n\t\tif(promise instanceof PromiseProgress) return promise;\n\t\treturn new PromiseProgress<T>((res, rej) => promise\n\t\t\t.then((...args) => res(...args))\n\t\t\t.catch((...args) => rej(...args)));\n\t}\n\n\tprivate from(promise: Promise<T>): PromiseProgress<T> {\n\t\tconst newPromise = PromiseProgress.from(promise);\n\t\tthis.onProgress(p => newPromise.progress = p);\n\t\treturn newPromise;\n\t}\n\n\tonProgress(callback: ProgressCallback) {\n\t\tthis.listeners.push(callback);\n\t\treturn this;\n\t}\n\n\tthen(res?: (v: T) => any, rej?: (err: any) => any): PromiseProgress<any> {\n\t\tconst resp = super.then(res, rej);\n\t\treturn this.from(resp);\n\t}\n\n\tcatch(rej?: (err: any) => any): PromiseProgress<any> {\n\t\treturn this.from(super.catch(rej));\n\t}\n\n\tfinally(res?: () => any): PromiseProgress<any> {\n\t\treturn this.from(super.finally(res));\n\t}\n}\n","import {deepCopy, JSONAttemptParse} from './objects.ts';\nimport {PromiseProgress} from './promise-progress';\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\nexport function downloadBlob(blob: Blob, name: string) {\n\tconst url = URL.createObjectURL(blob);\n\tdownload(url, name);\n\tURL.revokeObjectURL(url);\n}\n\nexport function fileBrowser(options: {accept?: string, multiple?: boolean} = {}): Promise<File[]> {\n\treturn new Promise(res => {\n\t\tconst input = document.createElement('input');\n\t\tinput.type = 'file';\n\t\tinput.accept = options.accept || '*';\n\t\tinput.style.display='none';\n\t\tinput.multiple = !!options.multiple;\n\t\tinput.onblur = input.onchange = async () => {\n\t\t\tres(Array.from(<any>input.files));\n\t\t\tinput.remove();\n\t\t}\n\t\tdocument.body.appendChild(input);\n\t\tinput.click();\n\t});\n}\n\nexport function uploadWithProgress<T>(options: {\n\turl: string;\n\tfiles: File[];\n\theaders?: {[key: string]: string};\n\twithCredentials?: boolean;\n}): PromiseProgress<T> {\n\treturn new PromiseProgress<T>((res, rej, prog) => {\n\t\tconst xhr = new XMLHttpRequest();\n\t\tconst formData = new FormData();\n\t\toptions.files.forEach(f => formData.append('file', f));\n\n\t\txhr.withCredentials = !!options.withCredentials;\n\t\txhr.upload.addEventListener('progress', (event) => event.lengthComputable ? prog(event.loaded / event.total) : null);\n\t\txhr.addEventListener('loadend', () => res(<T>JSONAttemptParse(xhr.responseText)));\n\t\txhr.addEventListener('error', () => rej(JSONAttemptParse(xhr.responseText)));\n\t\txhr.addEventListener('timeout', () => rej({error: 'Request timed out'}));\n\n\t\txhr.open('POST', options.url);\n\t\tObject.entries(options.headers || {}).forEach(([key, value]) => xhr.setRequestHeader(key, value));\n\t\txhr.send(formData);\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","export 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 {clean} from './objects';\nimport {PromiseProgress} from './promise-progress';\n\nexport type DecodedResponse<T> = Response & {data: T | null}\n\nexport type HttpInterceptor = (response: Response, next: () => void) => void;\n\nexport type HttpRequestOptions = {\n\tbody?: any;\n\tdecode?: boolean;\n\tfragment?: string;\n\theaders?: {[key: string | symbol]: string | null | undefined};\n\tmethod?: 'GET' | 'POST' | 'PATCH' | 'DELETE';\n\tquery?: {key: string, value: string}[] | {[key: string]: string};\n\turl?: string;\n\t[key: string]: any;\n}\n\nexport type HttpDefaults = {\n\theaders?: {[key: string | symbol]: string | null | undefined};\n\tinterceptors?: HttpInterceptor[];\n\turl?: string;\n}\n\nexport class Http {\n\tprivate static interceptors: {[key: string]: HttpInterceptor} = {};\n\n\tstatic headers: {[key: string]: string | null | undefined} = {};\n\n\tprivate interceptors: {[key: string]: HttpInterceptor} = {}\n\n\theaders: {[key: string]: string | null | undefined} = {}\n\turl!: string | null;\n\n\tconstructor(defaults: HttpDefaults = {}) {\n\t\tthis.url = defaults.url ?? null;\n\t\tthis.headers = defaults.headers || {};\n\t\tif(defaults.interceptors) {\n\t\t\tdefaults.interceptors.forEach(i => Http.addInterceptor(i));\n\t\t}\n\t}\n\n\tstatic addInterceptor(fn: HttpInterceptor): () => void {\n\t\tconst key = Object.keys(Http.interceptors).length.toString();\n\t\tHttp.interceptors[key] = fn;\n\t\treturn () => { Http.interceptors[key] = <any>null; }\n\t}\n\n\taddInterceptor(fn: HttpInterceptor): () => void {\n\t\tconst key = Object.keys(this.interceptors).length.toString();\n\t\tthis.interceptors[key] = fn;\n\t\treturn () => { this.interceptors[key] = <any>null; }\n\t}\n\n\trequest<T>(opts: HttpRequestOptions = {}): PromiseProgress<DecodedResponse<T>> {\n\t\tif(!this.url && !opts.url) throw new Error('URL needs to be set');\n\t\tlet url = (opts.url?.startsWith('http') ? opts.url : (this.url || '') + (opts.url || '')).replace(/([^:]\\/)\\/+/g, '$1');\n\t\tif(opts.fragment) url.includes('#') ? url.replace(/#.*(\\?|\\n)/g, (match, arg1) => `#${opts.fragment}${arg1}`) : url += '#' + opts.fragment;\n\t\tif(opts.query) {\n\t\t\tconst q = Array.isArray(opts.query) ? opts.query :\n\t\t\t\tObject.keys(opts.query).map(k => ({key: k, value: (<any>opts.query)[k]}))\n\t\t\turl += (url.includes('?') ? '&' : '?') + q.map(q => `${q.key}=${q.value}`).join('&');\n\t\t}\n\n\t\t// Prep headers\n\t\tconst headers = <any>clean({\n\t\t\t'Content-Type': !opts.body ? undefined : (opts.body instanceof FormData ? 'multipart/form-data' : 'application/json'),\n\t\t\t...Http.headers,\n\t\t\t...this.headers,\n\t\t\t...opts.headers\n\t\t});\n\n\t\tif(typeof opts.body == 'object' && opts.body != null && headers['Content-Type'] == 'application/json')\n\t\t\topts.body = JSON.stringify(opts.body);\n\n\t\t// Send request\n\t\treturn new PromiseProgress((res, rej, prog) => {\n\t\t\tfetch(url, {\n\t\t\t\theaders,\n\t\t\t\tmethod: opts.method || (opts.body ? 'POST' : 'GET'),\n\t\t\t\tbody: opts.body\n\t\t\t}).then(async (resp: any) => {\n\t\t\t\tfor(let fn of [...Object.values(Http.interceptors), ...Object.values(this.interceptors)]) {\n\t\t\t\t\tawait new Promise<void>(res => fn(resp, () => res()));\n\t\t\t\t}\n\n\t\t\t\tconst contentLength = resp.headers.get('Content-Length');\n\t\t\t\tconst total = contentLength ? parseInt(contentLength, 10) : 0;\n\t\t\t\tlet loaded = 0;\n\n\t\t\t\tconst reader = resp.body?.getReader();\n\t\t\t\tconst stream = new ReadableStream({\n\t\t\t\t\tstart(controller) {\n\t\t\t\t\t\tfunction push() {\n\t\t\t\t\t\t\treader?.read().then((event: any) => {\n\t\t\t\t\t\t\t\tif(event.done) return controller.close();\n\t\t\t\t\t\t\t\tloaded += event.value.byteLength;\n\t\t\t\t\t\t\t\tprog(loaded / total);\n\t\t\t\t\t\t\t\tcontroller.enqueue(event.value);\n\t\t\t\t\t\t\t\tpush();\n\t\t\t\t\t\t\t}).catch((error: any) => controller.error(error));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpush();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tresp.data = new Response(stream);\n\t\t\t\tif(opts.decode == null || opts.decode) {\n\t\t\t\t\tconst content = resp.headers.get('Content-Type')?.toLowerCase();\n\t\t\t\t\tif(content?.includes('form')) resp.data = <T>await resp.data.formData();\n\t\t\t\t\telse if(content?.includes('json')) resp.data = <T>await resp.data.json();\n\t\t\t\t\telse if(content?.includes('text')) resp.data = <T>await resp.data.text();\n\t\t\t\t\telse if(content?.includes('application')) resp.data = <T>await resp.data.blob();\n\t\t\t\t}\n\n\t\t\t\tif(resp.ok) res(resp);\n\t\t\t\telse rej(resp);\n\t\t\t})\n\t\t});\n\t}\n}\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","/**\n * Convert decimal number to fraction\n *\n * @example\n * ```js\n * dec2Frac(1.25) // Outputs: \"1 1/4\"\n * ```\n *\n * @param {number} num Number to convert\n * @return {string} Fraction with remainder\n */\nexport function dec2Frac(num: number) {\n\tconst gcd = (a: number, b: number): number => {\n\t\tif (b < 0.0000001) return a;\n\t\treturn gcd(b, ~~(a % b));\n\t};\n\n\tconst len = num.toString().length - 2;\n\tlet denominator = Math.pow(10, len);\n\tlet numerator = num * denominator;\n\tconst divisor = gcd(numerator, denominator);\n\tnumerator = ~~(numerator / divisor);\n\tdenominator = ~~(denominator / divisor)\n\tconst remainder = ~~(numerator / denominator);\n\tnumerator -= remainder * denominator;\n\treturn `${remainder ? remainder + ' ' : ''}${~~(numerator)}/${~~(denominator)}`;\n}\n\n/**\n * Convert fraction to decimal number\n *\n * @example\n * ```js\n * fracToDec('1 1/4') // Outputs: 1.25\n * ```\n *\n * @param {string} frac Fraction to convert\n * @return {number} Faction as a decimal\n */\nexport function fracToDec(frac: string) {\n\tlet split = frac.split(' ');\n\tconst whole = split.length == 2 ? Number(split[0]) : 0;\n\tsplit = (<string>split.pop()).split('/');\n\treturn whole + (Number(split[0]) / Number(split[1]));\n}\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 * 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","export 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\r\n/**\r\n * Use in conjunction with `await` to pause an async script\r\n *\r\n * @example\r\n * ```js\r\n * await sleep(1000) // Pause for 1 second\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): Promise<void> {\r\n\treturn new Promise(res => setTimeout(res, ms));\r\n}\r\n\r\n/**\r\n * Sleep while function returns true\r\n *\r\n * @example\r\n * ```js\r\n * let loading = true;\r\n * setTimeout(() => wait = false, 1000);\r\n * await sleepUntil(() => loading); // Won't continue until loading flag is false\r\n * ```\r\n * @param {() => boolean} fn Return true to continue\r\n * @param {number} checkInterval Run function ever x milliseconds\r\n * @return {Promise<void>} Callback when sleep is over\r\n */\r\nexport async function sleepUntil(fn : () => boolean, checkInterval=100): Promise<void> {\r\n\twhile(fn()) await sleep(checkInterval);\r\n}\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"],"names":["clean","obj","undefinedOnly","o","key","value","deepCopy","deepMerge","target","sources","s","dotNotation","prop","set","arr","flattenObj","parent","result","propName","formData","data","includes","values","allowMissing","e","type","isEqual","a","b","ta","tb","mixin","constructors","c","name","JSONAttemptParse","json","JSONSanitized","space","cache","urlEncode","addUnique","array","el","arrayDiff","makeUnique","v1","v2","caseInsensitiveSort","aVal","bVal","flattenArr","sortByProp","reverse","findByProp","v","i","n","makeArray","ASet","elements","index","PromiseProgress","executor","resolve","reject","reason","progress","__publicField","p","l","promise","res","rej","args","newPromise","callback","resp","download","href","downloadBlob","blob","url","fileBrowser","options","input","uploadWithProgress","prog","xhr","f","event","TypedEmitter","listener","_a","unsubscribe","CustomError","message","code","err","newErr","BadRequestError","UnauthorizedError","ForbiddenError","NotFoundError","InternalServerError","_Http","defaults","fn","opts","match","arg1","q","k","headers","contentLength","total","loaded","reader","stream","controller","push","error","content","_b","Http","CliEffects","CliForeground","CliBackground","LOG_LEVEL","_Logger","namespace","text","length","char","end","t","padding","now","str","Logger","dec2Frac","num","gcd","len","denominator","numerator","divisor","remainder","fracToDec","frac","split","whole","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","md5","d","r","M","V","Y","X","_","m","h","g","md5_ii","md5_hh","md5_gg","md5_ff","safe_add","md5_cmn","bit_rol","validateEmail","email","gravatar","def","urlParser","processed","groups","domains","query","val","formatDate","date","sleep","ms","sleepUntil","checkInterval","timeUntil"],"mappings":"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"}