@ztimson/utils 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,7 @@
1
+ Copyright (c) 2023 Zakary Timson
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4
+
5
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
6
+
7
+ THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/dist/utils.cjs ADDED
@@ -0,0 +1,2 @@
1
+ (function(c,E){typeof exports=="object"&&typeof module<"u"?E(exports):typeof define=="function"&&define.amd?define(["exports"],E):(c=typeof globalThis<"u"?globalThis:c||self,E(c.utils={}))})(this,function(c){"use strict";var St=Object.defineProperty;var Tt=(c,E,w)=>E in c?St(c,E,{enumerable:!0,configurable:!0,writable:!0,value:w}):c[E]=w;var d=(c,E,w)=>(Tt(c,typeof E!="symbol"?E+"":E,w),w);function E(e,n=!1){if(e==null)throw new Error("Cannot clean a NULL value");return Array.isArray(e)?e=e.filter(t=>t!=null):Object.entries(e).forEach(([t,r])=>{(n&&r===void 0||!n&&r==null)&&delete e[t]}),e}function w(e){return JSON.parse(JSON.stringify(e))}function C(e,n,t){if(!(e==null||!n))return n.split(/[.[\]]/g).filter(r=>r.length).reduce((r,o,i,s)=>{if((o[0]=='"'||o[0]=="'")&&(o=o.slice(1,-1)),!(r!=null&&r.hasOwnProperty(o))){if(t==null)return;r[o]={}}return t!==void 0&&i==s.length-1?r[o]=t:r[o]},e)}function v(e,n,t={}){if(typeof e=="object"&&!Array.isArray(e)){for(const r of Object.keys(e)){const o=n?n+"."+r:r;typeof e[r]=="object"?v(e[r],o,t):t[o]=e[r]}return t}}function $(e,n,t=!1){if(e==null)return t;if(Array.isArray(n))return n.findIndex((o,i)=>!$(e[i],n[i],t))==-1;const r=typeof n;return r!=typeof e?!1:r=="object"?Object.keys(n).find(o=>!$(e[o],n[o],t))==null:r=="function"?e.toString()==n.toString():e==n}function S(e,n){const t=typeof e,r=typeof n;return t!="object"||e==null||r!="object"||n==null?t=="function"&&r=="function"?e.toString()==n.toString():e===n:Object.keys(e).length!=Object.keys(n).length?!1:Object.keys(e).every(i=>S(e[i],n[i]))}function W(e,n){return e.indexOf(n)===-1&&e.push(n),e}function z(e,n){return Y([...e.filter(t=>!n.includes(r=>S(t,r))),...n.filter(t=>!e.includes(r=>S(t,r)))])}function J(e){return function(n,t){const r=C(n,e),o=C(t,e);return typeof r!="string"||typeof o!="string"?1:r.toLowerCase().localeCompare(o.toLowerCase())}}function H(e,n=[]){return e.forEach(t=>Array.isArray(t)?H(t,n):n.push(t)),n}function V(e,n=!1){return function(t,r){const o=C(t,e),i=C(r,e);return typeof o=="number"&&typeof i=="number"?(n?-1:1)*(o-i):o>i?n?-1:1:o<i?n?1:-1:0}}function K(e,n){return t=>S(t[e],n)}function Y(e){for(let n=e.length-1;n>=0;n--)e.slice(0,n).find(t=>S(t,e[n]))&&e.splice(n,1);return e}function Z(e){return Array.isArray(e)?e:[e]}class L{constructor(){d(this,"listeners",{})}static emit(n,...t){(this.listeners["*"]||[]).forEach(r=>r(n,...t)),(this.listeners[n.toString()]||[]).forEach(r=>r(...t))}static off(n,t){const r=n.toString();this.listeners[r]=(this.listeners[r]||[]).filter(o=>o===t)}static on(n,t){var o;const r=n.toString();return this.listeners[r]||(this.listeners[r]=[]),(o=this.listeners[r])==null||o.push(t),()=>this.off(n,t)}static once(n,t){return new Promise(r=>{const o=this.on(n,(...i)=>{r(i.length==1?i[0]:i),t&&t(...i),o()})})}emit(n,...t){(this.listeners["*"]||[]).forEach(r=>r(n,...t)),(this.listeners[n]||[]).forEach(r=>r(...t))}off(n,t){this.listeners[n]=(this.listeners[n]||[]).filter(r=>r===t)}on(n,t){var r;return this.listeners[n]||(this.listeners[n]=[]),(r=this.listeners[n])==null||r.push(t),()=>this.off(n,t)}once(n,t){return new Promise(r=>{const o=this.on(n,(...i)=>{r(i.length==1?i[0]:i),t&&t(...i),o()})})}}d(L,"listeners",{});const y=class y extends L{constructor(t={}){super();d(this,"headers",{});d(this,"interceptors",{});this.opts=t,t.interceptors&&t.interceptors.forEach(r=>y.addInterceptor(r))}static addInterceptor(t){const r=Object.keys(y.interceptors).length.toString();return y.interceptors[r]=t,()=>{y.interceptors[r]=null}}addInterceptor(t){const r=Object.keys(this.interceptors).length.toString();return this.interceptors[r]=t,()=>{this.interceptors[r]=null}}async request(t={}){var s,m;if(!this.opts.url&&!t.url)throw new Error("Momentum server URL needs to be set");const r=((s=t.url)!=null&&s.startsWith("http")?t.url:(this.opts.url||"")+t.url).replace(/([^:]\/)\/+/g,"$1"),o=E({"Content-Type":t.body&&!(t.body instanceof FormData)?"application/json":void 0,...y.headers,...this.headers,...t.headers}),i=fetch(r,{headers:o,method:t.method||(t.body?"POST":"GET"),body:(m=o["Content-Type"])!=null&&m.startsWith("application/json")&&t.body?JSON.stringify(t.body):t.body}).then(async u=>{var O,b;for(let At of[...Object.values(y.interceptors),...Object.values(this.interceptors)])await new Promise(wt=>At(u,()=>wt(null)));if(this.emit(`${u.status}`,u,t),!u.ok)throw Error(u.statusText);return this.emit("RESPONSE",u,t),(O=u.headers.get("Content-Type"))!=null&&O.startsWith("application/json")?await u.json():(b=u.headers.get("Content-Type"))!=null&&b.startsWith("text/plain")?await u.text():u}).catch(u=>{throw this.emit("REJECTED",u,t),u});return this.emit("REQUEST",i,t),i}};d(y,"headers",{}),d(y,"interceptors",{});let N=y;N.addInterceptor((e,n)=>{if(e.status==200)return n();throw e.status==400?new D(e.statusText):e.status==401?new p(e.statusText):e.status==403?new G(e.statusText):e.status==404?new k(e.statusText):e.status==500?new U(e.statusText):new B(e.statusText,e.status)});class B extends Error{constructor(t,r){super(t);d(this,"_code");r!=null&&(this._code=r)}get code(){return this._code||this.constructor.code}set code(t){this._code=t}static from(t){const r=Number(t.statusCode)??Number(t.code),o=new this(t.message||t.toString());return Object.assign(o,{stack:t.stack,...t,code:r??void 0})}static instanceof(t){return t.constructor.code!=null}toString(){return this.message||super.toString()}}d(B,"code",500);class D extends B{constructor(n="Bad Request"){super(n)}static instanceof(n){return n.constructor.code==this.code}}d(D,"code",400);class p extends B{constructor(n="Unauthorized"){super(n)}static instanceof(n){return n.constructor.code==this.code}}d(p,"code",401);class G extends B{constructor(n="Forbidden"){super(n)}static instanceof(n){return n.constructor.code==this.code}}d(G,"code",403);class k extends B{constructor(n="Not Found"){super(n)}static instanceof(n){return n.constructor.code==this.code}}d(k,"code",404);class U extends B{constructor(n="Internal Server Error"){super(n)}static instanceof(n){return n.constructor.code==this.code}}d(U,"code",500);const T={CLEAR:"\x1B[0m",BRIGHT:"\x1B[1m",DIM:"\x1B[2m",UNDERSCORE:"\x1B[4m",BLINK:"\x1B[5m",REVERSE:"\x1B[7m",HIDDEN:"\x1B[8m"},R={BLACK:"\x1B[30m",RED:"\x1B[31m",GREEN:"\x1B[32m",YELLOW:"\x1B[33m",BLUE:"\x1B[34m",MAGENTA:"\x1B[35m",CYAN:"\x1B[36m",LIGHT_GREY:"\x1B[37m",GREY:"\x1B[90m",LIGHT_RED:"\x1B[91m",LIGHT_GREEN:"\x1B[92m",LIGHT_YELLOW:"\x1B[93m",LIGHT_BLUE:"\x1B[94m",LIGHT_MAGENTA:"\x1B[95m",LIGHT_CYAN:"\x1B[96m",WHITE:"\x1B[97m"},Q={BLACK:"\x1B[40m",RED:"\x1B[41m",GREEN:"\x1B[42m",YELLOW:"\x1B[43m",BLUE:"\x1B[44m",MAGENTA:"\x1B[45m",CYAN:"\x1B[46m",WHITE:"\x1B[47m",GREY:"\x1B[100m"};var x=(e=>(e[e.ERROR=0]="ERROR",e[e.WARN=1]="WARN",e[e.INFO=2]="INFO",e[e.LOG=3]="LOG",e[e.DEBUG=4]="DEBUG",e))(x||{});const g=class g extends L{constructor(n){super(),this.namespace=n}pad(n,t,r,o=!1){const i=n.toString(),s=t-i.length;if(s<=0)return i;const m=Array(~~(s/r.length)).fill(r).join("");return o?i+m:m+i}format(...n){const t=new Date;return`${`${t.getFullYear()}-${t.getMonth()+1}-${t.getDate()} ${this.pad(t.getHours().toString(),2,"0")}:${this.pad(t.getMinutes().toString(),2,"0")}:${this.pad(t.getSeconds().toString(),2,"0")}.${this.pad(t.getMilliseconds().toString(),3,"0",!0)}`}${this.namespace?` [${this.namespace}]`:""} ${n.join(" ")}`}debug(...n){if(g.LOG_LEVEL<4)return;const t=this.format(...n);g.emit(4,t),console.debug(R.LIGHT_GREY+t+T.CLEAR)}log(...n){if(g.LOG_LEVEL<3)return;const t=this.format(...n);g.emit(3,t),console.log(T.CLEAR+t)}info(...n){if(g.LOG_LEVEL<2)return;const t=this.format(...n);g.emit(2,t),console.info(R.BLUE+t+T.CLEAR)}warn(...n){if(g.LOG_LEVEL<1)return;const t=this.format(...n);g.emit(1,t),console.warn(R.YELLOW+t+T.CLEAR)}error(...n){if(g.LOG_LEVEL<0)return;const t=this.format(...n);g.emit(0,t),console.error(R.RED+t+T.CLEAR)}};d(g,"LOG_LEVEL",4);let M=g;function X(e,n){return e.length-e.replaceAll(n,"").length}function _(e){return Array(e).fill(null).map(()=>Math.round(Math.random()*15).toString(16)).join("")}const P="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",j="0123456789",q="~`!@#$%^&*()_-+={[}]|\\:;\"'<,>.?/",tt=P+j+q;function et(e){const n=/(\+?1)?.*?(\d{3}).*?(\d{3}).*?(\d{4})/g.exec(e);if(!n)throw new Error(`Number cannot be parsed: ${e}`);return`${n[1]??""} (${n[2]}) ${n[3]}-${n[4]}`.trim()}function nt(e,n,t){return`${e.slice(0,t)}${n}${e.slice(t+1)}`}function rt(e,n,t,r=!0){const o=e.toString(),i=n-o.length;if(i<=0)return o;const s=Array(~~(i/t.length)).fill(t).join("");return r?s+o:o+s}function ot(e,n=tt){return Array(e).fill(null).map(()=>{const t=~~(Math.random()*n.length);return n[t]}).join("")}function it(e,n=!1,t=!1,r=!1){if(!n&&!t&&!r)throw new Error("Must enable at least one: letters, numbers, symbols");return Array(e).fill(null).map(()=>{let o;do{const i=~~(Math.random()*3);n&&i==0?o=P[~~(Math.random()*P.length)]:t&&i==1?o=j[~~(Math.random()*j.length)]:r&&i==2&&(o=q[~~(Math.random()*q.length)])}while(!o);return o}).join("")}function st(e,n){if(typeof n=="string"&&(n=new RegExp(n,"g")),!n.global)throw new TypeError("Regular expression must be global.");let t=[],r;for(;(r=n.exec(e))!==null;)t.push(r);return t}function F(e){var n=ct(at(lt(ut(e),8*e.length)));return n.toLowerCase()}function ct(e){for(var n,t="0123456789ABCDEF",r="",o=0;o<e.length;o++)n=e.charCodeAt(o),r+=t.charAt(n>>>4&15)+t.charAt(15&n);return r}function ut(e){for(var n=Array(e.length>>2),t=0;t<n.length;t++)n[t]=0;for(t=0;t<8*e.length;t+=8)n[t>>5]|=(255&e.charCodeAt(t/8))<<t%32;return n}function at(e){for(var n="",t=0;t<32*e.length;t+=8)n+=String.fromCharCode(e[t>>5]>>>t%32&255);return n}function lt(e,n){e[n>>5]|=128<<n%32,e[14+(n+64>>>9<<4)]=n;for(var t=1732584193,r=-271733879,o=-1732584194,i=271733878,s=0;s<e.length;s+=16){var m=t,u=r,O=o,b=i;r=f(r=f(r=f(r=f(r=h(r=h(r=h(r=h(r=l(r=l(r=l(r=l(r=a(r=a(r=a(r=a(r,o=a(o,i=a(i,t=a(t,r,o,i,e[s+0],7,-680876936),r,o,e[s+1],12,-389564586),t,r,e[s+2],17,606105819),i,t,e[s+3],22,-1044525330),o=a(o,i=a(i,t=a(t,r,o,i,e[s+4],7,-176418897),r,o,e[s+5],12,1200080426),t,r,e[s+6],17,-1473231341),i,t,e[s+7],22,-45705983),o=a(o,i=a(i,t=a(t,r,o,i,e[s+8],7,1770035416),r,o,e[s+9],12,-1958414417),t,r,e[s+10],17,-42063),i,t,e[s+11],22,-1990404162),o=a(o,i=a(i,t=a(t,r,o,i,e[s+12],7,1804603682),r,o,e[s+13],12,-40341101),t,r,e[s+14],17,-1502002290),i,t,e[s+15],22,1236535329),o=l(o,i=l(i,t=l(t,r,o,i,e[s+1],5,-165796510),r,o,e[s+6],9,-1069501632),t,r,e[s+11],14,643717713),i,t,e[s+0],20,-373897302),o=l(o,i=l(i,t=l(t,r,o,i,e[s+5],5,-701558691),r,o,e[s+10],9,38016083),t,r,e[s+15],14,-660478335),i,t,e[s+4],20,-405537848),o=l(o,i=l(i,t=l(t,r,o,i,e[s+9],5,568446438),r,o,e[s+14],9,-1019803690),t,r,e[s+3],14,-187363961),i,t,e[s+8],20,1163531501),o=l(o,i=l(i,t=l(t,r,o,i,e[s+13],5,-1444681467),r,o,e[s+2],9,-51403784),t,r,e[s+7],14,1735328473),i,t,e[s+12],20,-1926607734),o=h(o,i=h(i,t=h(t,r,o,i,e[s+5],4,-378558),r,o,e[s+8],11,-2022574463),t,r,e[s+11],16,1839030562),i,t,e[s+14],23,-35309556),o=h(o,i=h(i,t=h(t,r,o,i,e[s+1],4,-1530992060),r,o,e[s+4],11,1272893353),t,r,e[s+7],16,-155497632),i,t,e[s+10],23,-1094730640),o=h(o,i=h(i,t=h(t,r,o,i,e[s+13],4,681279174),r,o,e[s+0],11,-358537222),t,r,e[s+3],16,-722521979),i,t,e[s+6],23,76029189),o=h(o,i=h(i,t=h(t,r,o,i,e[s+9],4,-640364487),r,o,e[s+12],11,-421815835),t,r,e[s+15],16,530742520),i,t,e[s+2],23,-995338651),o=f(o,i=f(i,t=f(t,r,o,i,e[s+0],6,-198630844),r,o,e[s+7],10,1126891415),t,r,e[s+14],15,-1416354905),i,t,e[s+5],21,-57434055),o=f(o,i=f(i,t=f(t,r,o,i,e[s+12],6,1700485571),r,o,e[s+3],10,-1894986606),t,r,e[s+10],15,-1051523),i,t,e[s+1],21,-2054922799),o=f(o,i=f(i,t=f(t,r,o,i,e[s+8],6,1873313359),r,o,e[s+15],10,-30611744),t,r,e[s+6],15,-1560198380),i,t,e[s+13],21,1309151649),o=f(o,i=f(i,t=f(t,r,o,i,e[s+4],6,-145523070),r,o,e[s+11],10,-1120210379),t,r,e[s+2],15,718787259),i,t,e[s+9],21,-343485551),t=A(t,m),r=A(r,u),o=A(o,O),i=A(i,b)}return Array(t,r,o,i)}function I(e,n,t,r,o,i){return A(ht(A(A(n,e),A(r,i)),o),t)}function a(e,n,t,r,o,i,s){return I(n&t|~n&r,e,n,o,i,s)}function l(e,n,t,r,o,i,s){return I(n&r|t&~r,e,n,o,i,s)}function h(e,n,t,r,o,i,s){return I(n^t^r,e,n,o,i,s)}function f(e,n,t,r,o,i,s){return I(t^(n|~r),e,n,o,i,s)}function A(e,n){var t=(65535&e)+(65535&n);return(e>>16)+(n>>16)+(t>>16)<<16|65535&t}function ht(e,n){return e<<n|e>>>32-n}function ft(e){return/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/.test(e)}function dt(e){return Object.entries(e).map(([n,t])=>encodeURIComponent(n)+"="+encodeURIComponent(t)).join("&")}function Et(e,n="mp"){return e?`https://www.gravatar.com/avatar/${F(e)}?d=${n}`:""}function gt(e){const n=new RegExp("(?:(?<protocol>[\\w\\d]+)\\:\\/\\/)?(?:(?<user>.+)\\@)?(?<host>(?<domain>[^:\\/\\?#@\\n]+)(?:\\:(?<port>\\d*))?)(?<path>\\/.*?)?(?:\\?(?<query>.*?))?(?:#(?<fragment>.*?))?$","gm").exec(e),t=(n==null?void 0:n.groups)??{},r=t.domain.split(".");if(t.port!=null&&(t.port=Number(t.port)),r.length>2&&(t.domain=r.splice(-2,2).join("."),t.subdomain=r.join(".")),t.query){const o=t.query.split("&"),i={};o.forEach(s=>{const[m,u]=s.split("=");i[m]=u}),t.query=i}return t}function yt(e){return(e instanceof Date?e.getTime():e)-new Date().getTime()}function mt(e){return new Promise(n=>setTimeout(n,e))}function Bt(e){const n=e instanceof Date?e:new Date(e);return new Intl.DateTimeFormat("en-us",{weekday:"long",month:"short",day:"numeric",hour:"numeric",minute:"numeric",hour12:!0}).format(n)}c.BadRequestError=D,c.CliBackground=Q,c.CliEffects=T,c.CliForeground=R,c.CustomError=B,c.ForbiddenError=G,c.InternalServerError=U,c.LOG_LEVEL=x,c.Logger=M,c.NotFoundError=k,c.TypedEmitter=L,c.UnauthorizedError=p,c.XHR=N,c.addUnique=W,c.arrayDiff=z,c.caseInsensitiveSort=J,c.clean=E,c.countChars=X,c.createHex=_,c.deepCopy=w,c.dotNotation=C,c.findByProp=K,c.flattenArr=H,c.flattenObj=v,c.formEncode=dt,c.formatDate=Bt,c.formatPhoneNumber=et,c.gravatar=Et,c.includes=$,c.insertAt=nt,c.isEqual=S,c.makeArray=Z,c.makeUnique=Y,c.matchAll=st,c.md5=F,c.pad=rt,c.randomString=ot,c.randomStringBuilder=it,c.sleep=mt,c.sortByProp=V,c.timeUntil=yt,c.urlParser=gt,c.validateEmail=ft,Object.defineProperty(c,Symbol.toStringTag,{value:"Module"})});
2
+ //# sourceMappingURL=utils.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.cjs","sources":["../src/objects.ts","../src/array.ts","../src/emitter.ts","../src/xhr.ts","../src/errors.ts","../src/logger.ts","../src/string.ts","../src/misc.ts","../src/time.ts"],"sourcesContent":["/**\r\n * Removes any null values from an object in-place\r\n *\r\n * @example\r\n * ```ts\r\n * let test = {a: 0, b: false, c: null, d: 'abc'}\r\n * console.log(clean(test)); // Output: {a: 0, b: false, d: 'abc'}\r\n * ```\r\n *\r\n * @param {T} obj Object reference that will be cleaned\r\n * @param undefinedOnly Ignore null values\r\n * @returns {Partial<T>} Cleaned object\r\n */\r\nexport function clean<T>(obj: T, undefinedOnly = false): Partial<T> {\r\n\tif(obj == null) throw new Error(\"Cannot clean a NULL value\");\r\n\tif(Array.isArray(obj)) {\r\n\t\tobj = <any>obj.filter(o => o != null);\r\n\t} else {\r\n\t\tObject.entries(obj).forEach(([key, value]) => {\r\n\t\t\tif((undefinedOnly && value === undefined) || (!undefinedOnly && value == null)) delete (<any>obj)[key];\r\n\t\t});\r\n\t}\r\n\treturn <any>obj;\r\n}\r\n\r\n/**\r\n * Create a deep copy of an object (vs. a shallow copy of references)\r\n *\r\n * Should be replaced by `structuredClone` once released.\r\n *\r\n * @param {T} value Object to copy\r\n * @returns {T} Type\r\n */\r\nexport function deepCopy<T>(value: T): T {\r\n\treturn JSON.parse(JSON.stringify(value));\r\n}\r\n\r\n/**\r\n * Get/set a property of an object using dot notation\r\n *\r\n * @example\r\n * ```ts\r\n * // Get a value\r\n * const name = dotNotation<string>(person, 'firstName');\r\n * const familyCarMake = dotNotation(family, 'cars[0].make');\r\n * // Set a value\r\n * dotNotation(family, 'cars[0].make', 'toyota');\r\n * ```\r\n *\r\n * @type T Return type\r\n * @param {Object} obj source object to search\r\n * @param {string} prop property name (Dot notation & indexing allowed)\r\n * @param {any} set Set object property to value, omit to fetch value instead\r\n * @return {T} property value\r\n */\r\nexport function dotNotation<T>(obj: any, prop: string, set: T): T;\r\nexport function dotNotation<T>(obj: any, prop: string): T | undefined;\r\nexport function dotNotation<T>(obj: any, prop: string, set?: T): T | undefined {\r\n\tif(obj == null || !prop) return undefined;\r\n\t// Split property string by '.' or [index]\r\n\treturn <T>prop.split(/[.[\\]]/g).filter(prop => prop.length).reduce((obj, prop, i, arr) => {\r\n\t\tif(prop[0] == '\"' || prop[0] == \"'\") prop = prop.slice(1, -1); // Take quotes out\r\n\t\tif(!obj?.hasOwnProperty(prop)) {\r\n\t\t\tif(set == undefined) return undefined;\r\n\t\t\tobj[prop] = {};\r\n\t\t}\r\n\t\tif(set !== undefined && i == arr.length - 1)\r\n\t\t\treturn obj[prop] = set;\r\n\t\treturn obj[prop];\r\n\t}, obj);\r\n}\r\n\r\n/**\r\n * Recursively flatten a nested object, while maintaining key structure.\r\n *\r\n * @example\r\n * ```ts\r\n * const car = {honda: {model: \"Civic\"}};\r\n * console.log(flattenObj(car)); //Output {honda.model: \"Civic\"}\r\n * ```\r\n *\r\n * @param obj - Object to flatten\r\n * @param parent - Recursively check if key is a parent key or not\r\n * @param result - Result\r\n * @returns {object} - Flattened object\r\n */\r\nexport function flattenObj(obj: any, parent?: any, result: any = {}) {\r\n\tif(typeof obj === \"object\" && !Array.isArray(obj)) {\r\n\t\tfor(const key of Object.keys(obj)) {\r\n\t\t\tconst propName = parent ? parent + '.' + key : key;\r\n\t\t\tif(typeof obj[key] === 'object') {\r\n\t\t\t\tflattenObj(obj[key], propName, result);\r\n\t\t\t} else {\r\n\t\t\t\tresult[propName] = obj[key];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn result;\r\n\t}\r\n}\r\n\r\n/**\r\n * Check that an object has the following values\r\n *\r\n * @example\r\n * ```ts\r\n * const test = {a: 2, b: 2};\r\n * includes(test, {a: 1}); // true\r\n * includes(test, {b: 1, c: 3}); // false\r\n * ```\r\n *\r\n * @param target Object to search\r\n * @param values Criteria to check against\r\n * @param allowMissing Only check the keys that are available on the target\r\n * @returns {boolean} Does target include all the values\r\n */\r\nexport function includes(target: any, values: any, allowMissing = false): boolean {\r\n\tif(target == undefined) return allowMissing;\r\n\tif(Array.isArray(values)) return values.findIndex((e: any, i: number) => !includes(target[i], values[i], allowMissing)) == -1;\r\n\tconst type = typeof values;\r\n\tif(type != typeof target) return false;\r\n\tif(type == 'object') {\r\n\t\treturn Object.keys(values).find(key => !includes(target[key], values[key], allowMissing)) == null;\r\n\t}\r\n\tif(type == 'function') return target.toString() == values.toString();\r\n\treturn target == values;\r\n}\r\n\r\n/**\r\n * Deep check if two objects are equal\r\n *\r\n * @param {any} a - first item to compare\r\n * @param {any} b - second item to compare\r\n * @returns {boolean} True if they match\r\n */\r\nexport function isEqual(a: any, b: any): boolean {\r\n\tconst ta = typeof a, tb = typeof b;\r\n\tif((ta != 'object' || a == null) || (tb != 'object' || b == null))\r\n\t\treturn ta == 'function' && tb == 'function' ? a.toString() == b.toString() : a === b;\r\n\tconst keys = Object.keys(a);\r\n\tif(keys.length != Object.keys(b).length) return false;\r\n\treturn Object.keys(a).every(key => isEqual(a[key], b[key]));\r\n}\r\n","import {dotNotation, isEqual} from './objects';\n\nexport function addUnique<T>(array: T[], el: T): T[] {\n\tif(array.indexOf(el) === -1) array.push(el);\n\treturn array;\n}\n\nexport function arrayDiff(a: any[], b: any[]): any[] {\n\treturn makeUnique([\n\t\t...a.filter(v1 => !b.includes((v2: any) => isEqual(v1, v2))),\n\t\t...b.filter(v1 => !a.includes((v2: any) => isEqual(v1, v2))),\n\t]);\n}\n\n/**\n * Provides a shorthand for sorting arrays of complex objects by a string property\n *\n * @example\n * ```ts\n * let arr = [{a: 'Apple', b: 123}, {a: 'Carrot', b: 789}, {a: 'banana', b: 456}];\n * arr.sort(caseInsensitiveSort('a'));\n * ```\n *\n * @param {string} prop - Name of property to use, supports dot notation\n * @returns {(a, b) => (number)} - Function to handle sort (Meant to be passed to Array.prototype.sort or used in sortFn)\n */\nexport function caseInsensitiveSort(prop: string) {\n\treturn function (a: any, b: any) {\n\t\tconst aVal = dotNotation<string>(a, prop);\n\t\tconst bVal = dotNotation<string>(b, prop);\n\t\tif(typeof aVal !== 'string' || typeof bVal !== 'string') return 1;\n\t\treturn aVal.toLowerCase().localeCompare(bVal.toLowerCase());\n\t};\n}\n\n/**\n * Recursively flatten nested arrays\n *\n * @example\n * ```ts\n * const arr = [\n * {label: null, url: '/'},\n * {label: 'Model Admin', url: '/model-admin'},\n * [\n * {label: 'Elements', url: '/model-admin/elements'},\n * {label: 'Example', url: null}\n * ]\n * ];\n *\n * console.log(flattenArr(arr));\n * // Output:\n * [\n * {label: null, url: '/'},\n * {label: 'Model Admin', url: '/model-admin'},\n * {label: 'Elements', url: '/model-admin/elements'},\n * {label: 'Example', url: null}\n * ]\n * ```\n *\n * @param {any[]} arr - n-dimensional array\n * @param {any[]} result - Internal use only -- Keeps track of recursion\n * @returns {any[]} - Flattened array\n */\nexport function flattenArr(arr: any[], result: any[] = []): any[] {\n\tarr.forEach(el => Array.isArray(el) ? flattenArr(el, result) : result.push(el));\n\treturn result;\n}\n\n/**\n * Provides a shorthand for sorting arrays of complex objects\n *\n * @example\n * ```ts\n * let arr = [{a: {b: 2}}, {a: {b: 3}}, {a: {b: 1}}];\n * arr.sort(sortByProp('a.b'));\n * ```\n *\n * @param {string} prop - Name of property to use, supports dot notation\n * @param {boolean} reverse - Reverse the order of the sort\n * @returns {(a, b) => (number)} - Function to handle sort (Meant to be passed to Array.prototype.sort)\n */\nexport function sortByProp(prop: string, reverse = false) {\n\treturn function (a: any, b: any) {\n\t\tconst aVal = dotNotation<any>(a, prop);\n\t\tconst bVal = dotNotation<any>(b, prop);\n\t\tif(typeof aVal == 'number' && typeof bVal == 'number')\n\t\t\treturn (reverse ? -1 : 1) * (aVal - bVal);\n\t\tif(aVal > bVal) return reverse ? -1 : 1;\n\t\tif(aVal < bVal) return reverse ? 1 : -1;\n\t\treturn 0;\n\t};\n}\n\nexport function findByProp(prop: string, value: any) {\n\treturn (v: any) => isEqual(v[prop], value);\n}\n\nexport function makeUnique(arr: any[]) {\n\tfor(let i = arr.length - 1; i >= 0; i--) {\n\t\tif(arr.slice(0, i).find(n => isEqual(n, arr[i]))) arr.splice(i, 1);\n\t}\n\treturn arr;\n}\n\n/**\n * Make sure value is an array, if it isn't wrap it in one.\n * @param {T[] | T} value Value that should be an array\n * @returns {T[]} Value in an array\n */\nexport function makeArray<T>(value: T | T[]): T[] {\n\treturn Array.isArray(value) ? value : [value];\n}\n","export type Listener = (...args: any[]) => any;\r\nexport type TypedEvents = {[k in string | symbol]: Listener} & {'*': (event: string, ...args: any[]) => any};\r\n\r\nexport class TypedEmitter<T extends TypedEvents = TypedEvents> {\r\n\tprivate static listeners: {[key: string]: Listener[]} = {};\r\n\r\n\tprivate listeners: { [key in keyof T]?: Listener[] } = {};\r\n\r\n\tstatic emit(event: any, ...args: any[]) {\r\n\t\t(this.listeners['*'] || []).forEach(l => l(event, ...args));\r\n\t\t(this.listeners[event.toString()] || []).forEach(l => l(...args));\r\n\t};\r\n\r\n\tstatic off(event: any, listener: Listener) {\r\n\t\tconst e = event.toString();\r\n\t\tthis.listeners[e] = (this.listeners[e] || []).filter(l => l === listener);\r\n\t}\r\n\r\n\tstatic on(event: any, listener: Listener) {\r\n\t\tconst e = event.toString();\r\n\t\tif(!this.listeners[e]) this.listeners[e] = [];\r\n\t\tthis.listeners[e]?.push(listener);\r\n\t\treturn () => this.off(event, listener);\r\n\t}\r\n\r\n\tstatic once(event: any, listener?: Listener): Promise<any> {\r\n\t\treturn new Promise(res => {\r\n\t\t\tconst unsubscribe = this.on(event, <any>((...args: any) => {\r\n\t\t\t\tres(args.length == 1 ? args[0] : args);\r\n\t\t\t\tif(listener) listener(...args);\r\n\t\t\t\tunsubscribe();\r\n\t\t\t}));\r\n\t\t});\r\n\t}\r\n\r\n\temit<K extends keyof T>(event: K, ...args: Parameters<T[K]>) {\r\n\t\t(this.listeners['*'] || []).forEach(l => l(event, ...args));\r\n\t\t(this.listeners[event] || []).forEach(l => l(...args));\r\n\t};\r\n\r\n\toff<K extends keyof T = string>(event: K, listener: T[K]) {\r\n\t\tthis.listeners[event] = (this.listeners[event] || []).filter(l => l === listener);\r\n\t}\r\n\r\n\ton<K extends keyof T = string>(event: K, listener: T[K]) {\r\n\t\tif(!this.listeners[event]) this.listeners[event] = [];\r\n\t\tthis.listeners[event]?.push(listener);\r\n\t\treturn () => this.off(event, listener);\r\n\t}\r\n\r\n\tonce<K extends keyof T = string>(event: K, listener?: T[K]): Promise<any> {\r\n\t\treturn new Promise(res => {\r\n\t\t\tconst unsubscribe = this.on(event, <any>((...args: any) => {\r\n\t\t\t\tres(args.length == 1 ? args[0] : args);\r\n\t\t\t\tif(listener) listener(...args);\r\n\t\t\t\tunsubscribe();\r\n\t\t\t}));\r\n\t\t});\r\n\t}\r\n}\r\n","import {TypedEmitter, type TypedEvents} from './emitter';\r\nimport {clean} from './objects';\r\n\r\nexport type Interceptor = (request: Response, next: () => void) => void;\r\n\r\nexport type RequestOptions = {\r\n\turl?: string;\r\n\tmethod?: 'GET' | 'POST' | 'PATCH' | 'DELETE';\r\n\tbody?: any;\r\n\theaders?: {[key: string | symbol]: string | null | undefined};\r\n\t[key: string]: any;\r\n}\r\n\r\nexport type XhrEvents = TypedEvents & {\r\n\t'REQUEST': (request: Promise<any>, options: RequestOptions) => any;\r\n\t'RESPONSE': (response: Response, options: RequestOptions) => any;\r\n\t'REJECTED': (response: Error, options: RequestOptions) => any;\r\n\r\n};\r\n\r\nexport type XhrOptions = {\r\n\tinterceptors?: Interceptor[];\r\n\turl?: string;\r\n}\r\n\r\nexport class XHR extends TypedEmitter<XhrEvents> {\r\n\tprivate static headers: {[key: string]: string} = {};\r\n\tprivate static interceptors: {[key: string]: Interceptor} = {};\r\n\r\n\tprivate headers: {[key: string]: string} = {}\r\n\tprivate interceptors: {[key: string]: Interceptor} = {}\r\n\r\n\tconstructor(public readonly opts: XhrOptions = {}) {\r\n\t\tsuper();\r\n\t\tif(opts.interceptors) {\r\n\t\t\topts.interceptors.forEach(i => XHR.addInterceptor(i));\r\n\t\t}\r\n\t}\r\n\r\n\tstatic addInterceptor(fn: Interceptor): () => void {\r\n\t\tconst key = Object.keys(XHR.interceptors).length.toString();\r\n\t\tXHR.interceptors[key] = fn;\r\n\t\treturn () => { XHR.interceptors[key] = <any>null; }\r\n\t}\r\n\r\n\taddInterceptor(fn: Interceptor): () => void {\r\n\t\tconst key = Object.keys(this.interceptors).length.toString();\r\n\t\tthis.interceptors[key] = fn;\r\n\t\treturn () => { this.interceptors[key] = <any>null; }\r\n\t}\r\n\r\n\tasync request<T>(opts: RequestOptions = {}): Promise<T> {\r\n\t\tif(!this.opts.url && !opts.url) throw new Error('Momentum server URL needs to be set');\r\n\t\tconst url = (opts.url?.startsWith('http') ? opts.url : (this.opts.url || '') + opts.url).replace(/([^:]\\/)\\/+/g, '$1');\r\n\r\n\t\t// Prep headers\r\n\t\tconst headers = <any>clean({\r\n\t\t\t'Content-Type': (opts.body && !(opts.body instanceof FormData)) ? 'application/json' : undefined,\r\n\t\t\t...XHR.headers,\r\n\t\t\t...this.headers,\r\n\t\t\t...opts.headers\r\n\t\t});\r\n\r\n\t\t// Send request\r\n\t\tconst req = fetch(url, {\r\n\t\t\theaders,\r\n\t\t\tmethod: opts.method || (opts.body ? 'POST' : 'GET'),\r\n\t\t\tbody: (headers['Content-Type']?.startsWith('application/json') && opts.body) ? JSON.stringify(opts.body) : opts.body\r\n\t\t}).then(async resp => {\r\n\t\t\tfor(let fn of [...Object.values(XHR.interceptors), ...Object.values(this.interceptors)]) {\r\n\t\t\t\tconst wait = new Promise(res => fn(resp, () => res(null)));\r\n\t\t\t\tawait wait;\r\n\t\t\t}\r\n\r\n\t\t\tthis.emit(`${resp.status}`, resp, opts);\r\n\t\t\tif(!resp.ok) throw Error(resp.statusText);\r\n\t\t\tthis.emit('RESPONSE', resp, opts);\r\n\t\t\tif(resp.headers.get('Content-Type')?.startsWith('application/json')) return await resp.json();\r\n\t\t\tif(resp.headers.get('Content-Type')?.startsWith('text/plain')) return await <any>resp.text();\r\n\t\t\treturn resp;\r\n\t\t}).catch((err: Error) => {\r\n\t\t\tthis.emit('REJECTED', err, opts);\r\n\t\t\tthrow err;\r\n\t\t});\r\n\t\tthis.emit('REQUEST', req, opts)\r\n\t\treturn req;\r\n\t}\r\n}\r\n","import {XHR} from './xhr';\r\n\r\nXHR.addInterceptor((resp: Response, next: () => void) => {\r\n\tif(resp.status == 200) return next();\r\n\tif(resp.status == 400) throw new BadRequestError(resp.statusText);\r\n\tif(resp.status == 401) throw new UnauthorizedError(resp.statusText);\r\n\tif(resp.status == 403) throw new ForbiddenError(resp.statusText);\r\n\tif(resp.status == 404) throw new NotFoundError(resp.statusText);\r\n\tif(resp.status == 500) throw new InternalServerError(resp.statusText);\r\n\tthrow new CustomError(resp.statusText, resp.status);\r\n});\r\n\r\nexport class CustomError extends Error {\r\n\tstatic code = 500;\r\n\r\n\tprivate _code?: number;\r\n\tget code(): number { return this._code || (<any>this).constructor.code; }\r\n\tset code(c: number) { this._code = c; }\r\n\r\n\tconstructor(message?: string, code?: number) {\r\n\t\tsuper(message);\r\n\t\tif(code != null) this._code = code;\r\n\t}\r\n\r\n\tstatic from(err: Error): CustomError {\r\n\t\tconst code = Number((<any>err).statusCode) ?? Number((<any>err).code);\r\n\t\tconst newErr = new this(err.message || err.toString());\r\n\t\treturn Object.assign(newErr, {\r\n\t\t\tstack: err.stack,\r\n\t\t\t...err,\r\n\t\t\tcode: code ?? undefined\r\n\t\t});\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code != undefined;\r\n\t}\r\n\r\n\ttoString() {\r\n\t\treturn this.message || super.toString();\r\n\t}\r\n}\r\n\r\nexport class BadRequestError extends CustomError {\r\n\tstatic code = 400;\r\n\r\n\tconstructor(message: string = 'Bad Request') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class UnauthorizedError extends CustomError {\r\n\tstatic code = 401;\r\n\r\n\tconstructor(message: string = 'Unauthorized') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class ForbiddenError extends CustomError {\r\n\tstatic code = 403;\r\n\r\n\tconstructor(message: string = 'Forbidden') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class NotFoundError extends CustomError {\r\n\tstatic code = 404;\r\n\r\n\tconstructor(message: string = 'Not Found') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class InternalServerError extends CustomError {\r\n\tstatic code = 500;\r\n\r\n\tconstructor(message: string = 'Internal Server Error') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n","import {TypedEmitter, TypedEvents} from './emitter';\r\n\r\nexport const CliEffects = {\r\n\tCLEAR: \"\\x1b[0m\",\r\n\tBRIGHT: \"\\x1b[1m\",\r\n\tDIM: \"\\x1b[2m\",\r\n\tUNDERSCORE: \"\\x1b[4m\",\r\n\tBLINK: \"\\x1b[5m\",\r\n\tREVERSE: \"\\x1b[7m\",\r\n\tHIDDEN: \"\\x1b[8m\",\r\n}\r\n\r\nexport const CliForeground = {\r\n\tBLACK: '\\x1b[30m',\r\n\tRED: '\\x1b[31m',\r\n\tGREEN: '\\x1b[32m',\r\n\tYELLOW: '\\x1b[33m',\r\n\tBLUE: '\\x1b[34m',\r\n\tMAGENTA: '\\x1b[35m',\r\n\tCYAN: '\\x1b[36m',\r\n\tLIGHT_GREY: '\\x1b[37m',\r\n\tGREY: '\\x1b[90m',\r\n\tLIGHT_RED: '\\x1b[91m',\r\n\tLIGHT_GREEN: '\\x1b[92m',\r\n\tLIGHT_YELLOW: '\\x1b[93m',\r\n\tLIGHT_BLUE: '\\x1b[94m',\r\n\tLIGHT_MAGENTA: '\\x1b[95m',\r\n\tLIGHT_CYAN: '\\x1b[96m',\r\n\tWHITE: '\\x1b[97m',\r\n}\r\n\r\nexport const CliBackground = {\r\n\tBLACK: \"\\x1b[40m\",\r\n\tRED: \"\\x1b[41m\",\r\n\tGREEN: \"\\x1b[42m\",\r\n\tYELLOW: \"\\x1b[43m\",\r\n\tBLUE: \"\\x1b[44m\",\r\n\tMAGENTA: \"\\x1b[45m\",\r\n\tCYAN: \"\\x1b[46m\",\r\n\tWHITE: \"\\x1b[47m\",\r\n\tGREY: \"\\x1b[100m\",\r\n}\r\n\r\nexport enum LOG_LEVEL {\r\n\tERROR = 0,\r\n\tWARN = 1,\r\n\tINFO = 2,\r\n\tLOG = 3,\r\n\tDEBUG = 4,\r\n}\r\n\r\nexport type LoggerEvents = TypedEvents & {\r\n\t'ERROR': (...args: any[]) => any;\r\n\t'WARN': (...args: any[]) => any;\r\n\t'INFO': (...args: any[]) => any;\r\n\t'LOG': (...args: any[]) => any;\r\n\t'DEBUG': (...args: any[]) => any;\r\n};\r\n\r\nexport class Logger extends TypedEmitter<LoggerEvents> {\r\n\tstatic LOG_LEVEL: LOG_LEVEL = LOG_LEVEL.DEBUG;\r\n\r\n\tconstructor(public readonly namespace?: string) {\r\n\t\tsuper();\r\n\t}\r\n\r\n\tprivate pad(text: any, length: number, char: string, end = false) {\r\n\t\tconst t = text.toString();\r\n\t\tconst l = length - t.length;\r\n\t\tif(l <= 0) return t;\r\n\t\tconst padding = Array(~~(l / char.length)).fill(char).join('');\r\n\t\treturn !end ? padding + t : t + padding;\r\n\t}\r\n\r\n\tprivate format(...text: string[]): string {\r\n\t\tconst now = new Date();\r\n\t\tconst timestamp = `${now.getFullYear()}-${now.getMonth() + 1}-${now.getDate()} ${this.pad(now.getHours().toString(), 2, '0')}:${this.pad(now.getMinutes().toString(), 2, '0')}:${this.pad(now.getSeconds().toString(), 2, '0')}.${this.pad(now.getMilliseconds().toString(), 3, '0', true)}`;\r\n\t\treturn `${timestamp}${this.namespace ? ` [${this.namespace}]` : ''} ${text.join(' ')}`;\r\n\t}\r\n\r\n\tdebug(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.DEBUG) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.DEBUG, str);\r\n\t\tconsole.debug(CliForeground.LIGHT_GREY + str + CliEffects.CLEAR);\r\n\t}\r\n\r\n\tlog(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.LOG) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.LOG, str);\r\n\t\tconsole.log(CliEffects.CLEAR + str);\r\n\t}\r\n\r\n\tinfo(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.INFO) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.INFO, str);\r\n\t\tconsole.info(CliForeground.BLUE + str + CliEffects.CLEAR);\r\n\t}\r\n\r\n\twarn(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.WARN) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.WARN, str);\r\n\t\tconsole.warn(CliForeground.YELLOW + str + CliEffects.CLEAR);\r\n\t}\r\n\r\n\terror(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.ERROR) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.ERROR, str);\r\n\t\tconsole.error(CliForeground.RED + str + CliEffects.CLEAR);\r\n\t}\r\n}\r\n","export function countChars(text: string, pattern: RegExp) {\r\n\treturn text.length - text.replaceAll(pattern, '').length;\r\n}\r\n\r\nexport function createHex(length: number) {\r\n\treturn Array(length).fill(null).map(() => Math.round(Math.random() * 0xF).toString(16)).join('');\r\n}\r\n\r\n/**\r\n * String of all letters\r\n *\r\n */\r\nconst LETTER_LIST = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\r\n\r\n/**\r\n * String of all numbers\r\n *\r\n */\r\nconst NUMBER_LIST = '0123456789';\r\n\r\n/**\r\n * String of all symbols\r\n */\r\nconst SYMBOL_LIST = '~`!@#$%^&*()_-+={[}]|\\\\:;\"\\'<,>.?/';\r\n\r\n/**\r\n * String of all letters, numbers & symbols\r\n */\r\nconst CHAR_LIST = LETTER_LIST + NUMBER_LIST + SYMBOL_LIST;\r\n\r\nexport function formatPhoneNumber(number: string) {\r\n\tconst parts = /(\\+?1)?.*?(\\d{3}).*?(\\d{3}).*?(\\d{4})/g.exec(number);\r\n\tif(!parts) throw new Error(`Number cannot be parsed: ${number}`);\r\n\treturn `${parts[1] ?? ''} (${parts[2]}) ${parts[3]}-${parts[4]}`.trim();\r\n}\r\n\r\n/**\r\n * Insert a string into another string at a given position\r\n *\r\n * @example\r\n * ```\r\n * console.log(insertAt('Hello world!', ' glorious', 5);\r\n * // Output: Hello glorious world!\r\n * ```\r\n *\r\n * @param {string} target - Parent string you want to modify\r\n * @param {string} str - Value that will be injected to parent\r\n * @param {number} index - Position to inject string at\r\n * @returns {string} - New string\r\n */\r\nexport function insertAt(target: string, str: string, index: number): String {\r\n\treturn `${target.slice(0, index)}${str}${target.slice(index + 1)}`;\r\n}\r\n\r\nexport function pad(text: any, length: number, char: string, start = true) {\r\n\tconst t = text.toString();\r\n\tconst l = length - t.length;\r\n\tif(l <= 0) return t;\r\n\tconst padding = Array(~~(l / char.length)).fill(char).join('');\r\n\treturn start ? padding + t : t + padding;\r\n}\r\n\r\n/**\r\n * Generate a string of random characters.\r\n *\r\n * @example\r\n * ```ts\r\n * const random = randomString();\r\n * const randomByte = randomString(8, \"01\")\r\n * ```\r\n *\r\n * @param {number} length - length of generated string\r\n * @param {string} pool - character pool to generate string from\r\n * @return {string} generated string\r\n */\r\nexport function randomString(length: number, pool: string = CHAR_LIST): string {\r\n\treturn Array(length).fill(null).map(() => {\r\n\t\tconst n = ~~(Math.random() * pool.length);\r\n\t\treturn pool[n];\r\n\t}).join('');\r\n}\r\n\r\n/**\r\n * Generate a random string with fine control over letters, numbers & symbols\r\n *\r\n * @example\r\n * ```ts\r\n * const randomLetter = randomString(1, true);\r\n * const randomChar = randomString(1, true, true, true);\r\n * ```\r\n *\r\n * @param {number} length - length of generated string\r\n * @param {boolean} letters - Add letters to pool\r\n * @param {boolean} numbers - Add numbers to pool\r\n * @param {boolean} symbols - Add symbols to pool\r\n * @return {string} generated string\r\n */\r\nexport function randomStringBuilder(length: number, letters = false, numbers = false, symbols = false): string {\r\n\tif(!letters && !numbers && !symbols) throw new Error('Must enable at least one: letters, numbers, symbols');\r\n\treturn Array(length).fill(null).map(() => {\r\n\t\tlet c;\r\n\t\tdo {\r\n\t\t\tconst type = ~~(Math.random() * 3);\r\n\t\t\tif(letters && type == 0) {\r\n\t\t\t\tc = LETTER_LIST[~~(Math.random() * LETTER_LIST.length)];\r\n\t\t\t} else if(numbers && type == 1) {\r\n\t\t\t\tc = NUMBER_LIST[~~(Math.random() * NUMBER_LIST.length)];\r\n\t\t\t} else if(symbols && type == 2) {\r\n\t\t\t\tc = SYMBOL_LIST[~~(Math.random() * SYMBOL_LIST.length)];\r\n\t\t\t}\r\n\t\t} while(!c);\r\n\t\treturn c;\r\n\t}).join('');\r\n}\r\n\r\n/**\r\n * Find all substrings that match a given pattern.\r\n *\r\n * Roughly based on `String.prototype.matchAll`.\r\n *\r\n * @param {string} value - String to search.\r\n * @param {RegExp | string} regex - Regular expression to match.\r\n * @return {RegExpExecArray[]} Found matches.\r\n */\r\nexport function matchAll(value: string, regex: RegExp | string): RegExpExecArray[] {\r\n\tif(typeof regex === 'string') {\r\n\t\tregex = new RegExp(regex, 'g');\r\n\t}\r\n\r\n\t// https://stackoverflow.com/a/60290199\r\n\tif(!regex.global) {\r\n\t\tthrow new TypeError('Regular expression must be global.');\r\n\t}\r\n\r\n\tlet ret: RegExpExecArray[] = [];\r\n\tlet match: RegExpExecArray | null;\r\n\twhile((match = regex.exec(value)) !== null) {\r\n\t\tret.push(match);\r\n\t}\r\n\r\n\treturn ret;\r\n}\r\n\r\n/**\r\n * Create MD5 hash using native javascript\r\n * @param d String to hash\r\n * @returns {string} Hashed string\r\n */\r\nexport function md5(d: string) {\r\n\tvar r = M(V(Y(X(d),8*d.length)));return r.toLowerCase()};\r\n\tfunction M(d:any){for(var _,m=\"0123456789ABCDEF\",f=\"\",r=0;r<d.length;r++)_=d.charCodeAt(r),f+=m.charAt(_>>>4&15)+m.charAt(15&_);return f}\r\n\tfunction X(d:any){for(var _=Array(d.length>>2),m=0;m<_.length;m++)_[m]=0;for(m=0;m<8*d.length;m+=8)_[m>>5]|=(255&d.charCodeAt(m/8))<<m%32;return _}\r\n\tfunction V(d:any){for(var _=\"\",m=0;m<32*d.length;m+=8)_+=String.fromCharCode(d[m>>5]>>>m%32&255);return _}\r\n\tfunction Y(d:any,_:any){d[_>>5]|=128<<_%32,d[14+(_+64>>>9<<4)]=_;for(var m=1732584193,f=-271733879,r=-1732584194,i=271733878,n=0;n<d.length;n+=16){var h=m,t=f,g=r,e=i;f=md5_ii(f=md5_ii(f=md5_ii(f=md5_ii(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_ff(f=md5_ff(f=md5_ff(f=md5_ff(f,r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+0],7,-680876936),f,r,d[n+1],12,-389564586),m,f,d[n+2],17,606105819),i,m,d[n+3],22,-1044525330),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+4],7,-176418897),f,r,d[n+5],12,1200080426),m,f,d[n+6],17,-1473231341),i,m,d[n+7],22,-45705983),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+8],7,1770035416),f,r,d[n+9],12,-1958414417),m,f,d[n+10],17,-42063),i,m,d[n+11],22,-1990404162),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+12],7,1804603682),f,r,d[n+13],12,-40341101),m,f,d[n+14],17,-1502002290),i,m,d[n+15],22,1236535329),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+1],5,-165796510),f,r,d[n+6],9,-1069501632),m,f,d[n+11],14,643717713),i,m,d[n+0],20,-373897302),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+5],5,-701558691),f,r,d[n+10],9,38016083),m,f,d[n+15],14,-660478335),i,m,d[n+4],20,-405537848),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+9],5,568446438),f,r,d[n+14],9,-1019803690),m,f,d[n+3],14,-187363961),i,m,d[n+8],20,1163531501),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+13],5,-1444681467),f,r,d[n+2],9,-51403784),m,f,d[n+7],14,1735328473),i,m,d[n+12],20,-1926607734),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+5],4,-378558),f,r,d[n+8],11,-2022574463),m,f,d[n+11],16,1839030562),i,m,d[n+14],23,-35309556),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+1],4,-1530992060),f,r,d[n+4],11,1272893353),m,f,d[n+7],16,-155497632),i,m,d[n+10],23,-1094730640),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+13],4,681279174),f,r,d[n+0],11,-358537222),m,f,d[n+3],16,-722521979),i,m,d[n+6],23,76029189),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+9],4,-640364487),f,r,d[n+12],11,-421815835),m,f,d[n+15],16,530742520),i,m,d[n+2],23,-995338651),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+0],6,-198630844),f,r,d[n+7],10,1126891415),m,f,d[n+14],15,-1416354905),i,m,d[n+5],21,-57434055),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+12],6,1700485571),f,r,d[n+3],10,-1894986606),m,f,d[n+10],15,-1051523),i,m,d[n+1],21,-2054922799),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+8],6,1873313359),f,r,d[n+15],10,-30611744),m,f,d[n+6],15,-1560198380),i,m,d[n+13],21,1309151649),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+4],6,-145523070),f,r,d[n+11],10,-1120210379),m,f,d[n+2],15,718787259),i,m,d[n+9],21,-343485551),m=safe_add(m,h),f=safe_add(f,t),r=safe_add(r,g),i=safe_add(i,e)}return Array(m,f,r,i)}\r\n\tfunction md5_cmn(d:any,_:any,m:any,f:any,r:any,i:any){return safe_add(bit_rol(safe_add(safe_add(_,d),safe_add(f,i)),r),m)}\r\n\tfunction md5_ff(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(_&m|~_&f,d,_,r,i,n)}\r\n\tfunction md5_gg(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(_&f|m&~f,d,_,r,i,n)}\r\n\tfunction md5_hh(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(_^m^f,d,_,r,i,n)}\r\n\tfunction md5_ii(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(m^(_|~f),d,_,r,i,n)}\r\n\tfunction safe_add(d:any,_:any){var m=(65535&d)+(65535&_);return(d>>16)+(_>>16)+(m>>16)<<16|65535&m}\r\n\tfunction bit_rol(d:any,_:any){return d<<_|d>>>32-_\r\n}\r\n\r\n/**\r\n * Check if email is valid\r\n *\r\n * @param {string} email - Target\r\n * @returns {boolean} - Follows format\r\n */\r\nexport function validateEmail(email: string) {\r\n\treturn /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/.test(email);\r\n}\r\n","import {md5} from './string';\r\n\r\n/**\r\n * Convert data into a form encoded format.\r\n *\r\n * @param {any} data - data to convert\r\n * @returns {string} - Ecodeded form data\r\n */\r\nexport function formEncode(data: any): string {\r\n\treturn Object.entries(data).map(([key, value]) =>\r\n\t\tencodeURIComponent(key) + '=' + encodeURIComponent(<any>value)\r\n\t).join('&');\r\n}\r\n\r\n/**\r\n * Get profile image from Gravatar\r\n *\r\n * @param {string} email Account email address\r\n * @param {string} def Default image, can be a link or '404', see: https://docs.gravatar.com/general/images/\r\n * @returns {string} Gravatar URL\r\n */\r\nexport function gravatar(email: string, def='mp') {\r\n\tif(!email) return '';\r\n\treturn `https://www.gravatar.com/avatar/${md5(email)}?d=${def}`;\r\n}\r\n\r\n/** Parts of a URL */\r\nexport type ParsedUrl = {\r\n\tprotocol?: string,\r\n\tsubdomain?: string,\r\n\tdomain: string,\r\n\thost: string,\r\n\tport?: number,\r\n\tpath?: string,\r\n\tquery?: {[name: string]: string}\r\n\tfragment?: string\r\n}\r\n\r\n/**\r\n *\r\n * @param {string} url\r\n * @returns {RegExpExecArray}\r\n */\r\nexport function urlParser(url: string): ParsedUrl {\r\n\tconst processed = new RegExp(\r\n\t\t'(?:(?<protocol>[\\\\w\\\\d]+)\\\\:\\\\/\\\\/)?(?:(?<user>.+)\\\\@)?(?<host>(?<domain>[^:\\\\/\\\\?#@\\\\n]+)(?:\\\\:(?<port>\\\\d*))?)(?<path>\\\\/.*?)?(?:\\\\?(?<query>.*?))?(?:#(?<fragment>.*?))?$',\r\n\t\t'gm').exec(url);\r\n\tconst groups: ParsedUrl = <any>processed?.groups ?? {};\r\n\tconst domains = groups.domain.split('.');\r\n\tif(groups['port'] != null) groups.port = Number(groups.port);\r\n\tif(domains.length > 2) {\r\n\t\tgroups.domain = domains.splice(-2, 2).join('.');\r\n\t\tgroups.subdomain = domains.join('.');\r\n\t}\r\n\tif(groups.query) {\r\n\t\tconst split = (<any>groups.query).split('&'), query: any = {};\r\n\t\tsplit.forEach((q: any) => {\r\n\t\t\tconst [key, val] = q.split('=');\r\n\t\t\tquery[key] = val;\r\n\t\t});\r\n\t\tgroups.query = query;\r\n\t}\r\n\treturn groups;\r\n}\r\n","/**\r\n * Calculate the number of milliseconds until date/time\r\n *\r\n * @param {Date | number} date - Target\r\n * @returns {number} - Number of milliseconds until target\r\n */\r\nexport function timeUntil(date: Date | number): number {\r\n\treturn (date instanceof Date ? date.getTime() : date) - (new Date()).getTime();\r\n}\r\n\r\n/**\r\n * Use in conjunction with `await` to pause an async script\r\n *\r\n * @example\r\n * ```ts\r\n * async () => {\r\n * ...\r\n * await sleep(1000) // Pause for 1 second\r\n *\t ...\r\n * }\r\n * ```\r\n *\r\n * @param {number} ms - Time to pause for in milliseconds\r\n * @returns {Promise<unknown>} - Resolves promise when it's time to resume\r\n */\r\nexport function sleep(ms: number) {\r\n\treturn new Promise(res => setTimeout(res, ms));\r\n}\r\n\r\nexport function formatDate(date: Date | number | string) {\r\n\tconst d = date instanceof Date ? date : new Date(date);\r\n\treturn new Intl.DateTimeFormat(\"en-us\", {\r\n\t\tweekday: \"long\",\r\n\t\tmonth: \"short\",\r\n\t\tday: \"numeric\",\r\n\t\thour: \"numeric\",\r\n\t\tminute: \"numeric\",\r\n\t\thour12: true\r\n\t}).format(d);\r\n}\r\n"],"names":["clean","obj","undefinedOnly","o","key","value","deepCopy","dotNotation","prop","set","arr","flattenObj","parent","result","propName","includes","target","values","allowMissing","e","type","isEqual","a","b","ta","tb","addUnique","array","el","arrayDiff","makeUnique","v1","v2","caseInsensitiveSort","aVal","bVal","flattenArr","sortByProp","reverse","findByProp","v","i","n","makeArray","TypedEmitter","__publicField","event","args","l","listener","_a","res","unsubscribe","_XHR","opts","fn","url","headers","req","_b","resp","err","XHR","next","BadRequestError","UnauthorizedError","ForbiddenError","NotFoundError","InternalServerError","CustomError","message","code","c","newErr","CliEffects","CliForeground","CliBackground","LOG_LEVEL","_Logger","namespace","text","length","char","end","t","padding","now","str","Logger","countChars","pattern","createHex","LETTER_LIST","NUMBER_LIST","SYMBOL_LIST","CHAR_LIST","formatPhoneNumber","number","parts","insertAt","index","pad","start","randomString","pool","randomStringBuilder","letters","numbers","symbols","matchAll","regex","ret","match","md5","d","r","M","V","Y","X","_","m","f","h","g","md5_ii","md5_hh","md5_gg","md5_ff","safe_add","md5_cmn","bit_rol","validateEmail","email","formEncode","data","gravatar","def","urlParser","processed","groups","domains","split","query","q","val","timeUntil","date","sleep","ms","formatDate"],"mappings":"yYAagB,SAAAA,EAASC,EAAQC,EAAgB,GAAmB,CACnE,GAAGD,GAAO,KAAY,MAAA,IAAI,MAAM,2BAA2B,EACxD,OAAA,MAAM,QAAQA,CAAG,EACnBA,EAAWA,EAAI,OAAYE,GAAAA,GAAK,IAAI,EAE7B,OAAA,QAAQF,CAAG,EAAE,QAAQ,CAAC,CAACG,EAAKC,CAAK,IAAM,EACzCH,GAAiBG,IAAU,QAAe,CAACH,GAAiBG,GAAS,OAAO,OAAaJ,EAAKG,CAAG,CAAA,CACrG,EAEUH,CACb,CAUO,SAASK,EAAYD,EAAa,CACxC,OAAO,KAAK,MAAM,KAAK,UAAUA,CAAK,CAAC,CACxC,CAsBgB,SAAAE,EAAeN,EAAUO,EAAcC,EAAwB,CAC3E,GAAA,EAAAR,GAAO,MAAQ,CAACO,GAEnB,OAAUA,EAAK,MAAM,SAAS,EAAE,OAAOA,GAAQA,EAAK,MAAM,EAAE,OAAO,CAACP,EAAKO,EAAO,EAAGE,IAAQ,CAE1F,IADGF,EAAK,CAAC,GAAK,KAAOA,EAAK,CAAC,GAAK,OAAKA,EAAOA,EAAK,MAAM,EAAG,EAAE,GACzD,EAACP,GAAAA,MAAAA,EAAK,eAAeO,IAAO,CAC9B,GAAGC,GAAO,KAAkB,OAC5BR,EAAIO,CAAI,EAAI,EACb,CACA,OAAGC,IAAQ,QAAa,GAAKC,EAAI,OAAS,EAClCT,EAAIO,CAAI,EAAIC,EACbR,EAAIO,CAAI,GACbP,CAAG,CACP,CAgBO,SAASU,EAAWV,EAAUW,EAAcC,EAAc,CAAA,EAAI,CACpE,GAAG,OAAOZ,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAG,EAAG,CAClD,UAAUG,KAAO,OAAO,KAAKH,CAAG,EAAG,CAClC,MAAMa,EAAWF,EAASA,EAAS,IAAMR,EAAMA,EAC5C,OAAOH,EAAIG,CAAG,GAAM,SACtBO,EAAWV,EAAIG,CAAG,EAAGU,EAAUD,CAAM,EAE9BA,EAAAC,CAAQ,EAAIb,EAAIG,CAAG,CAE5B,CACO,OAAAS,CACR,CACD,CAiBO,SAASE,EAASC,EAAaC,EAAaC,EAAe,GAAgB,CACjF,GAAGF,GAAU,KAAkB,OAAAE,EAC5B,GAAA,MAAM,QAAQD,CAAM,EAAG,OAAOA,EAAO,UAAU,CAACE,EAAQ,IAAc,CAACJ,EAASC,EAAO,CAAC,EAAGC,EAAO,CAAC,EAAGC,CAAY,CAAC,GAAK,GAC3H,MAAME,EAAO,OAAOH,EACpB,OAAGG,GAAQ,OAAOJ,EAAe,GAC9BI,GAAQ,SACH,OAAO,KAAKH,CAAM,EAAE,QAAY,CAACF,EAASC,EAAOZ,CAAG,EAAGa,EAAOb,CAAG,EAAGc,CAAY,CAAC,GAAK,KAE3FE,GAAQ,WAAmBJ,EAAO,SAAA,GAAcC,EAAO,SAAS,EAC5DD,GAAUC,CAClB,CASgB,SAAAI,EAAQC,EAAQC,EAAiB,CAChD,MAAMC,EAAK,OAAOF,EAAGG,EAAK,OAAOF,EACjC,OAAIC,GAAM,UAAYF,GAAK,MAAUG,GAAM,UAAYF,GAAK,KACpDC,GAAM,YAAcC,GAAM,WAAaH,EAAE,SAAc,GAAAC,EAAE,WAAaD,IAAMC,EACvE,OAAO,KAAKD,CAAC,EAClB,QAAU,OAAO,KAAKC,CAAC,EAAE,OAAe,GACzC,OAAO,KAAKD,CAAC,EAAE,MAAMlB,GAAOiB,EAAQC,EAAElB,CAAG,EAAGmB,EAAEnB,CAAG,CAAC,CAAC,CAC3D,CC3IgB,SAAAsB,EAAaC,EAAYC,EAAY,CACjD,OAAAD,EAAM,QAAQC,CAAE,IAAM,IAAID,EAAM,KAAKC,CAAE,EACnCD,CACR,CAEgB,SAAAE,EAAUP,EAAUC,EAAiB,CACpD,OAAOO,EAAW,CACjB,GAAGR,EAAE,OAAOS,GAAM,CAACR,EAAE,SAAUS,GAAYX,EAAQU,EAAIC,CAAE,CAAC,CAAC,EAC3D,GAAGT,EAAE,OAAOQ,GAAM,CAACT,EAAE,SAAUU,GAAYX,EAAQU,EAAIC,CAAE,CAAC,CAAC,CAAA,CAC3D,CACF,CAcO,SAASC,EAAoBzB,EAAc,CAC1C,OAAA,SAAUc,EAAQC,EAAQ,CAC1B,MAAAW,EAAO3B,EAAoBe,EAAGd,CAAI,EAClC2B,EAAO5B,EAAoBgB,EAAGf,CAAI,EACxC,OAAG,OAAO0B,GAAS,UAAY,OAAOC,GAAS,SAAiB,EACzDD,EAAK,YAAY,EAAE,cAAcC,EAAK,aAAa,CAAA,CAE5D,CA8BO,SAASC,EAAW1B,EAAYG,EAAgB,GAAW,CACjE,OAAAH,EAAI,QAAQkB,GAAM,MAAM,QAAQA,CAAE,EAAIQ,EAAWR,EAAIf,CAAM,EAAIA,EAAO,KAAKe,CAAE,CAAC,EACvEf,CACR,CAegB,SAAAwB,EAAW7B,EAAc8B,EAAU,GAAO,CAClD,OAAA,SAAUhB,EAAQC,EAAQ,CAC1B,MAAAW,EAAO3B,EAAiBe,EAAGd,CAAI,EAC/B2B,EAAO5B,EAAiBgB,EAAGf,CAAI,EACrC,OAAG,OAAO0B,GAAQ,UAAY,OAAOC,GAAQ,UACpCG,EAAU,GAAK,IAAMJ,EAAOC,GAClCD,EAAOC,EAAaG,EAAU,GAAK,EACnCJ,EAAOC,EAAaG,EAAU,EAAI,GAC9B,CAAA,CAET,CAEgB,SAAAC,EAAW/B,EAAcH,EAAY,CACpD,OAAQmC,GAAWnB,EAAQmB,EAAEhC,CAAI,EAAGH,CAAK,CAC1C,CAEO,SAASyB,EAAWpB,EAAY,CACtC,QAAQ+B,EAAI/B,EAAI,OAAS,EAAG+B,GAAK,EAAGA,IAChC/B,EAAI,MAAM,EAAG+B,CAAC,EAAE,KAAUC,GAAArB,EAAQqB,EAAGhC,EAAI+B,CAAC,CAAC,CAAC,GAAO/B,EAAA,OAAO+B,EAAG,CAAC,EAE3D,OAAA/B,CACR,CAOO,SAASiC,EAAatC,EAAqB,CACjD,OAAO,MAAM,QAAQA,CAAK,EAAIA,EAAQ,CAACA,CAAK,CAC7C,CC5GO,MAAMuC,CAAkD,CAAxD,cAGEC,EAAA,iBAA+C,CAAA,GAEvD,OAAO,KAAKC,KAAeC,EAAa,EACtC,KAAK,UAAU,GAAG,GAAK,CAAA,GAAI,QAAQC,GAAKA,EAAEF,EAAO,GAAGC,CAAI,CAAC,GACzD,KAAK,UAAUD,EAAM,SAAU,CAAA,GAAK,CAAA,GAAI,QAAQE,GAAKA,EAAE,GAAGD,CAAI,CAAC,CACjE,CAEA,OAAO,IAAID,EAAYG,EAAoB,CACpC,MAAA9B,EAAI2B,EAAM,WAChB,KAAK,UAAU3B,CAAC,GAAK,KAAK,UAAUA,CAAC,GAAK,CAAA,GAAI,OAAY6B,GAAAA,IAAMC,CAAQ,CACzE,CAEA,OAAO,GAAGH,EAAYG,EAAoB,OACnC,MAAA9B,EAAI2B,EAAM,WACb,OAAC,KAAK,UAAU3B,CAAC,IAAQ,KAAA,UAAUA,CAAC,EAAI,KAC3C+B,EAAA,KAAK,UAAU/B,CAAC,IAAhB,MAAA+B,EAAmB,KAAKD,GACjB,IAAM,KAAK,IAAIH,EAAOG,CAAQ,CACtC,CAEA,OAAO,KAAKH,EAAYG,EAAmC,CACnD,OAAA,IAAI,QAAeE,GAAA,CACzB,MAAMC,EAAc,KAAK,GAAGN,EAAa,IAAIC,IAAc,CAC1DI,EAAIJ,EAAK,QAAU,EAAIA,EAAK,CAAC,EAAIA,CAAI,EAClCE,GAAUA,EAAS,GAAGF,CAAI,EACjBK,GAAA,CACX,CAAA,CACF,CACF,CAEA,KAAwBN,KAAaC,EAAwB,EAC3D,KAAK,UAAU,GAAG,GAAK,CAAA,GAAI,QAAQC,GAAKA,EAAEF,EAAO,GAAGC,CAAI,CAAC,GACzD,KAAK,UAAUD,CAAK,GAAK,CAAI,GAAA,QAAaE,GAAAA,EAAE,GAAGD,CAAI,CAAC,CACtD,CAEA,IAAgCD,EAAUG,EAAgB,CACzD,KAAK,UAAUH,CAAK,GAAK,KAAK,UAAUA,CAAK,GAAK,CAAA,GAAI,OAAYE,GAAAA,IAAMC,CAAQ,CACjF,CAEA,GAA+BH,EAAUG,EAAgB,OACrD,OAAC,KAAK,UAAUH,CAAK,IAAQ,KAAA,UAAUA,CAAK,EAAI,KACnDI,EAAA,KAAK,UAAUJ,CAAK,IAApB,MAAAI,EAAuB,KAAKD,GACrB,IAAM,KAAK,IAAIH,EAAOG,CAAQ,CACtC,CAEA,KAAiCH,EAAUG,EAA+B,CAClE,OAAA,IAAI,QAAeE,GAAA,CACzB,MAAMC,EAAc,KAAK,GAAGN,EAAa,IAAIC,IAAc,CAC1DI,EAAIJ,EAAK,QAAU,EAAIA,EAAK,CAAC,EAAIA,CAAI,EAClCE,GAAUA,EAAS,GAAGF,CAAI,EACjBK,GAAA,CACX,CAAA,CACF,CACF,CACD,CAvDCP,EADYD,EACG,YAAyC,CAAA,GCqBlD,MAAMS,EAAN,MAAMA,UAAYT,CAAwB,CAOhD,YAA4BU,EAAmB,GAAI,CAC5C,QAJCT,EAAA,eAAmC,CAAA,GACnCA,EAAA,oBAA6C,CAAA,GAEzB,KAAA,KAAAS,EAExBA,EAAK,cACPA,EAAK,aAAa,QAAQb,GAAKY,EAAI,eAAeZ,CAAC,CAAC,CAEtD,CAEA,OAAO,eAAec,EAA6B,CAClD,MAAMnD,EAAM,OAAO,KAAKiD,EAAI,YAAY,EAAE,OAAO,WAC7C,OAAAA,EAAA,aAAajD,CAAG,EAAImD,EACjB,IAAM,CAAMF,EAAA,aAAajD,CAAG,EAAS,IAAA,CAC7C,CAEA,eAAemD,EAA6B,CAC3C,MAAMnD,EAAM,OAAO,KAAK,KAAK,YAAY,EAAE,OAAO,WAC7C,YAAA,aAAaA,CAAG,EAAImD,EAClB,IAAM,CAAO,KAAA,aAAanD,CAAG,EAAS,IAAA,CAC9C,CAEA,MAAM,QAAWkD,EAAuB,GAAiB,SACxD,GAAG,CAAC,KAAK,KAAK,KAAO,CAACA,EAAK,IAAW,MAAA,IAAI,MAAM,qCAAqC,EACrF,MAAME,IAAON,EAAAI,EAAK,MAAL,MAAAJ,EAAU,WAAW,QAAUI,EAAK,KAAO,KAAK,KAAK,KAAO,IAAMA,EAAK,KAAK,QAAQ,eAAgB,IAAI,EAG/GG,EAAezD,EAAM,CAC1B,eAAiBsD,EAAK,MAAQ,EAAEA,EAAK,gBAAgB,UAAa,mBAAqB,OACvF,GAAGD,EAAI,QACP,GAAG,KAAK,QACR,GAAGC,EAAK,OAAA,CACR,EAGKI,EAAM,MAAMF,EAAK,CACtB,QAAAC,EACA,OAAQH,EAAK,SAAWA,EAAK,KAAO,OAAS,OAC7C,MAAOK,EAAAF,EAAQ,cAAc,IAAtB,MAAAE,EAAyB,WAAW,qBAAuBL,EAAK,KAAQ,KAAK,UAAUA,EAAK,IAAI,EAAIA,EAAK,IAAA,CAChH,EAAE,KAAK,MAAMM,GAAQ,SACrB,QAAQL,KAAM,CAAC,GAAG,OAAO,OAAOF,EAAI,YAAY,EAAG,GAAG,OAAO,OAAO,KAAK,YAAY,CAAC,EAE/E,MADO,IAAI,QAAeF,IAAAI,GAAGK,EAAM,IAAMT,GAAI,IAAI,CAAC,CAAC,EAK1D,GADA,KAAK,KAAK,GAAGS,EAAK,MAAM,GAAIA,EAAMN,CAAI,EACnC,CAACM,EAAK,GAAU,MAAA,MAAMA,EAAK,UAAU,EAExC,OADK,KAAA,KAAK,WAAYA,EAAMN,CAAI,GAC7BJ,EAAAU,EAAK,QAAQ,IAAI,cAAc,IAA/B,MAAAV,EAAkC,WAAW,oBAA4B,MAAMU,EAAK,QACpFD,EAAAC,EAAK,QAAQ,IAAI,cAAc,IAA/B,MAAAD,EAAkC,WAAW,cAAsB,MAAWC,EAAK,OAC/EA,CAAA,CACP,EAAE,MAAOC,GAAe,CACnB,WAAA,KAAK,WAAYA,EAAKP,CAAI,EACzBO,CAAA,CACN,EACI,YAAA,KAAK,UAAWH,EAAKJ,CAAI,EACvBI,CACR,CACD,EA7DCb,EADYQ,EACG,UAAmC,CAAA,GAClDR,EAFYQ,EAEG,eAA6C,CAAA,GAFtD,IAAMS,EAANT,ECvBPS,EAAI,eAAe,CAACF,EAAgBG,IAAqB,CACxD,GAAGH,EAAK,QAAU,IAAK,OAAOG,EAAK,EACnC,MAAGH,EAAK,QAAU,IAAW,IAAII,EAAgBJ,EAAK,UAAU,EAC7DA,EAAK,QAAU,IAAW,IAAIK,EAAkBL,EAAK,UAAU,EAC/DA,EAAK,QAAU,IAAW,IAAIM,EAAeN,EAAK,UAAU,EAC5DA,EAAK,QAAU,IAAW,IAAIO,EAAcP,EAAK,UAAU,EAC3DA,EAAK,QAAU,IAAW,IAAIQ,EAAoBR,EAAK,UAAU,EAC9D,IAAIS,EAAYT,EAAK,WAAYA,EAAK,MAAM,CACnD,CAAC,EAEM,MAAMS,UAAoB,KAAM,CAOtC,YAAYC,EAAkBC,EAAe,CAC5C,MAAMD,CAAO,EALNzB,EAAA,cAMJ0B,GAAQ,OAAM,KAAK,MAAQA,EAC/B,CANA,IAAI,MAAe,CAAS,OAAA,KAAK,OAAe,KAAM,YAAY,IAAM,CACxE,IAAI,KAAKC,EAAW,CAAE,KAAK,MAAQA,CAAG,CAOtC,OAAO,KAAKX,EAAyB,CACpC,MAAMU,EAAO,OAAaV,EAAK,UAAU,GAAK,OAAaA,EAAK,IAAI,EAC9DY,EAAS,IAAI,KAAKZ,EAAI,SAAWA,EAAI,UAAU,EAC9C,OAAA,OAAO,OAAOY,EAAQ,CAC5B,MAAOZ,EAAI,MACX,GAAGA,EACH,KAAMU,GAAQ,MAAA,CACd,CACF,CAEA,OAAO,WAAWV,EAAY,CAChB,OAAAA,EAAK,YAAY,MAAQ,IACvC,CAEA,UAAW,CACH,OAAA,KAAK,SAAW,MAAM,SAAS,CACvC,CACD,CA5BChB,EADYwB,EACL,OAAO,KA8BR,MAAML,UAAwBK,CAAY,CAGhD,YAAYC,EAAkB,cAAe,CAC5C,MAAMA,CAAO,CACd,CAEA,OAAO,WAAWT,EAAY,CAChB,OAAAA,EAAK,YAAY,MAAQ,KAAK,IAC5C,CACD,CATChB,EADYmB,EACL,OAAO,KAWR,MAAMC,UAA0BI,CAAY,CAGlD,YAAYC,EAAkB,eAAgB,CAC7C,MAAMA,CAAO,CACd,CAEA,OAAO,WAAWT,EAAY,CAChB,OAAAA,EAAK,YAAY,MAAQ,KAAK,IAC5C,CACD,CATChB,EADYoB,EACL,OAAO,KAWR,MAAMC,UAAuBG,CAAY,CAG/C,YAAYC,EAAkB,YAAa,CAC1C,MAAMA,CAAO,CACd,CAEA,OAAO,WAAWT,EAAY,CAChB,OAAAA,EAAK,YAAY,MAAQ,KAAK,IAC5C,CACD,CATChB,EADYqB,EACL,OAAO,KAWR,MAAMC,UAAsBE,CAAY,CAG9C,YAAYC,EAAkB,YAAa,CAC1C,MAAMA,CAAO,CACd,CAEA,OAAO,WAAWT,EAAY,CAChB,OAAAA,EAAK,YAAY,MAAQ,KAAK,IAC5C,CACD,CATChB,EADYsB,EACL,OAAO,KAWR,MAAMC,UAA4BC,CAAY,CAGpD,YAAYC,EAAkB,wBAAyB,CACtD,MAAMA,CAAO,CACd,CAEA,OAAO,WAAWT,EAAY,CAChB,OAAAA,EAAK,YAAY,MAAQ,KAAK,IAC5C,CACD,CATChB,EADYuB,EACL,OAAO,KC1FR,MAAMM,EAAa,CACzB,MAAO,UACP,OAAQ,UACR,IAAK,UACL,WAAY,UACZ,MAAO,UACP,QAAS,UACT,OAAQ,SACT,EAEaC,EAAgB,CAC5B,MAAO,WACP,IAAK,WACL,MAAO,WACP,OAAQ,WACR,KAAM,WACN,QAAS,WACT,KAAM,WACN,WAAY,WACZ,KAAM,WACN,UAAW,WACX,YAAa,WACb,aAAc,WACd,WAAY,WACZ,cAAe,WACf,WAAY,WACZ,MAAO,UACR,EAEaC,EAAgB,CAC5B,MAAO,WACP,IAAK,WACL,MAAO,WACP,OAAQ,WACR,KAAM,WACN,QAAS,WACT,KAAM,WACN,MAAO,WACP,KAAM,WACP,EAEY,IAAAC,GAAAA,IACXA,EAAAA,EAAA,MAAQ,CAAR,EAAA,QACAA,EAAAA,EAAA,KAAO,CAAP,EAAA,OACAA,EAAAA,EAAA,KAAO,CAAP,EAAA,OACAA,EAAAA,EAAA,IAAM,CAAN,EAAA,MACAA,EAAAA,EAAA,MAAQ,CAAR,EAAA,QALWA,IAAAA,GAAA,CAAA,CAAA,EAgBL,MAAMC,EAAN,MAAMA,UAAelC,CAA2B,CAGtD,YAA4BmC,EAAoB,CACzC,QADqB,KAAA,UAAAA,CAE5B,CAEQ,IAAIC,EAAWC,EAAgBC,EAAcC,EAAM,GAAO,CAC3D,MAAAC,EAAIJ,EAAK,WACThC,EAAIiC,EAASG,EAAE,OACrB,GAAGpC,GAAK,EAAU,OAAAoC,EAClB,MAAMC,EAAU,MAAM,CAAC,EAAErC,EAAIkC,EAAK,OAAO,EAAE,KAAKA,CAAI,EAAE,KAAK,EAAE,EAC7D,OAAQC,EAAoBC,EAAIC,EAAlBA,EAAUD,CACzB,CAEQ,UAAUJ,EAAwB,CACnC,MAAAM,MAAU,KAEhB,MAAO,GADW,GAAGA,EAAI,YAAY,CAAC,IAAIA,EAAI,SAAS,EAAI,CAAC,IAAIA,EAAI,QAAA,CAAS,IAAI,KAAK,IAAIA,EAAI,SAAA,EAAW,WAAY,EAAG,GAAG,CAAC,IAAI,KAAK,IAAIA,EAAI,aAAa,SAAA,EAAY,EAAG,GAAG,CAAC,IAAI,KAAK,IAAIA,EAAI,WAAW,EAAE,SAAS,EAAG,EAAG,GAAG,CAAC,IAAI,KAAK,IAAIA,EAAI,gBAAA,EAAkB,SAAA,EAAY,EAAG,IAAK,EAAI,CAAC,EACvQ,GAAG,KAAK,UAAY,KAAK,KAAK,SAAS,IAAM,EAAE,IAAIN,EAAK,KAAK,GAAG,CAAC,EACrF,CAEA,SAASjC,EAAgB,CACxB,GAAG+B,EAAO,UAAY,EAAiB,OACvC,MAAMS,EAAM,KAAK,OAAO,GAAGxC,CAAI,EACxB+B,EAAA,KAAK,EAAiBS,CAAG,EAChC,QAAQ,MAAMZ,EAAc,WAAaY,EAAMb,EAAW,KAAK,CAChE,CAEA,OAAO3B,EAAgB,CACtB,GAAG+B,EAAO,UAAY,EAAe,OACrC,MAAMS,EAAM,KAAK,OAAO,GAAGxC,CAAI,EACxB+B,EAAA,KAAK,EAAeS,CAAG,EACtB,QAAA,IAAIb,EAAW,MAAQa,CAAG,CACnC,CAEA,QAAQxC,EAAgB,CACvB,GAAG+B,EAAO,UAAY,EAAgB,OACtC,MAAMS,EAAM,KAAK,OAAO,GAAGxC,CAAI,EACxB+B,EAAA,KAAK,EAAgBS,CAAG,EAC/B,QAAQ,KAAKZ,EAAc,KAAOY,EAAMb,EAAW,KAAK,CACzD,CAEA,QAAQ3B,EAAgB,CACvB,GAAG+B,EAAO,UAAY,EAAgB,OACtC,MAAMS,EAAM,KAAK,OAAO,GAAGxC,CAAI,EACxB+B,EAAA,KAAK,EAAgBS,CAAG,EAC/B,QAAQ,KAAKZ,EAAc,OAASY,EAAMb,EAAW,KAAK,CAC3D,CAEA,SAAS3B,EAAgB,CACxB,GAAG+B,EAAO,UAAY,EAAiB,OACvC,MAAMS,EAAM,KAAK,OAAO,GAAGxC,CAAI,EACxB+B,EAAA,KAAK,EAAiBS,CAAG,EAChC,QAAQ,MAAMZ,EAAc,IAAMY,EAAMb,EAAW,KAAK,CACzD,CACD,EAtDC7B,EADYiC,EACL,YAAuB,GADxB,IAAMU,EAANV,EC3DS,SAAAW,EAAWT,EAAcU,EAAiB,CACzD,OAAOV,EAAK,OAASA,EAAK,WAAWU,EAAS,EAAE,EAAE,MACnD,CAEO,SAASC,EAAUV,EAAgB,CAClC,OAAA,MAAMA,CAAM,EAAE,KAAK,IAAI,EAAE,IAAI,IAAM,KAAK,MAAM,KAAK,OAAO,EAAI,EAAG,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,CAChG,CAMA,MAAMW,EAAc,uDAMdC,EAAc,aAKdC,EAAc,qCAKdC,GAAYH,EAAcC,EAAcC,EAEvC,SAASE,GAAkBC,EAAgB,CAC3C,MAAAC,EAAQ,yCAAyC,KAAKD,CAAM,EAClE,GAAG,CAACC,EAAO,MAAM,IAAI,MAAM,4BAA4BD,CAAM,EAAE,EAC/D,MAAO,GAAGC,EAAM,CAAC,GAAK,EAAE,KAAKA,EAAM,CAAC,CAAC,KAAKA,EAAM,CAAC,CAAC,IAAIA,EAAM,CAAC,CAAC,GAAG,MAClE,CAgBgB,SAAAC,GAASnF,EAAgBuE,EAAaa,EAAuB,CAC5E,MAAO,GAAGpF,EAAO,MAAM,EAAGoF,CAAK,CAAC,GAAGb,CAAG,GAAGvE,EAAO,MAAMoF,EAAQ,CAAC,CAAC,EACjE,CAEO,SAASC,GAAIrB,EAAWC,EAAgBC,EAAcoB,EAAQ,GAAM,CACpE,MAAAlB,EAAIJ,EAAK,WACThC,EAAIiC,EAASG,EAAE,OACrB,GAAGpC,GAAK,EAAU,OAAAoC,EAClB,MAAMC,EAAU,MAAM,CAAC,EAAErC,EAAIkC,EAAK,OAAO,EAAE,KAAKA,CAAI,EAAE,KAAK,EAAE,EACtD,OAAAoB,EAAQjB,EAAUD,EAAIA,EAAIC,CAClC,CAegB,SAAAkB,GAAatB,EAAgBuB,EAAeT,GAAmB,CAC9E,OAAO,MAAMd,CAAM,EAAE,KAAK,IAAI,EAAE,IAAI,IAAM,CACzC,MAAMvC,EAAI,CAAC,EAAE,KAAK,OAAA,EAAW8D,EAAK,QAClC,OAAOA,EAAK9D,CAAC,CAAA,CACb,EAAE,KAAK,EAAE,CACX,CAiBO,SAAS+D,GAAoBxB,EAAgByB,EAAU,GAAOC,EAAU,GAAOC,EAAU,GAAe,CAC9G,GAAG,CAACF,GAAW,CAACC,GAAW,CAACC,EAAe,MAAA,IAAI,MAAM,qDAAqD,EAC1G,OAAO,MAAM3B,CAAM,EAAE,KAAK,IAAI,EAAE,IAAI,IAAM,CACrC,IAAAT,EACD,EAAA,CACF,MAAMpD,EAAO,CAAC,EAAE,KAAK,OAAW,EAAA,GAC7BsF,GAAWtF,GAAQ,EACrBoD,EAAIoB,EAAY,CAAC,EAAE,KAAK,OAAO,EAAIA,EAAY,OAAO,EAC7Ce,GAAWvF,GAAQ,EAC5BoD,EAAIqB,EAAY,CAAC,EAAE,KAAK,OAAO,EAAIA,EAAY,OAAO,EAC7Ce,GAAWxF,GAAQ,IAC5BoD,EAAIsB,EAAY,CAAC,EAAE,KAAK,OAAO,EAAIA,EAAY,OAAO,SAEhD,CAACtB,GACF,OAAAA,CAAA,CACP,EAAE,KAAK,EAAE,CACX,CAWgB,SAAAqC,GAASxG,EAAeyG,EAA2C,CAM/E,GALA,OAAOA,GAAU,WACXA,EAAA,IAAI,OAAOA,EAAO,GAAG,GAI3B,CAACA,EAAM,OACH,MAAA,IAAI,UAAU,oCAAoC,EAGzD,IAAIC,EAAyB,CAAA,EACzBC,EACJ,MAAOA,EAAQF,EAAM,KAAKzG,CAAK,KAAO,MACrC0G,EAAI,KAAKC,CAAK,EAGR,OAAAD,CACR,CAOO,SAASE,EAAIC,EAAY,CAC3B,IAAAC,EAAIC,GAAEC,GAAEC,GAAEC,GAAEL,CAAC,EAAE,EAAEA,EAAE,MAAM,CAAC,CAAC,EAAE,OAAOC,EAAE,aAAa,CACvD,SAASC,GAAEF,EAAM,CAAS,QAAAM,EAAEC,EAAE,mBAAmBC,EAAE,GAAGP,EAAE,EAAEA,EAAED,EAAE,OAAOC,IAAIK,EAAEN,EAAE,WAAWC,CAAC,EAAEO,GAAGD,EAAE,OAAOD,IAAI,EAAE,EAAE,EAAEC,EAAE,OAAO,GAAGD,CAAC,EAAS,OAAAE,CAAC,CACxI,SAASH,GAAEL,EAAM,CAAS,QAAAM,EAAE,MAAMN,EAAE,QAAQ,CAAC,EAAEO,EAAE,EAAEA,EAAED,EAAE,OAAOC,IAAID,EAAEC,CAAC,EAAE,EAAE,IAAIA,EAAE,EAAEA,EAAE,EAAEP,EAAE,OAAOO,GAAG,EAAID,EAAAC,GAAG,CAAC,IAAI,IAAIP,EAAE,WAAWO,EAAE,CAAC,IAAIA,EAAE,GAAU,OAAAD,CAAC,CAClJ,SAASH,GAAEH,EAAM,CAAS,QAAAM,EAAE,GAAGC,EAAE,EAAEA,EAAE,GAAGP,EAAE,OAAOO,GAAG,EAAKD,GAAA,OAAO,aAAaN,EAAEO,GAAG,CAAC,IAAIA,EAAE,GAAG,GAAG,EAAS,OAAAD,CAAC,CACzG,SAASF,GAAEJ,EAAMM,EAAM,CAACN,EAAEM,GAAG,CAAC,GAAG,KAAKA,EAAE,GAAGN,EAAE,IAAIM,EAAE,KAAK,GAAG,EAAE,EAAEA,EAAE,QAAQC,EAAE,WAAWC,EAAE,WAAWP,EAAE,YAAY,EAAE,UAAUzE,EAAE,EAAEA,EAAEwE,EAAE,OAAOxE,GAAG,GAAG,CAAC,IAAIiF,EAAEF,EAAErC,EAAEsC,EAAEE,EAAET,EAAEhG,EAAE,EAAIuG,EAAAG,EAAOH,EAAEG,EAAOH,EAAEG,EAAOH,EAAEG,EAAOH,EAAEI,EAAOJ,EAAEI,EAAOJ,EAAEI,EAAOJ,EAAEI,EAAOJ,EAAEK,EAAOL,EAAEK,EAAOL,EAAEK,EAAOL,EAAEK,EAAOL,EAAEM,EAAON,EAAEM,EAAON,EAAEM,EAAON,EAAEM,EAAON,EAAEP,EAAEa,EAAOb,EAAE,EAAEa,EAAO,EAAEP,EAAEO,EAAOP,EAAEC,EAAEP,EAAE,EAAED,EAAExE,EAAE,CAAC,EAAE,EAAE,UAAU,EAAEgF,EAAEP,EAAED,EAAExE,EAAE,CAAC,EAAE,GAAG,UAAU,EAAE+E,EAAEC,EAAER,EAAExE,EAAE,CAAC,EAAE,GAAG,SAAS,EAAE,EAAE+E,EAAEP,EAAExE,EAAE,CAAC,EAAE,GAAG,WAAW,EAAEyE,EAAEa,EAAOb,EAAE,EAAEa,EAAO,EAAEP,EAAEO,EAAOP,EAAEC,EAAEP,EAAE,EAAED,EAAExE,EAAE,CAAC,EAAE,EAAE,UAAU,EAAEgF,EAAEP,EAAED,EAAExE,EAAE,CAAC,EAAE,GAAG,UAAU,EAAE+E,EAAEC,EAAER,EAAExE,EAAE,CAAC,EAAE,GAAG,WAAW,EAAE,EAAE+E,EAAEP,EAAExE,EAAE,CAAC,EAAE,GAAG,SAAS,EAAEyE,EAAEa,EAAOb,EAAE,EAAEa,EAAO,EAAEP,EAAEO,EAAOP,EAAEC,EAAEP,EAAE,EAAED,EAAExE,EAAE,CAAC,EAAE,EAAE,UAAU,EAAEgF,EAAEP,EAAED,EAAExE,EAAE,CAAC,EAAE,GAAG,WAAW,EAAE+E,EAAEC,EAAER,EAAExE,EAAE,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE+E,EAAEP,EAAExE,EAAE,EAAE,EAAE,GAAG,WAAW,EAAEyE,EAAEa,EAAOb,EAAE,EAAEa,EAAO,EAAEP,EAAEO,EAAOP,EAAEC,EAAEP,EAAE,EAAED,EAAExE,EAAE,EAAE,EAAE,EAAE,UAAU,EAAEgF,EAAEP,EAAED,EAAExE,EAAE,EAAE,EAAE,GAAG,SAAS,EAAE+E,EAAEC,EAAER,EAAExE,EAAE,EAAE,EAAE,GAAG,WAAW,EAAE,EAAE+E,EAAEP,EAAExE,EAAE,EAAE,EAAE,GAAG,UAAU,EAAEyE,EAAEY,EAAOZ,EAAE,EAAEY,EAAO,EAAEN,EAAEM,EAAON,EAAEC,EAAEP,EAAE,EAAED,EAAExE,EAAE,CAAC,EAAE,EAAE,UAAU,EAAEgF,EAAEP,EAAED,EAAExE,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE+E,EAAEC,EAAER,EAAExE,EAAE,EAAE,EAAE,GAAG,SAAS,EAAE,EAAE+E,EAAEP,EAAExE,EAAE,CAAC,EAAE,GAAG,UAAU,EAAEyE,EAAEY,EAAOZ,EAAE,EAAEY,EAAO,EAAEN,EAAEM,EAAON,EAAEC,EAAEP,EAAE,EAAED,EAAExE,EAAE,CAAC,EAAE,EAAE,UAAU,EAAEgF,EAAEP,EAAED,EAAExE,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE+E,EAAEC,EAAER,EAAExE,EAAE,EAAE,EAAE,GAAG,UAAU,EAAE,EAAE+E,EAAEP,EAAExE,EAAE,CAAC,EAAE,GAAG,UAAU,EAAEyE,EAAEY,EAAOZ,EAAE,EAAEY,EAAO,EAAEN,EAAEM,EAAON,EAAEC,EAAEP,EAAE,EAAED,EAAExE,EAAE,CAAC,EAAE,EAAE,SAAS,EAAEgF,EAAEP,EAAED,EAAExE,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE+E,EAAEC,EAAER,EAAExE,EAAE,CAAC,EAAE,GAAG,UAAU,EAAE,EAAE+E,EAAEP,EAAExE,EAAE,CAAC,EAAE,GAAG,UAAU,EAAEyE,EAAEY,EAAOZ,EAAE,EAAEY,EAAO,EAAEN,EAAEM,EAAON,EAAEC,EAAEP,EAAE,EAAED,EAAExE,EAAE,EAAE,EAAE,EAAE,WAAW,EAAEgF,EAAEP,EAAED,EAAExE,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE+E,EAAEC,EAAER,EAAExE,EAAE,CAAC,EAAE,GAAG,UAAU,EAAE,EAAE+E,EAAEP,EAAExE,EAAE,EAAE,EAAE,GAAG,WAAW,EAAEyE,EAAEW,EAAOX,EAAE,EAAEW,EAAO,EAAEL,EAAEK,EAAOL,EAAEC,EAAEP,EAAE,EAAED,EAAExE,EAAE,CAAC,EAAE,EAAE,OAAO,EAAEgF,EAAEP,EAAED,EAAExE,EAAE,CAAC,EAAE,GAAG,WAAW,EAAE+E,EAAEC,EAAER,EAAExE,EAAE,EAAE,EAAE,GAAG,UAAU,EAAE,EAAE+E,EAAEP,EAAExE,EAAE,EAAE,EAAE,GAAG,SAAS,EAAEyE,EAAEW,EAAOX,EAAE,EAAEW,EAAO,EAAEL,EAAEK,EAAOL,EAAEC,EAAEP,EAAE,EAAED,EAAExE,EAAE,CAAC,EAAE,EAAE,WAAW,EAAEgF,EAAEP,EAAED,EAAExE,EAAE,CAAC,EAAE,GAAG,UAAU,EAAE+E,EAAEC,EAAER,EAAExE,EAAE,CAAC,EAAE,GAAG,UAAU,EAAE,EAAE+E,EAAEP,EAAExE,EAAE,EAAE,EAAE,GAAG,WAAW,EAAEyE,EAAEW,EAAOX,EAAE,EAAEW,EAAO,EAAEL,EAAEK,EAAOL,EAAEC,EAAEP,EAAE,EAAED,EAAExE,EAAE,EAAE,EAAE,EAAE,SAAS,EAAEgF,EAAEP,EAAED,EAAExE,EAAE,CAAC,EAAE,GAAG,UAAU,EAAE+E,EAAEC,EAAER,EAAExE,EAAE,CAAC,EAAE,GAAG,UAAU,EAAE,EAAE+E,EAAEP,EAAExE,EAAE,CAAC,EAAE,GAAG,QAAQ,EAAEyE,EAAEW,EAAOX,EAAE,EAAEW,EAAO,EAAEL,EAAEK,EAAOL,EAAEC,EAAEP,EAAE,EAAED,EAAExE,EAAE,CAAC,EAAE,EAAE,UAAU,EAAEgF,EAAEP,EAAED,EAAExE,EAAE,EAAE,EAAE,GAAG,UAAU,EAAE+E,EAAEC,EAAER,EAAExE,EAAE,EAAE,EAAE,GAAG,SAAS,EAAE,EAAE+E,EAAEP,EAAExE,EAAE,CAAC,EAAE,GAAG,UAAU,EAAEyE,EAAEU,EAAOV,EAAE,EAAEU,EAAO,EAAEJ,EAAEI,EAAOJ,EAAEC,EAAEP,EAAE,EAAED,EAAExE,EAAE,CAAC,EAAE,EAAE,UAAU,EAAEgF,EAAEP,EAAED,EAAExE,EAAE,CAAC,EAAE,GAAG,UAAU,EAAE+E,EAAEC,EAAER,EAAExE,EAAE,EAAE,EAAE,GAAG,WAAW,EAAE,EAAE+E,EAAEP,EAAExE,EAAE,CAAC,EAAE,GAAG,SAAS,EAAEyE,EAAEU,EAAOV,EAAE,EAAEU,EAAO,EAAEJ,EAAEI,EAAOJ,EAAEC,EAAEP,EAAE,EAAED,EAAExE,EAAE,EAAE,EAAE,EAAE,UAAU,EAAEgF,EAAEP,EAAED,EAAExE,EAAE,CAAC,EAAE,GAAG,WAAW,EAAE+E,EAAEC,EAAER,EAAExE,EAAE,EAAE,EAAE,GAAG,QAAQ,EAAE,EAAE+E,EAAEP,EAAExE,EAAE,CAAC,EAAE,GAAG,WAAW,EAAEyE,EAAEU,EAAOV,EAAE,EAAEU,EAAO,EAAEJ,EAAEI,EAAOJ,EAAEC,EAAEP,EAAE,EAAED,EAAExE,EAAE,CAAC,EAAE,EAAE,UAAU,EAAEgF,EAAEP,EAAED,EAAExE,EAAE,EAAE,EAAE,GAAG,SAAS,EAAE+E,EAAEC,EAAER,EAAExE,EAAE,CAAC,EAAE,GAAG,WAAW,EAAE,EAAE+E,EAAEP,EAAExE,EAAE,EAAE,EAAE,GAAG,UAAU,EAAEyE,EAAEU,EAAOV,EAAE,EAAEU,EAAO,EAAEJ,EAAEI,EAAOJ,EAAEC,EAAEP,EAAE,EAAED,EAAExE,EAAE,CAAC,EAAE,EAAE,UAAU,EAAEgF,EAAEP,EAAED,EAAExE,EAAE,EAAE,EAAE,GAAG,WAAW,EAAE+E,EAAEC,EAAER,EAAExE,EAAE,CAAC,EAAE,GAAG,SAAS,EAAE,EAAE+E,EAAEP,EAAExE,EAAE,CAAC,EAAE,GAAG,UAAU,EAAE+E,EAAEQ,EAASR,EAAEE,CAAC,EAAED,EAAEO,EAASP,EAAEtC,CAAC,EAAE+B,EAAEc,EAASd,EAAES,CAAC,EAAE,EAAEK,EAAS,EAAE9G,CAAC,CAAC,CAAC,OAAO,MAAMsG,EAAEC,EAAEP,EAAE,CAAC,CAAC,CAC1jF,SAASe,EAAQhB,EAAMM,EAAMC,EAAMC,EAAMP,EAAM,EAAM,CAAC,OAAOc,EAASE,GAAQF,EAASA,EAAST,EAAEN,CAAC,EAAEe,EAASP,EAAE,CAAC,CAAC,EAAEP,CAAC,EAAEM,CAAC,CAAC,CACzH,SAASO,EAAOd,EAAMM,EAAMC,EAAMC,EAAMP,EAAM,EAAMzE,EAAM,CAAQ,OAAAwF,EAAQV,EAAEC,EAAE,CAACD,EAAEE,EAAER,EAAEM,EAAEL,EAAE,EAAEzE,CAAC,CAAC,CAC7F,SAASqF,EAAOb,EAAMM,EAAMC,EAAMC,EAAMP,EAAM,EAAMzE,EAAM,CAAQ,OAAAwF,EAAQV,EAAEE,EAAED,EAAE,CAACC,EAAER,EAAEM,EAAEL,EAAE,EAAEzE,CAAC,CAAC,CAC7F,SAASoF,EAAOZ,EAAMM,EAAMC,EAAMC,EAAMP,EAAM,EAAMzE,EAAM,CAAQ,OAAAwF,EAAQV,EAAEC,EAAEC,EAAER,EAAEM,EAAEL,EAAE,EAAEzE,CAAC,CAAC,CAC1F,SAASmF,EAAOX,EAAMM,EAAMC,EAAMC,EAAMP,EAAM,EAAMzE,EAAM,CAAQ,OAAAwF,EAAQT,GAAGD,EAAE,CAACE,GAAGR,EAAEM,EAAEL,EAAE,EAAEzE,CAAC,CAAC,CAC7F,SAASuF,EAASf,EAAMM,EAAM,CAAK,IAAAC,GAAG,MAAMP,IAAI,MAAMM,GAAG,OAAON,GAAG,KAAKM,GAAG,KAAKC,GAAG,KAAK,GAAG,MAAMA,CAAC,CAClG,SAASU,GAAQjB,EAAMM,EAAM,CAAQ,OAAAN,GAAGM,EAAEN,IAAI,GAAGM,CAClD,CAQO,SAASY,GAAcC,EAAe,CACrC,MAAA,uEAAuE,KAAKA,CAAK,CACzF,CCnKO,SAASC,GAAWC,EAAmB,CACtC,OAAA,OAAO,QAAQA,CAAI,EAAE,IAAI,CAAC,CAACnI,EAAKC,CAAK,IAC3C,mBAAmBD,CAAG,EAAI,IAAM,mBAAwBC,CAAK,CAAA,EAC5D,KAAK,GAAG,CACX,CASgB,SAAAmI,GAASH,EAAeI,EAAI,KAAM,CACjD,OAAIJ,EACG,mCAAmCpB,EAAIoB,CAAK,CAAC,MAAMI,CAAG,GAD3C,EAEnB,CAmBO,SAASC,GAAUlF,EAAwB,CACjD,MAAMmF,EAAY,IAAI,OACrB,+KACA,IAAA,EAAM,KAAKnF,CAAG,EACToF,GAAyBD,GAAA,YAAAA,EAAW,SAAU,GAC9CE,EAAUD,EAAO,OAAO,MAAM,GAAG,EAMvC,GALGA,EAAO,MAAW,OAAaA,EAAA,KAAO,OAAOA,EAAO,IAAI,GACxDC,EAAQ,OAAS,IACnBD,EAAO,OAASC,EAAQ,OAAO,GAAI,CAAC,EAAE,KAAK,GAAG,EACvCD,EAAA,UAAYC,EAAQ,KAAK,GAAG,GAEjCD,EAAO,MAAO,CAChB,MAAME,EAAcF,EAAO,MAAO,MAAM,GAAG,EAAGG,EAAa,GACrDD,EAAA,QAASE,GAAW,CACzB,KAAM,CAAC5I,EAAK6I,CAAG,EAAID,EAAE,MAAM,GAAG,EAC9BD,EAAM3I,CAAG,EAAI6I,CAAA,CACb,EACDL,EAAO,MAAQG,CAChB,CACO,OAAAH,CACR,CCzDO,SAASM,GAAUC,EAA6B,CAC9C,OAAAA,aAAgB,KAAOA,EAAK,QAAA,EAAYA,GAAS,IAAI,OAAQ,SACtE,CAiBO,SAASC,GAAMC,EAAY,CACjC,OAAO,IAAI,QAAQlG,GAAO,WAAWA,EAAKkG,CAAE,CAAC,CAC9C,CAEO,SAASC,GAAWH,EAA8B,CACxD,MAAMjC,EAAIiC,aAAgB,KAAOA,EAAO,IAAI,KAAKA,CAAI,EAC9C,OAAA,IAAI,KAAK,eAAe,QAAS,CACvC,QAAS,OACT,MAAO,QACP,IAAK,UACL,KAAM,UACN,OAAQ,UACR,OAAQ,EAAA,CACR,EAAE,OAAOjC,CAAC,CACZ"}
@@ -0,0 +1,456 @@
1
+ declare module "objects" {
2
+ /**
3
+ * Removes any null values from an object in-place
4
+ *
5
+ * @example
6
+ * ```ts
7
+ * let test = {a: 0, b: false, c: null, d: 'abc'}
8
+ * console.log(clean(test)); // Output: {a: 0, b: false, d: 'abc'}
9
+ * ```
10
+ *
11
+ * @param {T} obj Object reference that will be cleaned
12
+ * @param undefinedOnly Ignore null values
13
+ * @returns {Partial<T>} Cleaned object
14
+ */
15
+ export function clean<T>(obj: T, undefinedOnly?: boolean): Partial<T>;
16
+ /**
17
+ * Create a deep copy of an object (vs. a shallow copy of references)
18
+ *
19
+ * Should be replaced by `structuredClone` once released.
20
+ *
21
+ * @param {T} value Object to copy
22
+ * @returns {T} Type
23
+ */
24
+ export function deepCopy<T>(value: T): T;
25
+ /**
26
+ * Get/set a property of an object using dot notation
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * // Get a value
31
+ * const name = dotNotation<string>(person, 'firstName');
32
+ * const familyCarMake = dotNotation(family, 'cars[0].make');
33
+ * // Set a value
34
+ * dotNotation(family, 'cars[0].make', 'toyota');
35
+ * ```
36
+ *
37
+ * @type T Return type
38
+ * @param {Object} obj source object to search
39
+ * @param {string} prop property name (Dot notation & indexing allowed)
40
+ * @param {any} set Set object property to value, omit to fetch value instead
41
+ * @return {T} property value
42
+ */
43
+ export function dotNotation<T>(obj: any, prop: string, set: T): T;
44
+ export function dotNotation<T>(obj: any, prop: string): T | undefined;
45
+ /**
46
+ * Recursively flatten a nested object, while maintaining key structure.
47
+ *
48
+ * @example
49
+ * ```ts
50
+ * const car = {honda: {model: "Civic"}};
51
+ * console.log(flattenObj(car)); //Output {honda.model: "Civic"}
52
+ * ```
53
+ *
54
+ * @param obj - Object to flatten
55
+ * @param parent - Recursively check if key is a parent key or not
56
+ * @param result - Result
57
+ * @returns {object} - Flattened object
58
+ */
59
+ export function flattenObj(obj: any, parent?: any, result?: any): any;
60
+ /**
61
+ * Check that an object has the following values
62
+ *
63
+ * @example
64
+ * ```ts
65
+ * const test = {a: 2, b: 2};
66
+ * includes(test, {a: 1}); // true
67
+ * includes(test, {b: 1, c: 3}); // false
68
+ * ```
69
+ *
70
+ * @param target Object to search
71
+ * @param values Criteria to check against
72
+ * @param allowMissing Only check the keys that are available on the target
73
+ * @returns {boolean} Does target include all the values
74
+ */
75
+ export function includes(target: any, values: any, allowMissing?: boolean): boolean;
76
+ /**
77
+ * Deep check if two objects are equal
78
+ *
79
+ * @param {any} a - first item to compare
80
+ * @param {any} b - second item to compare
81
+ * @returns {boolean} True if they match
82
+ */
83
+ export function isEqual(a: any, b: any): boolean;
84
+ }
85
+ declare module "array" {
86
+ export function addUnique<T>(array: T[], el: T): T[];
87
+ export function arrayDiff(a: any[], b: any[]): any[];
88
+ /**
89
+ * Provides a shorthand for sorting arrays of complex objects by a string property
90
+ *
91
+ * @example
92
+ * ```ts
93
+ * let arr = [{a: 'Apple', b: 123}, {a: 'Carrot', b: 789}, {a: 'banana', b: 456}];
94
+ * arr.sort(caseInsensitiveSort('a'));
95
+ * ```
96
+ *
97
+ * @param {string} prop - Name of property to use, supports dot notation
98
+ * @returns {(a, b) => (number)} - Function to handle sort (Meant to be passed to Array.prototype.sort or used in sortFn)
99
+ */
100
+ export function caseInsensitiveSort(prop: string): (a: any, b: any) => number;
101
+ /**
102
+ * Recursively flatten nested arrays
103
+ *
104
+ * @example
105
+ * ```ts
106
+ * const arr = [
107
+ * {label: null, url: '/'},
108
+ * {label: 'Model Admin', url: '/model-admin'},
109
+ * [
110
+ * {label: 'Elements', url: '/model-admin/elements'},
111
+ * {label: 'Example', url: null}
112
+ * ]
113
+ * ];
114
+ *
115
+ * console.log(flattenArr(arr));
116
+ * // Output:
117
+ * [
118
+ * {label: null, url: '/'},
119
+ * {label: 'Model Admin', url: '/model-admin'},
120
+ * {label: 'Elements', url: '/model-admin/elements'},
121
+ * {label: 'Example', url: null}
122
+ * ]
123
+ * ```
124
+ *
125
+ * @param {any[]} arr - n-dimensional array
126
+ * @param {any[]} result - Internal use only -- Keeps track of recursion
127
+ * @returns {any[]} - Flattened array
128
+ */
129
+ export function flattenArr(arr: any[], result?: any[]): any[];
130
+ /**
131
+ * Provides a shorthand for sorting arrays of complex objects
132
+ *
133
+ * @example
134
+ * ```ts
135
+ * let arr = [{a: {b: 2}}, {a: {b: 3}}, {a: {b: 1}}];
136
+ * arr.sort(sortByProp('a.b'));
137
+ * ```
138
+ *
139
+ * @param {string} prop - Name of property to use, supports dot notation
140
+ * @param {boolean} reverse - Reverse the order of the sort
141
+ * @returns {(a, b) => (number)} - Function to handle sort (Meant to be passed to Array.prototype.sort)
142
+ */
143
+ export function sortByProp(prop: string, reverse?: boolean): (a: any, b: any) => number;
144
+ export function findByProp(prop: string, value: any): (v: any) => boolean;
145
+ export function makeUnique(arr: any[]): any[];
146
+ /**
147
+ * Make sure value is an array, if it isn't wrap it in one.
148
+ * @param {T[] | T} value Value that should be an array
149
+ * @returns {T[]} Value in an array
150
+ */
151
+ export function makeArray<T>(value: T | T[]): T[];
152
+ }
153
+ declare module "emitter" {
154
+ export type Listener = (...args: any[]) => any;
155
+ export type TypedEvents = {
156
+ [k in string | symbol]: Listener;
157
+ } & {
158
+ '*': (event: string, ...args: any[]) => any;
159
+ };
160
+ export class TypedEmitter<T extends TypedEvents = TypedEvents> {
161
+ private static listeners;
162
+ private listeners;
163
+ static emit(event: any, ...args: any[]): void;
164
+ static off(event: any, listener: Listener): void;
165
+ static on(event: any, listener: Listener): () => void;
166
+ static once(event: any, listener?: Listener): Promise<any>;
167
+ emit<K extends keyof T>(event: K, ...args: Parameters<T[K]>): void;
168
+ off<K extends keyof T = string>(event: K, listener: T[K]): void;
169
+ on<K extends keyof T = string>(event: K, listener: T[K]): () => void;
170
+ once<K extends keyof T = string>(event: K, listener?: T[K]): Promise<any>;
171
+ }
172
+ }
173
+ declare module "xhr" {
174
+ import { TypedEmitter, type TypedEvents } from "emitter";
175
+ export type Interceptor = (request: Response, next: () => void) => void;
176
+ export type RequestOptions = {
177
+ url?: string;
178
+ method?: 'GET' | 'POST' | 'PATCH' | 'DELETE';
179
+ body?: any;
180
+ headers?: {
181
+ [key: string | symbol]: string | null | undefined;
182
+ };
183
+ [key: string]: any;
184
+ };
185
+ export type XhrEvents = TypedEvents & {
186
+ 'REQUEST': (request: Promise<any>, options: RequestOptions) => any;
187
+ 'RESPONSE': (response: Response, options: RequestOptions) => any;
188
+ 'REJECTED': (response: Error, options: RequestOptions) => any;
189
+ };
190
+ export type XhrOptions = {
191
+ interceptors?: Interceptor[];
192
+ url?: string;
193
+ };
194
+ export class XHR extends TypedEmitter<XhrEvents> {
195
+ readonly opts: XhrOptions;
196
+ private static headers;
197
+ private static interceptors;
198
+ private headers;
199
+ private interceptors;
200
+ constructor(opts?: XhrOptions);
201
+ static addInterceptor(fn: Interceptor): () => void;
202
+ addInterceptor(fn: Interceptor): () => void;
203
+ request<T>(opts?: RequestOptions): Promise<T>;
204
+ }
205
+ }
206
+ declare module "errors" {
207
+ export class CustomError extends Error {
208
+ static code: number;
209
+ private _code?;
210
+ get code(): number;
211
+ set code(c: number);
212
+ constructor(message?: string, code?: number);
213
+ static from(err: Error): CustomError;
214
+ static instanceof(err: Error): boolean;
215
+ toString(): string;
216
+ }
217
+ export class BadRequestError extends CustomError {
218
+ static code: number;
219
+ constructor(message?: string);
220
+ static instanceof(err: Error): boolean;
221
+ }
222
+ export class UnauthorizedError extends CustomError {
223
+ static code: number;
224
+ constructor(message?: string);
225
+ static instanceof(err: Error): boolean;
226
+ }
227
+ export class ForbiddenError extends CustomError {
228
+ static code: number;
229
+ constructor(message?: string);
230
+ static instanceof(err: Error): boolean;
231
+ }
232
+ export class NotFoundError extends CustomError {
233
+ static code: number;
234
+ constructor(message?: string);
235
+ static instanceof(err: Error): boolean;
236
+ }
237
+ export class InternalServerError extends CustomError {
238
+ static code: number;
239
+ constructor(message?: string);
240
+ static instanceof(err: Error): boolean;
241
+ }
242
+ }
243
+ declare module "logger" {
244
+ import { TypedEmitter, TypedEvents } from "emitter";
245
+ export const CliEffects: {
246
+ CLEAR: string;
247
+ BRIGHT: string;
248
+ DIM: string;
249
+ UNDERSCORE: string;
250
+ BLINK: string;
251
+ REVERSE: string;
252
+ HIDDEN: string;
253
+ };
254
+ export const CliForeground: {
255
+ BLACK: string;
256
+ RED: string;
257
+ GREEN: string;
258
+ YELLOW: string;
259
+ BLUE: string;
260
+ MAGENTA: string;
261
+ CYAN: string;
262
+ LIGHT_GREY: string;
263
+ GREY: string;
264
+ LIGHT_RED: string;
265
+ LIGHT_GREEN: string;
266
+ LIGHT_YELLOW: string;
267
+ LIGHT_BLUE: string;
268
+ LIGHT_MAGENTA: string;
269
+ LIGHT_CYAN: string;
270
+ WHITE: string;
271
+ };
272
+ export const CliBackground: {
273
+ BLACK: string;
274
+ RED: string;
275
+ GREEN: string;
276
+ YELLOW: string;
277
+ BLUE: string;
278
+ MAGENTA: string;
279
+ CYAN: string;
280
+ WHITE: string;
281
+ GREY: string;
282
+ };
283
+ export enum LOG_LEVEL {
284
+ ERROR = 0,
285
+ WARN = 1,
286
+ INFO = 2,
287
+ LOG = 3,
288
+ DEBUG = 4
289
+ }
290
+ export type LoggerEvents = TypedEvents & {
291
+ 'ERROR': (...args: any[]) => any;
292
+ 'WARN': (...args: any[]) => any;
293
+ 'INFO': (...args: any[]) => any;
294
+ 'LOG': (...args: any[]) => any;
295
+ 'DEBUG': (...args: any[]) => any;
296
+ };
297
+ export class Logger extends TypedEmitter<LoggerEvents> {
298
+ readonly namespace?: string | undefined;
299
+ static LOG_LEVEL: LOG_LEVEL;
300
+ constructor(namespace?: string | undefined);
301
+ private pad;
302
+ private format;
303
+ debug(...args: string[]): void;
304
+ log(...args: string[]): void;
305
+ info(...args: string[]): void;
306
+ warn(...args: string[]): void;
307
+ error(...args: string[]): void;
308
+ }
309
+ }
310
+ declare module "string" {
311
+ export function countChars(text: string, pattern: RegExp): number;
312
+ export function createHex(length: number): string;
313
+ export function formatPhoneNumber(number: string): string;
314
+ /**
315
+ * Insert a string into another string at a given position
316
+ *
317
+ * @example
318
+ * ```
319
+ * console.log(insertAt('Hello world!', ' glorious', 5);
320
+ * // Output: Hello glorious world!
321
+ * ```
322
+ *
323
+ * @param {string} target - Parent string you want to modify
324
+ * @param {string} str - Value that will be injected to parent
325
+ * @param {number} index - Position to inject string at
326
+ * @returns {string} - New string
327
+ */
328
+ export function insertAt(target: string, str: string, index: number): String;
329
+ export function pad(text: any, length: number, char: string, start?: boolean): any;
330
+ /**
331
+ * Generate a string of random characters.
332
+ *
333
+ * @example
334
+ * ```ts
335
+ * const random = randomString();
336
+ * const randomByte = randomString(8, "01")
337
+ * ```
338
+ *
339
+ * @param {number} length - length of generated string
340
+ * @param {string} pool - character pool to generate string from
341
+ * @return {string} generated string
342
+ */
343
+ export function randomString(length: number, pool?: string): string;
344
+ /**
345
+ * Generate a random string with fine control over letters, numbers & symbols
346
+ *
347
+ * @example
348
+ * ```ts
349
+ * const randomLetter = randomString(1, true);
350
+ * const randomChar = randomString(1, true, true, true);
351
+ * ```
352
+ *
353
+ * @param {number} length - length of generated string
354
+ * @param {boolean} letters - Add letters to pool
355
+ * @param {boolean} numbers - Add numbers to pool
356
+ * @param {boolean} symbols - Add symbols to pool
357
+ * @return {string} generated string
358
+ */
359
+ export function randomStringBuilder(length: number, letters?: boolean, numbers?: boolean, symbols?: boolean): string;
360
+ /**
361
+ * Find all substrings that match a given pattern.
362
+ *
363
+ * Roughly based on `String.prototype.matchAll`.
364
+ *
365
+ * @param {string} value - String to search.
366
+ * @param {RegExp | string} regex - Regular expression to match.
367
+ * @return {RegExpExecArray[]} Found matches.
368
+ */
369
+ export function matchAll(value: string, regex: RegExp | string): RegExpExecArray[];
370
+ /**
371
+ * Create MD5 hash using native javascript
372
+ * @param d String to hash
373
+ * @returns {string} Hashed string
374
+ */
375
+ export function md5(d: string): string;
376
+ /**
377
+ * Check if email is valid
378
+ *
379
+ * @param {string} email - Target
380
+ * @returns {boolean} - Follows format
381
+ */
382
+ export function validateEmail(email: string): boolean;
383
+ }
384
+ declare module "misc" {
385
+ /**
386
+ * Convert data into a form encoded format.
387
+ *
388
+ * @param {any} data - data to convert
389
+ * @returns {string} - Ecodeded form data
390
+ */
391
+ export function formEncode(data: any): string;
392
+ /**
393
+ * Get profile image from Gravatar
394
+ *
395
+ * @param {string} email Account email address
396
+ * @param {string} def Default image, can be a link or '404', see: https://docs.gravatar.com/general/images/
397
+ * @returns {string} Gravatar URL
398
+ */
399
+ export function gravatar(email: string, def?: string): string;
400
+ /** Parts of a URL */
401
+ export type ParsedUrl = {
402
+ protocol?: string;
403
+ subdomain?: string;
404
+ domain: string;
405
+ host: string;
406
+ port?: number;
407
+ path?: string;
408
+ query?: {
409
+ [name: string]: string;
410
+ };
411
+ fragment?: string;
412
+ };
413
+ /**
414
+ *
415
+ * @param {string} url
416
+ * @returns {RegExpExecArray}
417
+ */
418
+ export function urlParser(url: string): ParsedUrl;
419
+ }
420
+ declare module "time" {
421
+ /**
422
+ * Calculate the number of milliseconds until date/time
423
+ *
424
+ * @param {Date | number} date - Target
425
+ * @returns {number} - Number of milliseconds until target
426
+ */
427
+ export function timeUntil(date: Date | number): number;
428
+ /**
429
+ * Use in conjunction with `await` to pause an async script
430
+ *
431
+ * @example
432
+ * ```ts
433
+ * async () => {
434
+ * ...
435
+ * await sleep(1000) // Pause for 1 second
436
+ * ...
437
+ * }
438
+ * ```
439
+ *
440
+ * @param {number} ms - Time to pause for in milliseconds
441
+ * @returns {Promise<unknown>} - Resolves promise when it's time to resume
442
+ */
443
+ export function sleep(ms: number): Promise<unknown>;
444
+ export function formatDate(date: Date | number | string): string;
445
+ }
446
+ declare module "index" {
447
+ export * from "array";
448
+ export * from "emitter";
449
+ export * from "errors";
450
+ export * from "logger";
451
+ export * from "misc";
452
+ export * from "objects";
453
+ export * from "string";
454
+ export * from "time";
455
+ export * from "xhr";
456
+ }
package/dist/utils.mjs ADDED
@@ -0,0 +1,520 @@
1
+ var j = Object.defineProperty;
2
+ var H = (e, n, t) => n in e ? j(e, n, { enumerable: !0, configurable: !0, writable: !0, value: t }) : e[n] = t;
3
+ var f = (e, n, t) => (H(e, typeof n != "symbol" ? n + "" : n, t), t);
4
+ function W(e, n = !1) {
5
+ if (e == null)
6
+ throw new Error("Cannot clean a NULL value");
7
+ return Array.isArray(e) ? e = e.filter((t) => t != null) : Object.entries(e).forEach(([t, r]) => {
8
+ (n && r === void 0 || !n && r == null) && delete e[t];
9
+ }), e;
10
+ }
11
+ function et(e) {
12
+ return JSON.parse(JSON.stringify(e));
13
+ }
14
+ function R(e, n, t) {
15
+ if (!(e == null || !n))
16
+ return n.split(/[.[\]]/g).filter((r) => r.length).reduce((r, o, s, i) => {
17
+ if ((o[0] == '"' || o[0] == "'") && (o = o.slice(1, -1)), !(r != null && r.hasOwnProperty(o))) {
18
+ if (t == null)
19
+ return;
20
+ r[o] = {};
21
+ }
22
+ return t !== void 0 && s == i.length - 1 ? r[o] = t : r[o];
23
+ }, e);
24
+ }
25
+ function q(e, n, t = {}) {
26
+ if (typeof e == "object" && !Array.isArray(e)) {
27
+ for (const r of Object.keys(e)) {
28
+ const o = n ? n + "." + r : r;
29
+ typeof e[r] == "object" ? q(e[r], o, t) : t[o] = e[r];
30
+ }
31
+ return t;
32
+ }
33
+ }
34
+ function O(e, n, t = !1) {
35
+ if (e == null)
36
+ return t;
37
+ if (Array.isArray(n))
38
+ return n.findIndex((o, s) => !O(e[s], n[s], t)) == -1;
39
+ const r = typeof n;
40
+ return r != typeof e ? !1 : r == "object" ? Object.keys(n).find((o) => !O(e[o], n[o], t)) == null : r == "function" ? e.toString() == n.toString() : e == n;
41
+ }
42
+ function p(e, n) {
43
+ const t = typeof e, r = typeof n;
44
+ return t != "object" || e == null || r != "object" || n == null ? t == "function" && r == "function" ? e.toString() == n.toString() : e === n : Object.keys(e).length != Object.keys(n).length ? !1 : Object.keys(e).every((s) => p(e[s], n[s]));
45
+ }
46
+ function nt(e, n) {
47
+ return e.indexOf(n) === -1 && e.push(n), e;
48
+ }
49
+ function rt(e, n) {
50
+ return v([
51
+ ...e.filter((t) => !n.includes((r) => p(t, r))),
52
+ ...n.filter((t) => !e.includes((r) => p(t, r)))
53
+ ]);
54
+ }
55
+ function ot(e) {
56
+ return function(n, t) {
57
+ const r = R(n, e), o = R(t, e);
58
+ return typeof r != "string" || typeof o != "string" ? 1 : r.toLowerCase().localeCompare(o.toLowerCase());
59
+ };
60
+ }
61
+ function P(e, n = []) {
62
+ return e.forEach((t) => Array.isArray(t) ? P(t, n) : n.push(t)), n;
63
+ }
64
+ function st(e, n = !1) {
65
+ return function(t, r) {
66
+ const o = R(t, e), s = R(r, e);
67
+ return typeof o == "number" && typeof s == "number" ? (n ? -1 : 1) * (o - s) : o > s ? n ? -1 : 1 : o < s ? n ? 1 : -1 : 0;
68
+ };
69
+ }
70
+ function it(e, n) {
71
+ return (t) => p(t[e], n);
72
+ }
73
+ function v(e) {
74
+ for (let n = e.length - 1; n >= 0; n--)
75
+ e.slice(0, n).find((t) => p(t, e[n])) && e.splice(n, 1);
76
+ return e;
77
+ }
78
+ function ct(e) {
79
+ return Array.isArray(e) ? e : [e];
80
+ }
81
+ class N {
82
+ constructor() {
83
+ f(this, "listeners", {});
84
+ }
85
+ static emit(n, ...t) {
86
+ (this.listeners["*"] || []).forEach((r) => r(n, ...t)), (this.listeners[n.toString()] || []).forEach((r) => r(...t));
87
+ }
88
+ static off(n, t) {
89
+ const r = n.toString();
90
+ this.listeners[r] = (this.listeners[r] || []).filter((o) => o === t);
91
+ }
92
+ static on(n, t) {
93
+ var o;
94
+ const r = n.toString();
95
+ return this.listeners[r] || (this.listeners[r] = []), (o = this.listeners[r]) == null || o.push(t), () => this.off(n, t);
96
+ }
97
+ static once(n, t) {
98
+ return new Promise((r) => {
99
+ const o = this.on(n, (...s) => {
100
+ r(s.length == 1 ? s[0] : s), t && t(...s), o();
101
+ });
102
+ });
103
+ }
104
+ emit(n, ...t) {
105
+ (this.listeners["*"] || []).forEach((r) => r(n, ...t)), (this.listeners[n] || []).forEach((r) => r(...t));
106
+ }
107
+ off(n, t) {
108
+ this.listeners[n] = (this.listeners[n] || []).filter((r) => r === t);
109
+ }
110
+ on(n, t) {
111
+ var r;
112
+ return this.listeners[n] || (this.listeners[n] = []), (r = this.listeners[n]) == null || r.push(t), () => this.off(n, t);
113
+ }
114
+ once(n, t) {
115
+ return new Promise((r) => {
116
+ const o = this.on(n, (...s) => {
117
+ r(s.length == 1 ? s[0] : s), t && t(...s), o();
118
+ });
119
+ });
120
+ }
121
+ }
122
+ f(N, "listeners", {});
123
+ const g = class g extends N {
124
+ constructor(t = {}) {
125
+ super();
126
+ f(this, "headers", {});
127
+ f(this, "interceptors", {});
128
+ this.opts = t, t.interceptors && t.interceptors.forEach((r) => g.addInterceptor(r));
129
+ }
130
+ static addInterceptor(t) {
131
+ const r = Object.keys(g.interceptors).length.toString();
132
+ return g.interceptors[r] = t, () => {
133
+ g.interceptors[r] = null;
134
+ };
135
+ }
136
+ addInterceptor(t) {
137
+ const r = Object.keys(this.interceptors).length.toString();
138
+ return this.interceptors[r] = t, () => {
139
+ this.interceptors[r] = null;
140
+ };
141
+ }
142
+ async request(t = {}) {
143
+ var i, y;
144
+ if (!this.opts.url && !t.url)
145
+ throw new Error("Momentum server URL needs to be set");
146
+ const r = ((i = t.url) != null && i.startsWith("http") ? t.url : (this.opts.url || "") + t.url).replace(/([^:]\/)\/+/g, "$1"), o = W({
147
+ "Content-Type": t.body && !(t.body instanceof FormData) ? "application/json" : void 0,
148
+ ...g.headers,
149
+ ...this.headers,
150
+ ...t.headers
151
+ }), s = fetch(r, {
152
+ headers: o,
153
+ method: t.method || (t.body ? "POST" : "GET"),
154
+ body: (y = o["Content-Type"]) != null && y.startsWith("application/json") && t.body ? JSON.stringify(t.body) : t.body
155
+ }).then(async (c) => {
156
+ var m, A;
157
+ for (let U of [...Object.values(g.interceptors), ...Object.values(this.interceptors)])
158
+ await new Promise((Y) => U(c, () => Y(null)));
159
+ if (this.emit(`${c.status}`, c, t), !c.ok)
160
+ throw Error(c.statusText);
161
+ return this.emit("RESPONSE", c, t), (m = c.headers.get("Content-Type")) != null && m.startsWith("application/json") ? await c.json() : (A = c.headers.get("Content-Type")) != null && A.startsWith("text/plain") ? await c.text() : c;
162
+ }).catch((c) => {
163
+ throw this.emit("REJECTED", c, t), c;
164
+ });
165
+ return this.emit("REQUEST", s, t), s;
166
+ }
167
+ };
168
+ f(g, "headers", {}), f(g, "interceptors", {});
169
+ let S = g;
170
+ S.addInterceptor((e, n) => {
171
+ if (e.status == 200)
172
+ return n();
173
+ throw e.status == 400 ? new b(e.statusText) : e.status == 401 ? new D(e.statusText) : e.status == 403 ? new G(e.statusText) : e.status == 404 ? new k(e.statusText) : e.status == 500 ? new M(e.statusText) : new w(e.statusText, e.status);
174
+ });
175
+ class w extends Error {
176
+ constructor(t, r) {
177
+ super(t);
178
+ f(this, "_code");
179
+ r != null && (this._code = r);
180
+ }
181
+ get code() {
182
+ return this._code || this.constructor.code;
183
+ }
184
+ set code(t) {
185
+ this._code = t;
186
+ }
187
+ static from(t) {
188
+ const r = Number(t.statusCode) ?? Number(t.code), o = new this(t.message || t.toString());
189
+ return Object.assign(o, {
190
+ stack: t.stack,
191
+ ...t,
192
+ code: r ?? void 0
193
+ });
194
+ }
195
+ static instanceof(t) {
196
+ return t.constructor.code != null;
197
+ }
198
+ toString() {
199
+ return this.message || super.toString();
200
+ }
201
+ }
202
+ f(w, "code", 500);
203
+ class b extends w {
204
+ constructor(n = "Bad Request") {
205
+ super(n);
206
+ }
207
+ static instanceof(n) {
208
+ return n.constructor.code == this.code;
209
+ }
210
+ }
211
+ f(b, "code", 400);
212
+ class D extends w {
213
+ constructor(n = "Unauthorized") {
214
+ super(n);
215
+ }
216
+ static instanceof(n) {
217
+ return n.constructor.code == this.code;
218
+ }
219
+ }
220
+ f(D, "code", 401);
221
+ class G extends w {
222
+ constructor(n = "Forbidden") {
223
+ super(n);
224
+ }
225
+ static instanceof(n) {
226
+ return n.constructor.code == this.code;
227
+ }
228
+ }
229
+ f(G, "code", 403);
230
+ class k extends w {
231
+ constructor(n = "Not Found") {
232
+ super(n);
233
+ }
234
+ static instanceof(n) {
235
+ return n.constructor.code == this.code;
236
+ }
237
+ }
238
+ f(k, "code", 404);
239
+ class M extends w {
240
+ constructor(n = "Internal Server Error") {
241
+ super(n);
242
+ }
243
+ static instanceof(n) {
244
+ return n.constructor.code == this.code;
245
+ }
246
+ }
247
+ f(M, "code", 500);
248
+ const x = {
249
+ CLEAR: "\x1B[0m",
250
+ BRIGHT: "\x1B[1m",
251
+ DIM: "\x1B[2m",
252
+ UNDERSCORE: "\x1B[4m",
253
+ BLINK: "\x1B[5m",
254
+ REVERSE: "\x1B[7m",
255
+ HIDDEN: "\x1B[8m"
256
+ }, B = {
257
+ BLACK: "\x1B[30m",
258
+ RED: "\x1B[31m",
259
+ GREEN: "\x1B[32m",
260
+ YELLOW: "\x1B[33m",
261
+ BLUE: "\x1B[34m",
262
+ MAGENTA: "\x1B[35m",
263
+ CYAN: "\x1B[36m",
264
+ LIGHT_GREY: "\x1B[37m",
265
+ GREY: "\x1B[90m",
266
+ LIGHT_RED: "\x1B[91m",
267
+ LIGHT_GREEN: "\x1B[92m",
268
+ LIGHT_YELLOW: "\x1B[93m",
269
+ LIGHT_BLUE: "\x1B[94m",
270
+ LIGHT_MAGENTA: "\x1B[95m",
271
+ LIGHT_CYAN: "\x1B[96m",
272
+ WHITE: "\x1B[97m"
273
+ }, ut = {
274
+ BLACK: "\x1B[40m",
275
+ RED: "\x1B[41m",
276
+ GREEN: "\x1B[42m",
277
+ YELLOW: "\x1B[43m",
278
+ BLUE: "\x1B[44m",
279
+ MAGENTA: "\x1B[45m",
280
+ CYAN: "\x1B[46m",
281
+ WHITE: "\x1B[47m",
282
+ GREY: "\x1B[100m"
283
+ };
284
+ var F = /* @__PURE__ */ ((e) => (e[e.ERROR = 0] = "ERROR", e[e.WARN = 1] = "WARN", e[e.INFO = 2] = "INFO", e[e.LOG = 3] = "LOG", e[e.DEBUG = 4] = "DEBUG", e))(F || {});
285
+ const E = class E extends N {
286
+ constructor(n) {
287
+ super(), this.namespace = n;
288
+ }
289
+ pad(n, t, r, o = !1) {
290
+ const s = n.toString(), i = t - s.length;
291
+ if (i <= 0)
292
+ return s;
293
+ const y = Array(~~(i / r.length)).fill(r).join("");
294
+ return o ? s + y : y + s;
295
+ }
296
+ format(...n) {
297
+ const t = /* @__PURE__ */ new Date();
298
+ return `${`${t.getFullYear()}-${t.getMonth() + 1}-${t.getDate()} ${this.pad(t.getHours().toString(), 2, "0")}:${this.pad(t.getMinutes().toString(), 2, "0")}:${this.pad(t.getSeconds().toString(), 2, "0")}.${this.pad(t.getMilliseconds().toString(), 3, "0", !0)}`}${this.namespace ? ` [${this.namespace}]` : ""} ${n.join(" ")}`;
299
+ }
300
+ debug(...n) {
301
+ if (E.LOG_LEVEL < 4)
302
+ return;
303
+ const t = this.format(...n);
304
+ E.emit(4, t), console.debug(B.LIGHT_GREY + t + x.CLEAR);
305
+ }
306
+ log(...n) {
307
+ if (E.LOG_LEVEL < 3)
308
+ return;
309
+ const t = this.format(...n);
310
+ E.emit(3, t), console.log(x.CLEAR + t);
311
+ }
312
+ info(...n) {
313
+ if (E.LOG_LEVEL < 2)
314
+ return;
315
+ const t = this.format(...n);
316
+ E.emit(2, t), console.info(B.BLUE + t + x.CLEAR);
317
+ }
318
+ warn(...n) {
319
+ if (E.LOG_LEVEL < 1)
320
+ return;
321
+ const t = this.format(...n);
322
+ E.emit(1, t), console.warn(B.YELLOW + t + x.CLEAR);
323
+ }
324
+ error(...n) {
325
+ if (E.LOG_LEVEL < 0)
326
+ return;
327
+ const t = this.format(...n);
328
+ E.emit(0, t), console.error(B.RED + t + x.CLEAR);
329
+ }
330
+ };
331
+ f(E, "LOG_LEVEL", 4);
332
+ let $ = E;
333
+ function at(e, n) {
334
+ return e.length - e.replaceAll(n, "").length;
335
+ }
336
+ function lt(e) {
337
+ return Array(e).fill(null).map(() => Math.round(Math.random() * 15).toString(16)).join("");
338
+ }
339
+ const C = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", L = "0123456789", I = "~`!@#$%^&*()_-+={[}]|\\:;\"'<,>.?/", z = C + L + I;
340
+ function ht(e) {
341
+ const n = /(\+?1)?.*?(\d{3}).*?(\d{3}).*?(\d{4})/g.exec(e);
342
+ if (!n)
343
+ throw new Error(`Number cannot be parsed: ${e}`);
344
+ return `${n[1] ?? ""} (${n[2]}) ${n[3]}-${n[4]}`.trim();
345
+ }
346
+ function ft(e, n, t) {
347
+ return `${e.slice(0, t)}${n}${e.slice(t + 1)}`;
348
+ }
349
+ function Et(e, n, t, r = !0) {
350
+ const o = e.toString(), s = n - o.length;
351
+ if (s <= 0)
352
+ return o;
353
+ const i = Array(~~(s / t.length)).fill(t).join("");
354
+ return r ? i + o : o + i;
355
+ }
356
+ function gt(e, n = z) {
357
+ return Array(e).fill(null).map(() => {
358
+ const t = ~~(Math.random() * n.length);
359
+ return n[t];
360
+ }).join("");
361
+ }
362
+ function yt(e, n = !1, t = !1, r = !1) {
363
+ if (!n && !t && !r)
364
+ throw new Error("Must enable at least one: letters, numbers, symbols");
365
+ return Array(e).fill(null).map(() => {
366
+ let o;
367
+ do {
368
+ const s = ~~(Math.random() * 3);
369
+ n && s == 0 ? o = C[~~(Math.random() * C.length)] : t && s == 1 ? o = L[~~(Math.random() * L.length)] : r && s == 2 && (o = I[~~(Math.random() * I.length)]);
370
+ } while (!o);
371
+ return o;
372
+ }).join("");
373
+ }
374
+ function dt(e, n) {
375
+ if (typeof n == "string" && (n = new RegExp(n, "g")), !n.global)
376
+ throw new TypeError("Regular expression must be global.");
377
+ let t = [], r;
378
+ for (; (r = n.exec(e)) !== null; )
379
+ t.push(r);
380
+ return t;
381
+ }
382
+ function J(e) {
383
+ var n = K(Z(Q(V(e), 8 * e.length)));
384
+ return n.toLowerCase();
385
+ }
386
+ function K(e) {
387
+ for (var n, t = "0123456789ABCDEF", r = "", o = 0; o < e.length; o++)
388
+ n = e.charCodeAt(o), r += t.charAt(n >>> 4 & 15) + t.charAt(15 & n);
389
+ return r;
390
+ }
391
+ function V(e) {
392
+ for (var n = Array(e.length >> 2), t = 0; t < n.length; t++)
393
+ n[t] = 0;
394
+ for (t = 0; t < 8 * e.length; t += 8)
395
+ n[t >> 5] |= (255 & e.charCodeAt(t / 8)) << t % 32;
396
+ return n;
397
+ }
398
+ function Z(e) {
399
+ for (var n = "", t = 0; t < 32 * e.length; t += 8)
400
+ n += String.fromCharCode(e[t >> 5] >>> t % 32 & 255);
401
+ return n;
402
+ }
403
+ function Q(e, n) {
404
+ e[n >> 5] |= 128 << n % 32, e[14 + (n + 64 >>> 9 << 4)] = n;
405
+ for (var t = 1732584193, r = -271733879, o = -1732584194, s = 271733878, i = 0; i < e.length; i += 16) {
406
+ var y = t, c = r, m = o, A = s;
407
+ r = h(r = h(r = h(r = h(r = l(r = l(r = l(r = l(r = a(r = a(r = a(r = a(r = u(r = u(r = u(r = u(r, o = u(o, s = u(s, t = u(t, r, o, s, e[i + 0], 7, -680876936), r, o, e[i + 1], 12, -389564586), t, r, e[i + 2], 17, 606105819), s, t, e[i + 3], 22, -1044525330), o = u(o, s = u(s, t = u(t, r, o, s, e[i + 4], 7, -176418897), r, o, e[i + 5], 12, 1200080426), t, r, e[i + 6], 17, -1473231341), s, t, e[i + 7], 22, -45705983), o = u(o, s = u(s, t = u(t, r, o, s, e[i + 8], 7, 1770035416), r, o, e[i + 9], 12, -1958414417), t, r, e[i + 10], 17, -42063), s, t, e[i + 11], 22, -1990404162), o = u(o, s = u(s, t = u(t, r, o, s, e[i + 12], 7, 1804603682), r, o, e[i + 13], 12, -40341101), t, r, e[i + 14], 17, -1502002290), s, t, e[i + 15], 22, 1236535329), o = a(o, s = a(s, t = a(t, r, o, s, e[i + 1], 5, -165796510), r, o, e[i + 6], 9, -1069501632), t, r, e[i + 11], 14, 643717713), s, t, e[i + 0], 20, -373897302), o = a(o, s = a(s, t = a(t, r, o, s, e[i + 5], 5, -701558691), r, o, e[i + 10], 9, 38016083), t, r, e[i + 15], 14, -660478335), s, t, e[i + 4], 20, -405537848), o = a(o, s = a(s, t = a(t, r, o, s, e[i + 9], 5, 568446438), r, o, e[i + 14], 9, -1019803690), t, r, e[i + 3], 14, -187363961), s, t, e[i + 8], 20, 1163531501), o = a(o, s = a(s, t = a(t, r, o, s, e[i + 13], 5, -1444681467), r, o, e[i + 2], 9, -51403784), t, r, e[i + 7], 14, 1735328473), s, t, e[i + 12], 20, -1926607734), o = l(o, s = l(s, t = l(t, r, o, s, e[i + 5], 4, -378558), r, o, e[i + 8], 11, -2022574463), t, r, e[i + 11], 16, 1839030562), s, t, e[i + 14], 23, -35309556), o = l(o, s = l(s, t = l(t, r, o, s, e[i + 1], 4, -1530992060), r, o, e[i + 4], 11, 1272893353), t, r, e[i + 7], 16, -155497632), s, t, e[i + 10], 23, -1094730640), o = l(o, s = l(s, t = l(t, r, o, s, e[i + 13], 4, 681279174), r, o, e[i + 0], 11, -358537222), t, r, e[i + 3], 16, -722521979), s, t, e[i + 6], 23, 76029189), o = l(o, s = l(s, t = l(t, r, o, s, e[i + 9], 4, -640364487), r, o, e[i + 12], 11, -421815835), t, r, e[i + 15], 16, 530742520), s, t, e[i + 2], 23, -995338651), o = h(o, s = h(s, t = h(t, r, o, s, e[i + 0], 6, -198630844), r, o, e[i + 7], 10, 1126891415), t, r, e[i + 14], 15, -1416354905), s, t, e[i + 5], 21, -57434055), o = h(o, s = h(s, t = h(t, r, o, s, e[i + 12], 6, 1700485571), r, o, e[i + 3], 10, -1894986606), t, r, e[i + 10], 15, -1051523), s, t, e[i + 1], 21, -2054922799), o = h(o, s = h(s, t = h(t, r, o, s, e[i + 8], 6, 1873313359), r, o, e[i + 15], 10, -30611744), t, r, e[i + 6], 15, -1560198380), s, t, e[i + 13], 21, 1309151649), o = h(o, s = h(s, t = h(t, r, o, s, e[i + 4], 6, -145523070), r, o, e[i + 11], 10, -1120210379), t, r, e[i + 2], 15, 718787259), s, t, e[i + 9], 21, -343485551), t = d(t, y), r = d(r, c), o = d(o, m), s = d(s, A);
408
+ }
409
+ return Array(t, r, o, s);
410
+ }
411
+ function T(e, n, t, r, o, s) {
412
+ return d(X(d(d(n, e), d(r, s)), o), t);
413
+ }
414
+ function u(e, n, t, r, o, s, i) {
415
+ return T(n & t | ~n & r, e, n, o, s, i);
416
+ }
417
+ function a(e, n, t, r, o, s, i) {
418
+ return T(n & r | t & ~r, e, n, o, s, i);
419
+ }
420
+ function l(e, n, t, r, o, s, i) {
421
+ return T(n ^ t ^ r, e, n, o, s, i);
422
+ }
423
+ function h(e, n, t, r, o, s, i) {
424
+ return T(t ^ (n | ~r), e, n, o, s, i);
425
+ }
426
+ function d(e, n) {
427
+ var t = (65535 & e) + (65535 & n);
428
+ return (e >> 16) + (n >> 16) + (t >> 16) << 16 | 65535 & t;
429
+ }
430
+ function X(e, n) {
431
+ return e << n | e >>> 32 - n;
432
+ }
433
+ function wt(e) {
434
+ return /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/.test(e);
435
+ }
436
+ function xt(e) {
437
+ return Object.entries(e).map(
438
+ ([n, t]) => encodeURIComponent(n) + "=" + encodeURIComponent(t)
439
+ ).join("&");
440
+ }
441
+ function pt(e, n = "mp") {
442
+ return e ? `https://www.gravatar.com/avatar/${J(e)}?d=${n}` : "";
443
+ }
444
+ function mt(e) {
445
+ const n = new RegExp(
446
+ "(?:(?<protocol>[\\w\\d]+)\\:\\/\\/)?(?:(?<user>.+)\\@)?(?<host>(?<domain>[^:\\/\\?#@\\n]+)(?:\\:(?<port>\\d*))?)(?<path>\\/.*?)?(?:\\?(?<query>.*?))?(?:#(?<fragment>.*?))?$",
447
+ "gm"
448
+ ).exec(e), t = (n == null ? void 0 : n.groups) ?? {}, r = t.domain.split(".");
449
+ if (t.port != null && (t.port = Number(t.port)), r.length > 2 && (t.domain = r.splice(-2, 2).join("."), t.subdomain = r.join(".")), t.query) {
450
+ const o = t.query.split("&"), s = {};
451
+ o.forEach((i) => {
452
+ const [y, c] = i.split("=");
453
+ s[y] = c;
454
+ }), t.query = s;
455
+ }
456
+ return t;
457
+ }
458
+ function At(e) {
459
+ return (e instanceof Date ? e.getTime() : e) - (/* @__PURE__ */ new Date()).getTime();
460
+ }
461
+ function Bt(e) {
462
+ return new Promise((n) => setTimeout(n, e));
463
+ }
464
+ function Rt(e) {
465
+ const n = e instanceof Date ? e : new Date(e);
466
+ return new Intl.DateTimeFormat("en-us", {
467
+ weekday: "long",
468
+ month: "short",
469
+ day: "numeric",
470
+ hour: "numeric",
471
+ minute: "numeric",
472
+ hour12: !0
473
+ }).format(n);
474
+ }
475
+ export {
476
+ b as BadRequestError,
477
+ ut as CliBackground,
478
+ x as CliEffects,
479
+ B as CliForeground,
480
+ w as CustomError,
481
+ G as ForbiddenError,
482
+ M as InternalServerError,
483
+ F as LOG_LEVEL,
484
+ $ as Logger,
485
+ k as NotFoundError,
486
+ N as TypedEmitter,
487
+ D as UnauthorizedError,
488
+ S as XHR,
489
+ nt as addUnique,
490
+ rt as arrayDiff,
491
+ ot as caseInsensitiveSort,
492
+ W as clean,
493
+ at as countChars,
494
+ lt as createHex,
495
+ et as deepCopy,
496
+ R as dotNotation,
497
+ it as findByProp,
498
+ P as flattenArr,
499
+ q as flattenObj,
500
+ xt as formEncode,
501
+ Rt as formatDate,
502
+ ht as formatPhoneNumber,
503
+ pt as gravatar,
504
+ O as includes,
505
+ ft as insertAt,
506
+ p as isEqual,
507
+ ct as makeArray,
508
+ v as makeUnique,
509
+ dt as matchAll,
510
+ J as md5,
511
+ Et as pad,
512
+ gt as randomString,
513
+ yt as randomStringBuilder,
514
+ Bt as sleep,
515
+ st as sortByProp,
516
+ At as timeUntil,
517
+ mt as urlParser,
518
+ wt as validateEmail
519
+ };
520
+ //# sourceMappingURL=utils.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.mjs","sources":["../src/objects.ts","../src/array.ts","../src/emitter.ts","../src/xhr.ts","../src/errors.ts","../src/logger.ts","../src/string.ts","../src/misc.ts","../src/time.ts"],"sourcesContent":["/**\r\n * Removes any null values from an object in-place\r\n *\r\n * @example\r\n * ```ts\r\n * let test = {a: 0, b: false, c: null, d: 'abc'}\r\n * console.log(clean(test)); // Output: {a: 0, b: false, d: 'abc'}\r\n * ```\r\n *\r\n * @param {T} obj Object reference that will be cleaned\r\n * @param undefinedOnly Ignore null values\r\n * @returns {Partial<T>} Cleaned object\r\n */\r\nexport function clean<T>(obj: T, undefinedOnly = false): Partial<T> {\r\n\tif(obj == null) throw new Error(\"Cannot clean a NULL value\");\r\n\tif(Array.isArray(obj)) {\r\n\t\tobj = <any>obj.filter(o => o != null);\r\n\t} else {\r\n\t\tObject.entries(obj).forEach(([key, value]) => {\r\n\t\t\tif((undefinedOnly && value === undefined) || (!undefinedOnly && value == null)) delete (<any>obj)[key];\r\n\t\t});\r\n\t}\r\n\treturn <any>obj;\r\n}\r\n\r\n/**\r\n * Create a deep copy of an object (vs. a shallow copy of references)\r\n *\r\n * Should be replaced by `structuredClone` once released.\r\n *\r\n * @param {T} value Object to copy\r\n * @returns {T} Type\r\n */\r\nexport function deepCopy<T>(value: T): T {\r\n\treturn JSON.parse(JSON.stringify(value));\r\n}\r\n\r\n/**\r\n * Get/set a property of an object using dot notation\r\n *\r\n * @example\r\n * ```ts\r\n * // Get a value\r\n * const name = dotNotation<string>(person, 'firstName');\r\n * const familyCarMake = dotNotation(family, 'cars[0].make');\r\n * // Set a value\r\n * dotNotation(family, 'cars[0].make', 'toyota');\r\n * ```\r\n *\r\n * @type T Return type\r\n * @param {Object} obj source object to search\r\n * @param {string} prop property name (Dot notation & indexing allowed)\r\n * @param {any} set Set object property to value, omit to fetch value instead\r\n * @return {T} property value\r\n */\r\nexport function dotNotation<T>(obj: any, prop: string, set: T): T;\r\nexport function dotNotation<T>(obj: any, prop: string): T | undefined;\r\nexport function dotNotation<T>(obj: any, prop: string, set?: T): T | undefined {\r\n\tif(obj == null || !prop) return undefined;\r\n\t// Split property string by '.' or [index]\r\n\treturn <T>prop.split(/[.[\\]]/g).filter(prop => prop.length).reduce((obj, prop, i, arr) => {\r\n\t\tif(prop[0] == '\"' || prop[0] == \"'\") prop = prop.slice(1, -1); // Take quotes out\r\n\t\tif(!obj?.hasOwnProperty(prop)) {\r\n\t\t\tif(set == undefined) return undefined;\r\n\t\t\tobj[prop] = {};\r\n\t\t}\r\n\t\tif(set !== undefined && i == arr.length - 1)\r\n\t\t\treturn obj[prop] = set;\r\n\t\treturn obj[prop];\r\n\t}, obj);\r\n}\r\n\r\n/**\r\n * Recursively flatten a nested object, while maintaining key structure.\r\n *\r\n * @example\r\n * ```ts\r\n * const car = {honda: {model: \"Civic\"}};\r\n * console.log(flattenObj(car)); //Output {honda.model: \"Civic\"}\r\n * ```\r\n *\r\n * @param obj - Object to flatten\r\n * @param parent - Recursively check if key is a parent key or not\r\n * @param result - Result\r\n * @returns {object} - Flattened object\r\n */\r\nexport function flattenObj(obj: any, parent?: any, result: any = {}) {\r\n\tif(typeof obj === \"object\" && !Array.isArray(obj)) {\r\n\t\tfor(const key of Object.keys(obj)) {\r\n\t\t\tconst propName = parent ? parent + '.' + key : key;\r\n\t\t\tif(typeof obj[key] === 'object') {\r\n\t\t\t\tflattenObj(obj[key], propName, result);\r\n\t\t\t} else {\r\n\t\t\t\tresult[propName] = obj[key];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn result;\r\n\t}\r\n}\r\n\r\n/**\r\n * Check that an object has the following values\r\n *\r\n * @example\r\n * ```ts\r\n * const test = {a: 2, b: 2};\r\n * includes(test, {a: 1}); // true\r\n * includes(test, {b: 1, c: 3}); // false\r\n * ```\r\n *\r\n * @param target Object to search\r\n * @param values Criteria to check against\r\n * @param allowMissing Only check the keys that are available on the target\r\n * @returns {boolean} Does target include all the values\r\n */\r\nexport function includes(target: any, values: any, allowMissing = false): boolean {\r\n\tif(target == undefined) return allowMissing;\r\n\tif(Array.isArray(values)) return values.findIndex((e: any, i: number) => !includes(target[i], values[i], allowMissing)) == -1;\r\n\tconst type = typeof values;\r\n\tif(type != typeof target) return false;\r\n\tif(type == 'object') {\r\n\t\treturn Object.keys(values).find(key => !includes(target[key], values[key], allowMissing)) == null;\r\n\t}\r\n\tif(type == 'function') return target.toString() == values.toString();\r\n\treturn target == values;\r\n}\r\n\r\n/**\r\n * Deep check if two objects are equal\r\n *\r\n * @param {any} a - first item to compare\r\n * @param {any} b - second item to compare\r\n * @returns {boolean} True if they match\r\n */\r\nexport function isEqual(a: any, b: any): boolean {\r\n\tconst ta = typeof a, tb = typeof b;\r\n\tif((ta != 'object' || a == null) || (tb != 'object' || b == null))\r\n\t\treturn ta == 'function' && tb == 'function' ? a.toString() == b.toString() : a === b;\r\n\tconst keys = Object.keys(a);\r\n\tif(keys.length != Object.keys(b).length) return false;\r\n\treturn Object.keys(a).every(key => isEqual(a[key], b[key]));\r\n}\r\n","import {dotNotation, isEqual} from './objects';\n\nexport function addUnique<T>(array: T[], el: T): T[] {\n\tif(array.indexOf(el) === -1) array.push(el);\n\treturn array;\n}\n\nexport function arrayDiff(a: any[], b: any[]): any[] {\n\treturn makeUnique([\n\t\t...a.filter(v1 => !b.includes((v2: any) => isEqual(v1, v2))),\n\t\t...b.filter(v1 => !a.includes((v2: any) => isEqual(v1, v2))),\n\t]);\n}\n\n/**\n * Provides a shorthand for sorting arrays of complex objects by a string property\n *\n * @example\n * ```ts\n * let arr = [{a: 'Apple', b: 123}, {a: 'Carrot', b: 789}, {a: 'banana', b: 456}];\n * arr.sort(caseInsensitiveSort('a'));\n * ```\n *\n * @param {string} prop - Name of property to use, supports dot notation\n * @returns {(a, b) => (number)} - Function to handle sort (Meant to be passed to Array.prototype.sort or used in sortFn)\n */\nexport function caseInsensitiveSort(prop: string) {\n\treturn function (a: any, b: any) {\n\t\tconst aVal = dotNotation<string>(a, prop);\n\t\tconst bVal = dotNotation<string>(b, prop);\n\t\tif(typeof aVal !== 'string' || typeof bVal !== 'string') return 1;\n\t\treturn aVal.toLowerCase().localeCompare(bVal.toLowerCase());\n\t};\n}\n\n/**\n * Recursively flatten nested arrays\n *\n * @example\n * ```ts\n * const arr = [\n * {label: null, url: '/'},\n * {label: 'Model Admin', url: '/model-admin'},\n * [\n * {label: 'Elements', url: '/model-admin/elements'},\n * {label: 'Example', url: null}\n * ]\n * ];\n *\n * console.log(flattenArr(arr));\n * // Output:\n * [\n * {label: null, url: '/'},\n * {label: 'Model Admin', url: '/model-admin'},\n * {label: 'Elements', url: '/model-admin/elements'},\n * {label: 'Example', url: null}\n * ]\n * ```\n *\n * @param {any[]} arr - n-dimensional array\n * @param {any[]} result - Internal use only -- Keeps track of recursion\n * @returns {any[]} - Flattened array\n */\nexport function flattenArr(arr: any[], result: any[] = []): any[] {\n\tarr.forEach(el => Array.isArray(el) ? flattenArr(el, result) : result.push(el));\n\treturn result;\n}\n\n/**\n * Provides a shorthand for sorting arrays of complex objects\n *\n * @example\n * ```ts\n * let arr = [{a: {b: 2}}, {a: {b: 3}}, {a: {b: 1}}];\n * arr.sort(sortByProp('a.b'));\n * ```\n *\n * @param {string} prop - Name of property to use, supports dot notation\n * @param {boolean} reverse - Reverse the order of the sort\n * @returns {(a, b) => (number)} - Function to handle sort (Meant to be passed to Array.prototype.sort)\n */\nexport function sortByProp(prop: string, reverse = false) {\n\treturn function (a: any, b: any) {\n\t\tconst aVal = dotNotation<any>(a, prop);\n\t\tconst bVal = dotNotation<any>(b, prop);\n\t\tif(typeof aVal == 'number' && typeof bVal == 'number')\n\t\t\treturn (reverse ? -1 : 1) * (aVal - bVal);\n\t\tif(aVal > bVal) return reverse ? -1 : 1;\n\t\tif(aVal < bVal) return reverse ? 1 : -1;\n\t\treturn 0;\n\t};\n}\n\nexport function findByProp(prop: string, value: any) {\n\treturn (v: any) => isEqual(v[prop], value);\n}\n\nexport function makeUnique(arr: any[]) {\n\tfor(let i = arr.length - 1; i >= 0; i--) {\n\t\tif(arr.slice(0, i).find(n => isEqual(n, arr[i]))) arr.splice(i, 1);\n\t}\n\treturn arr;\n}\n\n/**\n * Make sure value is an array, if it isn't wrap it in one.\n * @param {T[] | T} value Value that should be an array\n * @returns {T[]} Value in an array\n */\nexport function makeArray<T>(value: T | T[]): T[] {\n\treturn Array.isArray(value) ? value : [value];\n}\n","export type Listener = (...args: any[]) => any;\r\nexport type TypedEvents = {[k in string | symbol]: Listener} & {'*': (event: string, ...args: any[]) => any};\r\n\r\nexport class TypedEmitter<T extends TypedEvents = TypedEvents> {\r\n\tprivate static listeners: {[key: string]: Listener[]} = {};\r\n\r\n\tprivate listeners: { [key in keyof T]?: Listener[] } = {};\r\n\r\n\tstatic emit(event: any, ...args: any[]) {\r\n\t\t(this.listeners['*'] || []).forEach(l => l(event, ...args));\r\n\t\t(this.listeners[event.toString()] || []).forEach(l => l(...args));\r\n\t};\r\n\r\n\tstatic off(event: any, listener: Listener) {\r\n\t\tconst e = event.toString();\r\n\t\tthis.listeners[e] = (this.listeners[e] || []).filter(l => l === listener);\r\n\t}\r\n\r\n\tstatic on(event: any, listener: Listener) {\r\n\t\tconst e = event.toString();\r\n\t\tif(!this.listeners[e]) this.listeners[e] = [];\r\n\t\tthis.listeners[e]?.push(listener);\r\n\t\treturn () => this.off(event, listener);\r\n\t}\r\n\r\n\tstatic once(event: any, listener?: Listener): Promise<any> {\r\n\t\treturn new Promise(res => {\r\n\t\t\tconst unsubscribe = this.on(event, <any>((...args: any) => {\r\n\t\t\t\tres(args.length == 1 ? args[0] : args);\r\n\t\t\t\tif(listener) listener(...args);\r\n\t\t\t\tunsubscribe();\r\n\t\t\t}));\r\n\t\t});\r\n\t}\r\n\r\n\temit<K extends keyof T>(event: K, ...args: Parameters<T[K]>) {\r\n\t\t(this.listeners['*'] || []).forEach(l => l(event, ...args));\r\n\t\t(this.listeners[event] || []).forEach(l => l(...args));\r\n\t};\r\n\r\n\toff<K extends keyof T = string>(event: K, listener: T[K]) {\r\n\t\tthis.listeners[event] = (this.listeners[event] || []).filter(l => l === listener);\r\n\t}\r\n\r\n\ton<K extends keyof T = string>(event: K, listener: T[K]) {\r\n\t\tif(!this.listeners[event]) this.listeners[event] = [];\r\n\t\tthis.listeners[event]?.push(listener);\r\n\t\treturn () => this.off(event, listener);\r\n\t}\r\n\r\n\tonce<K extends keyof T = string>(event: K, listener?: T[K]): Promise<any> {\r\n\t\treturn new Promise(res => {\r\n\t\t\tconst unsubscribe = this.on(event, <any>((...args: any) => {\r\n\t\t\t\tres(args.length == 1 ? args[0] : args);\r\n\t\t\t\tif(listener) listener(...args);\r\n\t\t\t\tunsubscribe();\r\n\t\t\t}));\r\n\t\t});\r\n\t}\r\n}\r\n","import {TypedEmitter, type TypedEvents} from './emitter';\r\nimport {clean} from './objects';\r\n\r\nexport type Interceptor = (request: Response, next: () => void) => void;\r\n\r\nexport type RequestOptions = {\r\n\turl?: string;\r\n\tmethod?: 'GET' | 'POST' | 'PATCH' | 'DELETE';\r\n\tbody?: any;\r\n\theaders?: {[key: string | symbol]: string | null | undefined};\r\n\t[key: string]: any;\r\n}\r\n\r\nexport type XhrEvents = TypedEvents & {\r\n\t'REQUEST': (request: Promise<any>, options: RequestOptions) => any;\r\n\t'RESPONSE': (response: Response, options: RequestOptions) => any;\r\n\t'REJECTED': (response: Error, options: RequestOptions) => any;\r\n\r\n};\r\n\r\nexport type XhrOptions = {\r\n\tinterceptors?: Interceptor[];\r\n\turl?: string;\r\n}\r\n\r\nexport class XHR extends TypedEmitter<XhrEvents> {\r\n\tprivate static headers: {[key: string]: string} = {};\r\n\tprivate static interceptors: {[key: string]: Interceptor} = {};\r\n\r\n\tprivate headers: {[key: string]: string} = {}\r\n\tprivate interceptors: {[key: string]: Interceptor} = {}\r\n\r\n\tconstructor(public readonly opts: XhrOptions = {}) {\r\n\t\tsuper();\r\n\t\tif(opts.interceptors) {\r\n\t\t\topts.interceptors.forEach(i => XHR.addInterceptor(i));\r\n\t\t}\r\n\t}\r\n\r\n\tstatic addInterceptor(fn: Interceptor): () => void {\r\n\t\tconst key = Object.keys(XHR.interceptors).length.toString();\r\n\t\tXHR.interceptors[key] = fn;\r\n\t\treturn () => { XHR.interceptors[key] = <any>null; }\r\n\t}\r\n\r\n\taddInterceptor(fn: Interceptor): () => void {\r\n\t\tconst key = Object.keys(this.interceptors).length.toString();\r\n\t\tthis.interceptors[key] = fn;\r\n\t\treturn () => { this.interceptors[key] = <any>null; }\r\n\t}\r\n\r\n\tasync request<T>(opts: RequestOptions = {}): Promise<T> {\r\n\t\tif(!this.opts.url && !opts.url) throw new Error('Momentum server URL needs to be set');\r\n\t\tconst url = (opts.url?.startsWith('http') ? opts.url : (this.opts.url || '') + opts.url).replace(/([^:]\\/)\\/+/g, '$1');\r\n\r\n\t\t// Prep headers\r\n\t\tconst headers = <any>clean({\r\n\t\t\t'Content-Type': (opts.body && !(opts.body instanceof FormData)) ? 'application/json' : undefined,\r\n\t\t\t...XHR.headers,\r\n\t\t\t...this.headers,\r\n\t\t\t...opts.headers\r\n\t\t});\r\n\r\n\t\t// Send request\r\n\t\tconst req = fetch(url, {\r\n\t\t\theaders,\r\n\t\t\tmethod: opts.method || (opts.body ? 'POST' : 'GET'),\r\n\t\t\tbody: (headers['Content-Type']?.startsWith('application/json') && opts.body) ? JSON.stringify(opts.body) : opts.body\r\n\t\t}).then(async resp => {\r\n\t\t\tfor(let fn of [...Object.values(XHR.interceptors), ...Object.values(this.interceptors)]) {\r\n\t\t\t\tconst wait = new Promise(res => fn(resp, () => res(null)));\r\n\t\t\t\tawait wait;\r\n\t\t\t}\r\n\r\n\t\t\tthis.emit(`${resp.status}`, resp, opts);\r\n\t\t\tif(!resp.ok) throw Error(resp.statusText);\r\n\t\t\tthis.emit('RESPONSE', resp, opts);\r\n\t\t\tif(resp.headers.get('Content-Type')?.startsWith('application/json')) return await resp.json();\r\n\t\t\tif(resp.headers.get('Content-Type')?.startsWith('text/plain')) return await <any>resp.text();\r\n\t\t\treturn resp;\r\n\t\t}).catch((err: Error) => {\r\n\t\t\tthis.emit('REJECTED', err, opts);\r\n\t\t\tthrow err;\r\n\t\t});\r\n\t\tthis.emit('REQUEST', req, opts)\r\n\t\treturn req;\r\n\t}\r\n}\r\n","import {XHR} from './xhr';\r\n\r\nXHR.addInterceptor((resp: Response, next: () => void) => {\r\n\tif(resp.status == 200) return next();\r\n\tif(resp.status == 400) throw new BadRequestError(resp.statusText);\r\n\tif(resp.status == 401) throw new UnauthorizedError(resp.statusText);\r\n\tif(resp.status == 403) throw new ForbiddenError(resp.statusText);\r\n\tif(resp.status == 404) throw new NotFoundError(resp.statusText);\r\n\tif(resp.status == 500) throw new InternalServerError(resp.statusText);\r\n\tthrow new CustomError(resp.statusText, resp.status);\r\n});\r\n\r\nexport class CustomError extends Error {\r\n\tstatic code = 500;\r\n\r\n\tprivate _code?: number;\r\n\tget code(): number { return this._code || (<any>this).constructor.code; }\r\n\tset code(c: number) { this._code = c; }\r\n\r\n\tconstructor(message?: string, code?: number) {\r\n\t\tsuper(message);\r\n\t\tif(code != null) this._code = code;\r\n\t}\r\n\r\n\tstatic from(err: Error): CustomError {\r\n\t\tconst code = Number((<any>err).statusCode) ?? Number((<any>err).code);\r\n\t\tconst newErr = new this(err.message || err.toString());\r\n\t\treturn Object.assign(newErr, {\r\n\t\t\tstack: err.stack,\r\n\t\t\t...err,\r\n\t\t\tcode: code ?? undefined\r\n\t\t});\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code != undefined;\r\n\t}\r\n\r\n\ttoString() {\r\n\t\treturn this.message || super.toString();\r\n\t}\r\n}\r\n\r\nexport class BadRequestError extends CustomError {\r\n\tstatic code = 400;\r\n\r\n\tconstructor(message: string = 'Bad Request') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class UnauthorizedError extends CustomError {\r\n\tstatic code = 401;\r\n\r\n\tconstructor(message: string = 'Unauthorized') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class ForbiddenError extends CustomError {\r\n\tstatic code = 403;\r\n\r\n\tconstructor(message: string = 'Forbidden') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class NotFoundError extends CustomError {\r\n\tstatic code = 404;\r\n\r\n\tconstructor(message: string = 'Not Found') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class InternalServerError extends CustomError {\r\n\tstatic code = 500;\r\n\r\n\tconstructor(message: string = 'Internal Server Error') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n","import {TypedEmitter, TypedEvents} from './emitter';\r\n\r\nexport const CliEffects = {\r\n\tCLEAR: \"\\x1b[0m\",\r\n\tBRIGHT: \"\\x1b[1m\",\r\n\tDIM: \"\\x1b[2m\",\r\n\tUNDERSCORE: \"\\x1b[4m\",\r\n\tBLINK: \"\\x1b[5m\",\r\n\tREVERSE: \"\\x1b[7m\",\r\n\tHIDDEN: \"\\x1b[8m\",\r\n}\r\n\r\nexport const CliForeground = {\r\n\tBLACK: '\\x1b[30m',\r\n\tRED: '\\x1b[31m',\r\n\tGREEN: '\\x1b[32m',\r\n\tYELLOW: '\\x1b[33m',\r\n\tBLUE: '\\x1b[34m',\r\n\tMAGENTA: '\\x1b[35m',\r\n\tCYAN: '\\x1b[36m',\r\n\tLIGHT_GREY: '\\x1b[37m',\r\n\tGREY: '\\x1b[90m',\r\n\tLIGHT_RED: '\\x1b[91m',\r\n\tLIGHT_GREEN: '\\x1b[92m',\r\n\tLIGHT_YELLOW: '\\x1b[93m',\r\n\tLIGHT_BLUE: '\\x1b[94m',\r\n\tLIGHT_MAGENTA: '\\x1b[95m',\r\n\tLIGHT_CYAN: '\\x1b[96m',\r\n\tWHITE: '\\x1b[97m',\r\n}\r\n\r\nexport const CliBackground = {\r\n\tBLACK: \"\\x1b[40m\",\r\n\tRED: \"\\x1b[41m\",\r\n\tGREEN: \"\\x1b[42m\",\r\n\tYELLOW: \"\\x1b[43m\",\r\n\tBLUE: \"\\x1b[44m\",\r\n\tMAGENTA: \"\\x1b[45m\",\r\n\tCYAN: \"\\x1b[46m\",\r\n\tWHITE: \"\\x1b[47m\",\r\n\tGREY: \"\\x1b[100m\",\r\n}\r\n\r\nexport enum LOG_LEVEL {\r\n\tERROR = 0,\r\n\tWARN = 1,\r\n\tINFO = 2,\r\n\tLOG = 3,\r\n\tDEBUG = 4,\r\n}\r\n\r\nexport type LoggerEvents = TypedEvents & {\r\n\t'ERROR': (...args: any[]) => any;\r\n\t'WARN': (...args: any[]) => any;\r\n\t'INFO': (...args: any[]) => any;\r\n\t'LOG': (...args: any[]) => any;\r\n\t'DEBUG': (...args: any[]) => any;\r\n};\r\n\r\nexport class Logger extends TypedEmitter<LoggerEvents> {\r\n\tstatic LOG_LEVEL: LOG_LEVEL = LOG_LEVEL.DEBUG;\r\n\r\n\tconstructor(public readonly namespace?: string) {\r\n\t\tsuper();\r\n\t}\r\n\r\n\tprivate pad(text: any, length: number, char: string, end = false) {\r\n\t\tconst t = text.toString();\r\n\t\tconst l = length - t.length;\r\n\t\tif(l <= 0) return t;\r\n\t\tconst padding = Array(~~(l / char.length)).fill(char).join('');\r\n\t\treturn !end ? padding + t : t + padding;\r\n\t}\r\n\r\n\tprivate format(...text: string[]): string {\r\n\t\tconst now = new Date();\r\n\t\tconst timestamp = `${now.getFullYear()}-${now.getMonth() + 1}-${now.getDate()} ${this.pad(now.getHours().toString(), 2, '0')}:${this.pad(now.getMinutes().toString(), 2, '0')}:${this.pad(now.getSeconds().toString(), 2, '0')}.${this.pad(now.getMilliseconds().toString(), 3, '0', true)}`;\r\n\t\treturn `${timestamp}${this.namespace ? ` [${this.namespace}]` : ''} ${text.join(' ')}`;\r\n\t}\r\n\r\n\tdebug(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.DEBUG) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.DEBUG, str);\r\n\t\tconsole.debug(CliForeground.LIGHT_GREY + str + CliEffects.CLEAR);\r\n\t}\r\n\r\n\tlog(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.LOG) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.LOG, str);\r\n\t\tconsole.log(CliEffects.CLEAR + str);\r\n\t}\r\n\r\n\tinfo(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.INFO) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.INFO, str);\r\n\t\tconsole.info(CliForeground.BLUE + str + CliEffects.CLEAR);\r\n\t}\r\n\r\n\twarn(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.WARN) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.WARN, str);\r\n\t\tconsole.warn(CliForeground.YELLOW + str + CliEffects.CLEAR);\r\n\t}\r\n\r\n\terror(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.ERROR) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.ERROR, str);\r\n\t\tconsole.error(CliForeground.RED + str + CliEffects.CLEAR);\r\n\t}\r\n}\r\n","export function countChars(text: string, pattern: RegExp) {\r\n\treturn text.length - text.replaceAll(pattern, '').length;\r\n}\r\n\r\nexport function createHex(length: number) {\r\n\treturn Array(length).fill(null).map(() => Math.round(Math.random() * 0xF).toString(16)).join('');\r\n}\r\n\r\n/**\r\n * String of all letters\r\n *\r\n */\r\nconst LETTER_LIST = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\r\n\r\n/**\r\n * String of all numbers\r\n *\r\n */\r\nconst NUMBER_LIST = '0123456789';\r\n\r\n/**\r\n * String of all symbols\r\n */\r\nconst SYMBOL_LIST = '~`!@#$%^&*()_-+={[}]|\\\\:;\"\\'<,>.?/';\r\n\r\n/**\r\n * String of all letters, numbers & symbols\r\n */\r\nconst CHAR_LIST = LETTER_LIST + NUMBER_LIST + SYMBOL_LIST;\r\n\r\nexport function formatPhoneNumber(number: string) {\r\n\tconst parts = /(\\+?1)?.*?(\\d{3}).*?(\\d{3}).*?(\\d{4})/g.exec(number);\r\n\tif(!parts) throw new Error(`Number cannot be parsed: ${number}`);\r\n\treturn `${parts[1] ?? ''} (${parts[2]}) ${parts[3]}-${parts[4]}`.trim();\r\n}\r\n\r\n/**\r\n * Insert a string into another string at a given position\r\n *\r\n * @example\r\n * ```\r\n * console.log(insertAt('Hello world!', ' glorious', 5);\r\n * // Output: Hello glorious world!\r\n * ```\r\n *\r\n * @param {string} target - Parent string you want to modify\r\n * @param {string} str - Value that will be injected to parent\r\n * @param {number} index - Position to inject string at\r\n * @returns {string} - New string\r\n */\r\nexport function insertAt(target: string, str: string, index: number): String {\r\n\treturn `${target.slice(0, index)}${str}${target.slice(index + 1)}`;\r\n}\r\n\r\nexport function pad(text: any, length: number, char: string, start = true) {\r\n\tconst t = text.toString();\r\n\tconst l = length - t.length;\r\n\tif(l <= 0) return t;\r\n\tconst padding = Array(~~(l / char.length)).fill(char).join('');\r\n\treturn start ? padding + t : t + padding;\r\n}\r\n\r\n/**\r\n * Generate a string of random characters.\r\n *\r\n * @example\r\n * ```ts\r\n * const random = randomString();\r\n * const randomByte = randomString(8, \"01\")\r\n * ```\r\n *\r\n * @param {number} length - length of generated string\r\n * @param {string} pool - character pool to generate string from\r\n * @return {string} generated string\r\n */\r\nexport function randomString(length: number, pool: string = CHAR_LIST): string {\r\n\treturn Array(length).fill(null).map(() => {\r\n\t\tconst n = ~~(Math.random() * pool.length);\r\n\t\treturn pool[n];\r\n\t}).join('');\r\n}\r\n\r\n/**\r\n * Generate a random string with fine control over letters, numbers & symbols\r\n *\r\n * @example\r\n * ```ts\r\n * const randomLetter = randomString(1, true);\r\n * const randomChar = randomString(1, true, true, true);\r\n * ```\r\n *\r\n * @param {number} length - length of generated string\r\n * @param {boolean} letters - Add letters to pool\r\n * @param {boolean} numbers - Add numbers to pool\r\n * @param {boolean} symbols - Add symbols to pool\r\n * @return {string} generated string\r\n */\r\nexport function randomStringBuilder(length: number, letters = false, numbers = false, symbols = false): string {\r\n\tif(!letters && !numbers && !symbols) throw new Error('Must enable at least one: letters, numbers, symbols');\r\n\treturn Array(length).fill(null).map(() => {\r\n\t\tlet c;\r\n\t\tdo {\r\n\t\t\tconst type = ~~(Math.random() * 3);\r\n\t\t\tif(letters && type == 0) {\r\n\t\t\t\tc = LETTER_LIST[~~(Math.random() * LETTER_LIST.length)];\r\n\t\t\t} else if(numbers && type == 1) {\r\n\t\t\t\tc = NUMBER_LIST[~~(Math.random() * NUMBER_LIST.length)];\r\n\t\t\t} else if(symbols && type == 2) {\r\n\t\t\t\tc = SYMBOL_LIST[~~(Math.random() * SYMBOL_LIST.length)];\r\n\t\t\t}\r\n\t\t} while(!c);\r\n\t\treturn c;\r\n\t}).join('');\r\n}\r\n\r\n/**\r\n * Find all substrings that match a given pattern.\r\n *\r\n * Roughly based on `String.prototype.matchAll`.\r\n *\r\n * @param {string} value - String to search.\r\n * @param {RegExp | string} regex - Regular expression to match.\r\n * @return {RegExpExecArray[]} Found matches.\r\n */\r\nexport function matchAll(value: string, regex: RegExp | string): RegExpExecArray[] {\r\n\tif(typeof regex === 'string') {\r\n\t\tregex = new RegExp(regex, 'g');\r\n\t}\r\n\r\n\t// https://stackoverflow.com/a/60290199\r\n\tif(!regex.global) {\r\n\t\tthrow new TypeError('Regular expression must be global.');\r\n\t}\r\n\r\n\tlet ret: RegExpExecArray[] = [];\r\n\tlet match: RegExpExecArray | null;\r\n\twhile((match = regex.exec(value)) !== null) {\r\n\t\tret.push(match);\r\n\t}\r\n\r\n\treturn ret;\r\n}\r\n\r\n/**\r\n * Create MD5 hash using native javascript\r\n * @param d String to hash\r\n * @returns {string} Hashed string\r\n */\r\nexport function md5(d: string) {\r\n\tvar r = M(V(Y(X(d),8*d.length)));return r.toLowerCase()};\r\n\tfunction M(d:any){for(var _,m=\"0123456789ABCDEF\",f=\"\",r=0;r<d.length;r++)_=d.charCodeAt(r),f+=m.charAt(_>>>4&15)+m.charAt(15&_);return f}\r\n\tfunction X(d:any){for(var _=Array(d.length>>2),m=0;m<_.length;m++)_[m]=0;for(m=0;m<8*d.length;m+=8)_[m>>5]|=(255&d.charCodeAt(m/8))<<m%32;return _}\r\n\tfunction V(d:any){for(var _=\"\",m=0;m<32*d.length;m+=8)_+=String.fromCharCode(d[m>>5]>>>m%32&255);return _}\r\n\tfunction Y(d:any,_:any){d[_>>5]|=128<<_%32,d[14+(_+64>>>9<<4)]=_;for(var m=1732584193,f=-271733879,r=-1732584194,i=271733878,n=0;n<d.length;n+=16){var h=m,t=f,g=r,e=i;f=md5_ii(f=md5_ii(f=md5_ii(f=md5_ii(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_ff(f=md5_ff(f=md5_ff(f=md5_ff(f,r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+0],7,-680876936),f,r,d[n+1],12,-389564586),m,f,d[n+2],17,606105819),i,m,d[n+3],22,-1044525330),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+4],7,-176418897),f,r,d[n+5],12,1200080426),m,f,d[n+6],17,-1473231341),i,m,d[n+7],22,-45705983),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+8],7,1770035416),f,r,d[n+9],12,-1958414417),m,f,d[n+10],17,-42063),i,m,d[n+11],22,-1990404162),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+12],7,1804603682),f,r,d[n+13],12,-40341101),m,f,d[n+14],17,-1502002290),i,m,d[n+15],22,1236535329),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+1],5,-165796510),f,r,d[n+6],9,-1069501632),m,f,d[n+11],14,643717713),i,m,d[n+0],20,-373897302),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+5],5,-701558691),f,r,d[n+10],9,38016083),m,f,d[n+15],14,-660478335),i,m,d[n+4],20,-405537848),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+9],5,568446438),f,r,d[n+14],9,-1019803690),m,f,d[n+3],14,-187363961),i,m,d[n+8],20,1163531501),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+13],5,-1444681467),f,r,d[n+2],9,-51403784),m,f,d[n+7],14,1735328473),i,m,d[n+12],20,-1926607734),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+5],4,-378558),f,r,d[n+8],11,-2022574463),m,f,d[n+11],16,1839030562),i,m,d[n+14],23,-35309556),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+1],4,-1530992060),f,r,d[n+4],11,1272893353),m,f,d[n+7],16,-155497632),i,m,d[n+10],23,-1094730640),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+13],4,681279174),f,r,d[n+0],11,-358537222),m,f,d[n+3],16,-722521979),i,m,d[n+6],23,76029189),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+9],4,-640364487),f,r,d[n+12],11,-421815835),m,f,d[n+15],16,530742520),i,m,d[n+2],23,-995338651),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+0],6,-198630844),f,r,d[n+7],10,1126891415),m,f,d[n+14],15,-1416354905),i,m,d[n+5],21,-57434055),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+12],6,1700485571),f,r,d[n+3],10,-1894986606),m,f,d[n+10],15,-1051523),i,m,d[n+1],21,-2054922799),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+8],6,1873313359),f,r,d[n+15],10,-30611744),m,f,d[n+6],15,-1560198380),i,m,d[n+13],21,1309151649),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+4],6,-145523070),f,r,d[n+11],10,-1120210379),m,f,d[n+2],15,718787259),i,m,d[n+9],21,-343485551),m=safe_add(m,h),f=safe_add(f,t),r=safe_add(r,g),i=safe_add(i,e)}return Array(m,f,r,i)}\r\n\tfunction md5_cmn(d:any,_:any,m:any,f:any,r:any,i:any){return safe_add(bit_rol(safe_add(safe_add(_,d),safe_add(f,i)),r),m)}\r\n\tfunction md5_ff(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(_&m|~_&f,d,_,r,i,n)}\r\n\tfunction md5_gg(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(_&f|m&~f,d,_,r,i,n)}\r\n\tfunction md5_hh(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(_^m^f,d,_,r,i,n)}\r\n\tfunction md5_ii(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(m^(_|~f),d,_,r,i,n)}\r\n\tfunction safe_add(d:any,_:any){var m=(65535&d)+(65535&_);return(d>>16)+(_>>16)+(m>>16)<<16|65535&m}\r\n\tfunction bit_rol(d:any,_:any){return d<<_|d>>>32-_\r\n}\r\n\r\n/**\r\n * Check if email is valid\r\n *\r\n * @param {string} email - Target\r\n * @returns {boolean} - Follows format\r\n */\r\nexport function validateEmail(email: string) {\r\n\treturn /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/.test(email);\r\n}\r\n","import {md5} from './string';\r\n\r\n/**\r\n * Convert data into a form encoded format.\r\n *\r\n * @param {any} data - data to convert\r\n * @returns {string} - Ecodeded form data\r\n */\r\nexport function formEncode(data: any): string {\r\n\treturn Object.entries(data).map(([key, value]) =>\r\n\t\tencodeURIComponent(key) + '=' + encodeURIComponent(<any>value)\r\n\t).join('&');\r\n}\r\n\r\n/**\r\n * Get profile image from Gravatar\r\n *\r\n * @param {string} email Account email address\r\n * @param {string} def Default image, can be a link or '404', see: https://docs.gravatar.com/general/images/\r\n * @returns {string} Gravatar URL\r\n */\r\nexport function gravatar(email: string, def='mp') {\r\n\tif(!email) return '';\r\n\treturn `https://www.gravatar.com/avatar/${md5(email)}?d=${def}`;\r\n}\r\n\r\n/** Parts of a URL */\r\nexport type ParsedUrl = {\r\n\tprotocol?: string,\r\n\tsubdomain?: string,\r\n\tdomain: string,\r\n\thost: string,\r\n\tport?: number,\r\n\tpath?: string,\r\n\tquery?: {[name: string]: string}\r\n\tfragment?: string\r\n}\r\n\r\n/**\r\n *\r\n * @param {string} url\r\n * @returns {RegExpExecArray}\r\n */\r\nexport function urlParser(url: string): ParsedUrl {\r\n\tconst processed = new RegExp(\r\n\t\t'(?:(?<protocol>[\\\\w\\\\d]+)\\\\:\\\\/\\\\/)?(?:(?<user>.+)\\\\@)?(?<host>(?<domain>[^:\\\\/\\\\?#@\\\\n]+)(?:\\\\:(?<port>\\\\d*))?)(?<path>\\\\/.*?)?(?:\\\\?(?<query>.*?))?(?:#(?<fragment>.*?))?$',\r\n\t\t'gm').exec(url);\r\n\tconst groups: ParsedUrl = <any>processed?.groups ?? {};\r\n\tconst domains = groups.domain.split('.');\r\n\tif(groups['port'] != null) groups.port = Number(groups.port);\r\n\tif(domains.length > 2) {\r\n\t\tgroups.domain = domains.splice(-2, 2).join('.');\r\n\t\tgroups.subdomain = domains.join('.');\r\n\t}\r\n\tif(groups.query) {\r\n\t\tconst split = (<any>groups.query).split('&'), query: any = {};\r\n\t\tsplit.forEach((q: any) => {\r\n\t\t\tconst [key, val] = q.split('=');\r\n\t\t\tquery[key] = val;\r\n\t\t});\r\n\t\tgroups.query = query;\r\n\t}\r\n\treturn groups;\r\n}\r\n","/**\r\n * Calculate the number of milliseconds until date/time\r\n *\r\n * @param {Date | number} date - Target\r\n * @returns {number} - Number of milliseconds until target\r\n */\r\nexport function timeUntil(date: Date | number): number {\r\n\treturn (date instanceof Date ? date.getTime() : date) - (new Date()).getTime();\r\n}\r\n\r\n/**\r\n * Use in conjunction with `await` to pause an async script\r\n *\r\n * @example\r\n * ```ts\r\n * async () => {\r\n * ...\r\n * await sleep(1000) // Pause for 1 second\r\n *\t ...\r\n * }\r\n * ```\r\n *\r\n * @param {number} ms - Time to pause for in milliseconds\r\n * @returns {Promise<unknown>} - Resolves promise when it's time to resume\r\n */\r\nexport function sleep(ms: number) {\r\n\treturn new Promise(res => setTimeout(res, ms));\r\n}\r\n\r\nexport function formatDate(date: Date | number | string) {\r\n\tconst d = date instanceof Date ? date : new Date(date);\r\n\treturn new Intl.DateTimeFormat(\"en-us\", {\r\n\t\tweekday: \"long\",\r\n\t\tmonth: \"short\",\r\n\t\tday: \"numeric\",\r\n\t\thour: \"numeric\",\r\n\t\tminute: \"numeric\",\r\n\t\thour12: true\r\n\t}).format(d);\r\n}\r\n"],"names":["clean","obj","undefinedOnly","o","key","value","deepCopy","dotNotation","prop","set","i","arr","flattenObj","parent","result","propName","includes","target","values","allowMissing","e","type","isEqual","a","b","ta","tb","addUnique","array","el","arrayDiff","makeUnique","v1","v2","caseInsensitiveSort","aVal","bVal","flattenArr","sortByProp","reverse","findByProp","v","n","makeArray","TypedEmitter","__publicField","event","args","l","listener","_a","res","unsubscribe","_XHR","opts","fn","_b","url","headers","req","resp","err","XHR","next","BadRequestError","UnauthorizedError","ForbiddenError","NotFoundError","InternalServerError","CustomError","message","code","c","newErr","CliEffects","CliForeground","CliBackground","LOG_LEVEL","_Logger","namespace","text","length","char","end","t","padding","now","str","Logger","countChars","pattern","createHex","LETTER_LIST","NUMBER_LIST","SYMBOL_LIST","CHAR_LIST","formatPhoneNumber","number","parts","insertAt","index","pad","start","randomString","pool","randomStringBuilder","letters","numbers","symbols","matchAll","regex","ret","match","md5","d","r","M","V","Y","X","_","m","f","h","g","md5_ii","md5_hh","md5_gg","md5_ff","safe_add","md5_cmn","bit_rol","validateEmail","email","formEncode","data","gravatar","def","urlParser","processed","groups","domains","split","query","q","val","timeUntil","date","sleep","ms","formatDate"],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@ztimson/utils",
3
+ "version": "0.1.1",
4
+ "description": "Utility library",
5
+ "author": "Zak Timson",
6
+ "license": "MIT",
7
+ "private": false,
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "https://git.zakscode.com/ztimson/js-utilities"
11
+ },
12
+ "main": "./dist/utils.cjs",
13
+ "module": "./dist/utils.mjs",
14
+ "types": "./dist/utils.d.ts",
15
+ "scripts": {
16
+ "build": "npx tsc && npx vite build",
17
+ "test": "npx jest",
18
+ "test:coverage": "npx jest --coverage",
19
+ "watch": "npx vite build --watch"
20
+ },
21
+ "devDependencies": {
22
+ "@types/jest": "^29.5.12",
23
+ "jest": "^29.7.0",
24
+ "jest-junit": "^16.0.0",
25
+ "ts-jest": "^29.1.2",
26
+ "typescript": "^5.3.3",
27
+ "vite": "^5.0.12",
28
+ "vite-plugin-dts": "^3.7.2"
29
+ },
30
+ "files": [
31
+ "dist"
32
+ ]
33
+ }