@ztimson/utils 0.18.0 → 0.18.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +24 -20
- package/dist/index.mjs.map +1 -1
- package/dist/misc.d.ts +7 -0
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/objects.ts","../src/array.ts","../src/aset.ts","../src/cache.ts","../src/csv.ts","../src/promise-progress.ts","../src/files.ts","../src/emitter.ts","../src/errors.ts","../src/http.ts","../src/jwt.ts","../src/logger.ts","../src/math.ts","../src/string.ts","../src/misc.ts","../src/time.ts","../src/types.ts","../node_modules/var-persist/dist/persist.js","../node_modules/var-persist/dist/memory-storage.js","../node_modules/var-persist/dist/index.js"],"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 * @param {T} value Object to copy\r\n * @returns {T} Type\r\n * @deprecated Please use `structuredClone`\r\n */\r\nexport function deepCopy<T>(value: T): T {\r\n\treturn structuredClone(value);\r\n}\r\n\r\n/**\r\n * Merge any number of objects into the target\r\n *\r\n * @param target Destination of all properties\r\n * @param sources Objects that will copied into target\r\n * @return {any} The des\r\n */\r\nexport function deepMerge<T>(target: any, ...sources: any[]): T {\r\n\tsources.forEach(s => {\r\n\t\tfor(const key in s) {\r\n\t\t\tif(s[key] && typeof s[key] == 'object' && !Array.isArray(s[key])) {\r\n\t\t\t\tif(!target[key]) target[key] = {};\r\n\t\t\t\tdeepMerge(target[key], s[key]);\r\n\t\t\t} else {\r\n\t\t\t\ttarget[key] = s[key];\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\treturn target;\r\n}\r\n\r\n/**\r\n * Get/set a property of an object using dot notation\r\n *\r\n * @example\r\n * ```ts\r\n * // Get a value\r\n * const name = dotNotation<string>(person, 'firstName');\r\n * const familyCarMake = dotNotation(family, 'cars[0].make');\r\n * // Set a value\r\n * dotNotation(family, 'cars[0].make', 'toyota');\r\n * ```\r\n *\r\n * @type T Return type\r\n * @param {Object} obj source object to search\r\n * @param {string} prop property name (Dot notation & indexing allowed)\r\n * @param {any} set Set object property to value, omit to fetch value instead\r\n * @return {T} property value\r\n */\r\nexport function dotNotation<T>(obj: any, prop: string, set: T): T;\r\nexport function dotNotation<T>(obj: any, prop: string): T | undefined;\r\nexport function dotNotation<T>(obj: any, prop: string, set?: T): T | undefined {\r\n\tif(obj == null || !prop) return undefined;\r\n\t// Split property string by '.' or [index]\r\n\treturn <T>prop.split(/[.[\\]]/g).filter(prop => prop.length).reduce((obj, prop, i, arr) => {\r\n\t\tif(prop[0] == '\"' || prop[0] == \"'\") prop = prop.slice(1, -1); // Take quotes out\r\n\t\tif(!obj?.hasOwnProperty(prop)) {\r\n\t\t\tif(set == undefined) return undefined;\r\n\t\t\tobj[prop] = {};\r\n\t\t}\r\n\t\tif(set !== undefined && i == arr.length - 1)\r\n\t\t\treturn obj[prop] = set;\r\n\t\treturn obj[prop];\r\n\t}, obj);\r\n}\r\n\r\n\r\n/**\r\n * Convert object into URL encoded query string\r\n *\r\n * @example\r\n * ```js\r\n * const query = encodeQuery({page: 1, size: 20});\r\n * console.log(query); // Output: \"page=1&size=20\"\r\n * ```\r\n *\r\n * @param {any} data - data to convert\r\n * @returns {string} - Encoded form data\r\n */\r\nexport function encodeQuery(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/**\r\n * Recursively flatten a nested object, while maintaining key structure\r\n *\r\n * @example\r\n * ```ts\r\n * const car = {honda: {model: \"Civic\"}};\r\n * console.log(flattenObj(car)); //Output {honda.model: \"Civic\"}\r\n * ```\r\n *\r\n * @param obj - Object to flatten\r\n * @param parent - Recursively check if key is a parent key or not\r\n * @param result - Result\r\n * @returns {object} - Flattened object\r\n */\r\nexport function flattenObj(obj: any, parent?: any, result: any = {}) {\r\n\tif(typeof obj === \"object\" && !Array.isArray(obj)) {\r\n\t\tfor(const key of Object.keys(obj)) {\r\n\t\t\tconst propName = parent ? parent + '.' + key : key;\r\n\t\t\tif(typeof obj[key] === 'object') {\r\n\t\t\t\tflattenObj(obj[key], propName, result);\r\n\t\t\t} else {\r\n\t\t\t\tresult[propName] = obj[key];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn result;\r\n\t}\r\n}\r\n\r\n/**\r\n * Convert object to FormData\r\n *\r\n * @param target - Object to convert\r\n * @return {FormData} - Form object\r\n */\r\nexport function formData(target: any): FormData {\r\n\tconst data = new FormData();\r\n\tObject.entries(target).forEach(([key, value]) => data.append(key, <any>value));\r\n\treturn data;\r\n}\r\n\r\n/**\r\n * Check that an object has the following values\r\n *\r\n * @example\r\n * ```ts\r\n * const test = {a: 2, b: 2};\r\n * includes(test, {a: 1}); // true\r\n * includes(test, {b: 1, c: 3}); // false\r\n * ```\r\n *\r\n * @param target Object to search\r\n * @param values Criteria to check against\r\n * @param allowMissing Only check the keys that are available on the target\r\n * @returns {boolean} Does target include all the values\r\n */\r\nexport function includes(target: any, values: any, allowMissing = false): boolean {\r\n\tif(target == undefined) return allowMissing;\r\n\tif(Array.isArray(values)) return values.findIndex((e: any, i: number) => !includes(target[i], values[i], allowMissing)) == -1;\r\n\tconst type = typeof values;\r\n\tif(type != typeof target) return false;\r\n\tif(type == 'object') {\r\n\t\treturn Object.keys(values).find(key => !includes(target[key], values[key], allowMissing)) == null;\r\n\t}\r\n\tif(type == 'function') return target.toString() == values.toString();\r\n\treturn target == values;\r\n}\r\n\r\n/**\r\n * Deep check if two objects are equal\r\n *\r\n * @param {any} a - first item to compare\r\n * @param {any} b - second item to compare\r\n * @returns {boolean} True if they match\r\n */\r\nexport function isEqual(a: any, b: any): boolean {\r\n\tconst ta = typeof a, tb = typeof b;\r\n\tif((ta != 'object' || a == null) || (tb != 'object' || b == null))\r\n\t\treturn ta == 'function' && tb == 'function' ? a.toString() == b.toString() : a === b;\r\n\tconst keys = Object.keys(a);\r\n\tif(keys.length != Object.keys(b).length) return false;\r\n\treturn Object.keys(a).every(key => isEqual(a[key], b[key]));\r\n}\r\n\r\n/**\r\n * Experimental: Combine multiple object prototypes into one\r\n *\r\n * @param target Object that will have prototypes added\r\n * @param {any[]} constructors Additionally prototypes that should be merged into target\r\n */\r\nexport function mixin(target: any, constructors: any[]) {\r\n\tconstructors.forEach(c => {\r\n\t\tObject.getOwnPropertyNames(c.prototype).forEach((name) => {\r\n\t\t\tObject.defineProperty(\r\n\t\t\t\ttarget.prototype,\r\n\t\t\t\tname,\r\n\t\t\t\tObject.getOwnPropertyDescriptor(c.prototype, name) ||\r\n\t\t\t\tObject.create(null)\r\n\t\t\t);\r\n\t\t});\r\n\t});\r\n}\r\n\r\n/**\r\n * Parse JSON but return the original string if it fails\r\n *\r\n * @param {string} json JSON string to parse\r\n * @return {string | T} Object if successful, original string otherwise\r\n */\r\nexport function JSONAttemptParse<T>(json: string): T | string {\r\n\ttry { return JSON.parse(json); }\r\n\tcatch { return json; }\r\n}\r\n\r\n/**\r\n * Convert an object to a JSON string avoiding any circular references.\r\n *\r\n * @param obj Object to convert to JSON\r\n * @param {number} space Format the JSON with spaces\r\n * @return {string} JSON string\r\n */\r\nexport function JSONSanitize(obj: any, space?: number): string {\r\n\tlet cache: any[] = [];\r\n\treturn JSON.stringify(obj, (key, value) => {\r\n\t\tif (typeof value === 'object' && value !== null) {\r\n\t\t\tif (cache.includes(value)) return;\r\n\t\t\tcache.push(value);\r\n\t\t}\r\n\t\treturn value;\r\n\t}, space);\r\n}\r\n","import {dotNotation, isEqual} from './objects';\n\n/**\n * Only add element to array if it isn't already included\n *\n * @example\n * ```js\n * const arr = addUnique([1, 2, 3], 3);\n * console.log(arr); // Output: [1, 2, 3]\n * ```\n *\n * @param {T[]} array Target array element will be added to\n * @param {T} el Unique element to add\n * @return {T[]} Array with element if it was unique\n * @deprecated Use ASet to create unique arrays\n */\nexport function addUnique<T>(array: T[], el: T): T[] {\n\tif(array.indexOf(el) === -1) array.push(el);\n\treturn array;\n}\n\n/**\n * Find all unique elements in arrays\n *\n * @param {any[]} a First array to compare\n * @param {any[]} b Second array to compare\n * @return {any[]} Unique elements\n * @deprecated Use ASet to perform Set operations on arrays\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 * Shorthand to find objects with a property value\n *\n * @example\n * ```js\n * const found = [\n * {name: 'Batman'},\n * {name: 'Superman'},\n * ].filter(findByProp('name', 'Batman'));\n * ```\n *\n * @param {string} prop Property to compare (Dot nation supported)\n * @param value Value property must have\n * @return {(v: any) => boolean} Function used by `filter` or `find`\n */\nexport function findByProp(prop: string, value: any) {\n\treturn (v: any) => isEqual(dotNotation(v, prop), value);\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\n/**\n * Make sure every element in array is unique\n *\n * @param {any[]} arr Array that will be filtered in place\n * @return {any[]} Original array\n * @deprecated Please use ASet to create a guaranteed unique array\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 *\n * @param {T[] | T} value Value that should be an array\n * @returns {T[]} Value in an array\n */\nexport function makeArray<T>(value: T | T[]): T[] {\n\treturn Array.isArray(value) ? value : [value];\n}\n","/**\n * An array which functions as a set. It guarantees unique elements\n * and provides set functions for comparisons\n */\nexport class ASet<T> extends Array {\n\t/** Number of elements in set */\n\tget size() {\n\t\treturn this.length;\n\t}\n\n\t/**\n\t * Array to create set from, duplicate values will be removed\n\t * @param {T[]} elements Elements which will be added to set\n\t */\n\tconstructor(elements: T[] = []) {\n\t\tsuper();\n\t\tif(!!elements?.['forEach'])\n\t\t\telements.forEach(el => this.add(el));\n\t}\n\n\t/**\n\t * Add elements to set if unique\n\t * @param items\n\t */\n\tadd(...items: T[]) {\n\t\titems.filter(el => !this.has(el)).forEach(el => this.push(el));\n\t}\n\n\t/**\n\t * Delete elements from set\n\t * @param items Elements that will be deleted\n\t */\n\tdelete(...items: T[]) {\n\t\titems.forEach(el => {\n\t\t\tconst index = this.indexOf(el);\n\t\t\tif(index != -1) this.slice(index, 1);\n\t\t})\n\t}\n\n\t/**\n\t * Create list of elements this set has which the comparison set does not\n\t * @param {ASet<T>} set Set to compare against\n\t * @return {ASet<T>} Different elements\n\t */\n\tdifference(set: ASet<T>) {\n\t\treturn new ASet<T>(this.filter(el => !set.has(el)));\n\t}\n\n\t/**\n\t * Check if set includes element\n\t * @param {T} el Element to look for\n\t * @return {boolean} True if element was found, false otherwise\n\t */\n\thas(el: T) {\n\t\treturn this.indexOf(el) != -1;\n\t}\n\n\t/**\n\t * Create list of elements this set has in common with the comparison set\n\t * @param {ASet<T>} set Set to compare against\n\t * @return {boolean} Set of common elements\n\t */\n\tintersection(set: ASet<T>) {\n\t\treturn new ASet<T>(this.filter(el => set.has(el)));\n\t}\n\n\t/**\n\t * Check if this set has no elements in common with the comparison set\n\t * @param {ASet<T>} set Set to compare against\n\t * @return {boolean} True if nothing in common, false otherwise\n\t */\n\tisDisjointFrom(set: ASet<T>) {\n\t\treturn this.intersection(set).size == 0;\n\t}\n\n\t/**\n\t * Check if all elements in this set are included in the comparison set\n\t * @param {ASet<T>} set Set to compare against\n\t * @return {boolean} True if all elements are included, false otherwise\n\t */\n\tisSubsetOf(set: ASet<T>) {\n\t\treturn this.findIndex(el => !set.has(el)) == -1;\n\t}\n\n\t/**\n\t * Check if all elements from comparison set are included in this set\n\t * @param {ASet<T>} set Set to compare against\n\t * @return {boolean} True if all elements are included, false otherwise\n\t */\n\tisSuperset(set: ASet<T>) {\n\t\treturn set.findIndex(el => !this.has(el)) == -1;\n\t}\n\n\t/**\n\t * Create list of elements that are only in one set but not both (XOR)\n\t * @param {ASet<T>} set Set to compare against\n\t * @return {ASet<T>} New set of unique elements\n\t */\n\tsymmetricDifference(set: ASet<T>) {\n\t\treturn new ASet([...this.difference(set), ...set.difference(this)]);\n\t}\n\n\t/**\n\t * Create joined list of elements included in this & the comparison set\n\t * @param {ASet<T>} set Set join\n\t * @return {ASet<T>} New set of both previous sets combined\n\t */\n\tunion(set: ASet<T> | Array<T>) {\n\t\treturn new ASet([...this, ...set]);\n\t}\n}\n","/**\n * Map of data which tracks whether it is a complete collection & offers optional expiry of cached values\n */\nexport class Cache<K extends string | number | symbol, T> {\n\tprivate store = <Record<K, T>>{};\n\n\t/** Support index lookups */\n\t[key: string | number | symbol]: T | any;\n\t/** Whether cache is complete */\n\tcomplete = false;\n\n\t/**\n\t * Create new cache\n\t *\n\t * @param {keyof T} key Default property to use as primary key\n\t * @param {number} ttl Default expiry in milliseconds\n\t */\n\tconstructor(public readonly key?: keyof T, public ttl?: number) {\n\t\treturn new Proxy(this, {\n\t\t\tget: (target: this, prop: string | symbol) => {\n\t\t\t\tif (prop in target) return (target as any)[prop];\n\t\t\t\treturn target.store[prop as K];\n\t\t\t},\n\t\t\tset: (target: this, prop: string | symbol, value: any) => {\n\t\t\t\tif (prop in target) (target as any)[prop] = value;\n\t\t\t\telse target.store[prop as K] = value;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate getKey(value: T): K {\n\t\tif(!this.key) throw new Error('No key defined');\n\t\treturn <K>value[this.key];\n\t}\n\n\t/**\n\t * Get all cached items\n\t *\n\t * @return {T[]} Array of items\n\t */\n\tall(): T[] {\n\t\treturn Object.values(this.store);\n\t}\n\n\t/**\n\t * Add a new item to the cache. Like set, but finds key automatically\n\t *\n\t * @param {T} value Item to add to cache\n\t * @param {number | undefined} ttl Override default expiry\n\t * @return {this}\n\t */\n\tadd(value: T, ttl = this.ttl): this {\n\t\tconst key = this.getKey(value);\n\t\tthis.set(key, value, ttl);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Add several rows to the cache\n\t *\n\t * @param {T[]} rows Several items that will be cached using the default key\n\t * @param complete Mark cache as complete & reliable, defaults to true\n\t * @return {this}\n\t */\n\taddAll(rows: T[], complete = true): this {\n\t\trows.forEach(r => this.add(r));\n\t\tthis.complete = complete;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Delete an item from the cache\n\t *\n\t * @param {K} key Item's primary key\n\t */\n\tdelete(key: K) {\n\t\tdelete this.store[key];\n\t}\n\n\t/**\n\t * Return cache as an array of key-value pairs\n\t * @return {[K, T][]} Key-value pairs array\n\t */\n\tentries(): [K, T][] {\n\t\treturn <[K, T][]>Object.entries(this.store);\n\t}\n\n\t/**\n\t * Get item from the cache\n\t * @param {K} key Key to lookup\n\t * @return {T} Cached item\n\t */\n\tget(key: K): T {\n\t\treturn this.store[key];\n\t}\n\n\t/**\n\t * Get a list of cached keys\n\t *\n\t * @return {K[]} Array of keys\n\t */\n\tkeys(): K[] {\n\t\treturn <K[]>Object.keys(this.store);\n\t}\n\n\t/**\n\t * Get map of cached items\n\t *\n\t * @return {Record<K, T>}\n\t */\n\tmap(): Record<K, T> {\n\t\treturn structuredClone(this.store);\n\t}\n\n\t/**\n\t * Add an item to the cache manually specifying the key\n\t *\n\t * @param {K} key Key item will be cached under\n\t * @param {T} value Item to cache\n\t * @param {number | undefined} ttl Override default expiry\n\t * @return {this}\n\t */\n\tset(key: K, value: T, ttl = this.ttl): this {\n\t\tthis.store[key] = value;\n\t\tif(ttl) setTimeout(() => {\n\t\t\tthis.complete = false;\n\t\t\tthis.delete(key);\n\t\t}, ttl);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Get all cached items\n\t *\n\t * @return {T[]} Array of items\n\t */\n\tvalues = this.all();\n}\n","import {dotNotation, flattenObj} from './objects.ts';\n\n/**\n * Convert an object to a CSV string\n *\n * @param {any[]} target Array of objects to create CSV from\n * @param {boolean} flatten Should nested object be flattened or treated as values\n * @return {string} CSV string\n */\nexport function csv(target: any[], flatten=true) {\n\tconst headers = target.reduce((acc, row) => {\n\t\tObject.keys(flatten ? flattenObj(row) : row)\n\t\t\t.forEach(key => { if(!acc.includes(key)) acc.push(key); });\n\t\treturn acc;\n\t}, []);\n\treturn [\n\t\theaders.join(','),\n\t\t...target.map(row => headers.map((h: string) => {\n\t\t\tconst value = dotNotation<any>(row, h);\n\t\t\tconst type = typeof value;\n\t\t\tif(type == 'string' && value.includes(',')) return `\"${value}\"`;\n\t\t\tif(type == 'object') return `\"${JSON.stringify(value)}\"`;\n\t\t\treturn value;\n\t\t}).join(','))\n\t].join('\\n');\n}\n","export type ProgressCallback = (progress: number) => any;\n\n/**\n * A promise that fires the `onProgress` callback on incremental progress\n *\n * @example\n * ```js\n * const promise = new Promise((resolve, reject, progress) => {\n * const max = 10;\n * \t for(let i = 0; i < max; i++) progress(i / max);\n * \t resolve(1);\n * });\n *\n * console.log(promise.progress);\n *\n * promise.onProgress(console.log)\n * .then(console.log)\n * .catch(console.error)\n * .finally(...);\n *\n * ```\n */\nexport class PromiseProgress<T> extends Promise<T> {\n\tprivate listeners: ProgressCallback[] = [];\n\n\tprivate _progress = 0;\n\tget progress() { return this._progress; }\n\tset progress(p: number) {\n\t\tif(p == this._progress) return;\n\t\tthis._progress = p;\n\t\tthis.listeners.forEach(l => l(p));\n\t}\n\n\tconstructor(executor: (resolve: (value: T) => any, reject: (reason: any) => void, progress: (progress: number) => any) => void) {\n\t\tsuper((resolve, reject) => executor(\n\t\t\t(value: T) => resolve(value),\n\t\t\t(reason: any) => reject(reason),\n\t\t\t(progress: number) => this.progress = progress,\n\t\t));\n\t}\n\n\tstatic from<T>(promise: Promise<T>): PromiseProgress<T> {\n\t\tif(promise instanceof PromiseProgress) return promise;\n\t\treturn new PromiseProgress<T>((res, rej) => promise\n\t\t\t.then((...args) => res(...args))\n\t\t\t.catch((...args) => rej(...args)));\n\t}\n\n\tprivate from(promise: Promise<T>): PromiseProgress<T> {\n\t\tconst newPromise = PromiseProgress.from(promise);\n\t\tthis.onProgress(p => newPromise.progress = p);\n\t\treturn newPromise;\n\t}\n\n\tonProgress(callback: ProgressCallback) {\n\t\tthis.listeners.push(callback);\n\t\treturn this;\n\t}\n\n\tthen(res?: (v: T) => any, rej?: (err: any) => any): PromiseProgress<any> {\n\t\tconst resp = super.then(res, rej);\n\t\treturn this.from(resp);\n\t}\n\n\tcatch(rej?: (err: any) => any): PromiseProgress<any> {\n\t\treturn this.from(super.catch(rej));\n\t}\n\n\tfinally(res?: () => any): PromiseProgress<any> {\n\t\treturn this.from(super.finally(res));\n\t}\n}\n","import {makeArray} from './array.ts';\nimport {JSONAttemptParse} from './objects.ts';\nimport {PromiseProgress} from './promise-progress';\n\n/**\n * Download blob as a file\n *\n * @param {Blob} blob File as a blob\n * @param {string} name Name blob will be downloaded as\n */\nexport function downloadFile(blob: Blob | string | string[], name: string) {\n\tif(!(blob instanceof Blob)) blob = new Blob(makeArray(blob));\n\tconst url = URL.createObjectURL(blob);\n\tdownloadUrl(url, name);\n\tURL.revokeObjectURL(url);\n}\n\n/**\n * Download a file from a URL\n *\n * @param href URL that will be downloaded\n * @param {string} name Override download name\n */\nexport function downloadUrl(href: any, name?: string) {\n\tconst a = document.createElement('a');\n\ta.href = href;\n\ta.download = name || href.split('/').pop();\n\tdocument.body.appendChild(a);\n\ta.click();\n\tdocument.body.removeChild(a);\n}\n\n/**\n * Open filebrowser & return selected file\n *\n * @param {{accept?: string, multiple?: boolean}} options accept - selectable mimetypes, multiple - Allow selecting more than 1 file\n * @return {Promise<File[]>} Array of selected files\n */\nexport function fileBrowser(options: {accept?: string, multiple?: boolean} = {}): Promise<File[]> {\n\treturn new Promise(res => {\n\t\tconst input = document.createElement('input');\n\t\tinput.type = 'file';\n\t\tinput.accept = options.accept || '*';\n\t\tinput.style.display='none';\n\t\tinput.multiple = !!options.multiple;\n\t\tinput.onblur = input.onchange = async () => {\n\t\t\tres(Array.from(<any>input.files));\n\t\t\tinput.remove();\n\t\t}\n\t\tdocument.body.appendChild(input);\n\t\tinput.click();\n\t});\n}\n\n/**\n * Create timestamp intended for filenames from a date\n *\n * @param {string} name Name of file, `{{TIMESTAMP}}` will be replaced\n * @param {Date | number | string} date Date to use for timestamp\n * @return {string} Interpolated filename, or the raw timestamp if name was omitted\n */\nexport function timestampFilename(name?: string, date: Date | number | string = new Date()) {\n\tif(typeof date == 'number' || typeof date == 'string') date = new Date(date);\n\tconst timestamp = `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')}_${date.getHours().toString().padStart(2, '0')}-${date.getMinutes().toString().padStart(2, '0')}-${date.getSeconds().toString().padStart(2, '0')}`;\n\treturn name ? name.replace('{{TIMESTAMP}}', timestamp) : timestamp;\n}\n\n/**\n * Upload file to URL with progress callback using PromiseProgress\n *\n * @param {{url: string, files: File[], headers?: {[p: string]: string}, withCredentials?: boolean}} options\n * @return {PromiseProgress<T>} Promise of request with `onProgress` callback\n */\nexport function uploadWithProgress<T>(options: {\n\turl: string;\n\tfiles: File[];\n\theaders?: {[key: string]: string};\n\twithCredentials?: boolean;\n}): PromiseProgress<T> {\n\treturn new PromiseProgress<T>((res, rej, prog) => {\n\t\tconst xhr = new XMLHttpRequest();\n\t\tconst formData = new FormData();\n\t\toptions.files.forEach(f => formData.append('file', f));\n\n\t\txhr.withCredentials = !!options.withCredentials;\n\t\txhr.upload.addEventListener('progress', (event) => event.lengthComputable ? prog(event.loaded / event.total) : null);\n\t\txhr.addEventListener('loadend', () => res(<T>JSONAttemptParse(xhr.responseText)));\n\t\txhr.addEventListener('error', () => rej(JSONAttemptParse(xhr.responseText)));\n\t\txhr.addEventListener('timeout', () => rej({error: 'Request timed out'}));\n\n\t\txhr.open('POST', options.url);\n\t\tObject.entries(options.headers || {}).forEach(([key, value]) => xhr.setRequestHeader(key, value));\n\t\txhr.send(formData);\n\t});\n}\n","export type Listener = (...args: any[]) => any;\r\nexport type TypedEvents = {[k in string | symbol]: Listener} & {'*': (event: string, ...args: any[]) => any};\r\n\r\nexport type NamespaceEvents<Namespace extends string, Events extends TypedEvents> = {\r\n\t[K in keyof Events as `${Namespace}:${Extract<K, string>}`]: Events[K];\r\n};\r\n\r\nexport class TypedEmitter<T extends TypedEvents = TypedEvents> {\r\n\tprivate static listeners: {[key: string]: Listener[]} = {};\r\n\r\n\tprivate listeners: { [key in keyof T]?: Listener[] } = {};\r\n\r\n\tstatic emit(event: any, ...args: any[]) {\r\n\t\t(this.listeners['*'] || []).forEach(l => l(event, ...args));\r\n\t\t(this.listeners[event.toString()] || []).forEach(l => l(...args));\r\n\t};\r\n\r\n\tstatic off(event: any, listener: Listener) {\r\n\t\tconst e = event.toString();\r\n\t\tthis.listeners[e] = (this.listeners[e] || []).filter(l => l === listener);\r\n\t}\r\n\r\n\tstatic on(event: any, listener: Listener) {\r\n\t\tconst e = event.toString();\r\n\t\tif(!this.listeners[e]) this.listeners[e] = [];\r\n\t\tthis.listeners[e]?.push(listener);\r\n\t\treturn () => this.off(event, listener);\r\n\t}\r\n\r\n\tstatic once(event: any, listener?: Listener): Promise<any> {\r\n\t\treturn new Promise(res => {\r\n\t\t\tconst unsubscribe = this.on(event, <any>((...args: any) => {\r\n\t\t\t\tres(args.length == 1 ? args[0] : args);\r\n\t\t\t\tif(listener) listener(...args);\r\n\t\t\t\tunsubscribe();\r\n\t\t\t}));\r\n\t\t});\r\n\t}\r\n\r\n\temit<K extends keyof T>(event: K, ...args: Parameters<T[K]>) {\r\n\t\t(this.listeners['*'] || []).forEach(l => l(event, ...args));\r\n\t\t(this.listeners[event] || []).forEach(l => l(...args));\r\n\t};\r\n\r\n\toff<K extends keyof T = string>(event: K, listener: T[K]) {\r\n\t\tthis.listeners[event] = (this.listeners[event] || []).filter(l => l === listener);\r\n\t}\r\n\r\n\ton<K extends keyof T = string>(event: K, listener: T[K]) {\r\n\t\tif(!this.listeners[event]) this.listeners[event] = [];\r\n\t\tthis.listeners[event]?.push(listener);\r\n\t\treturn () => this.off(event, listener);\r\n\t}\r\n\r\n\tonce<K extends keyof T = string>(event: K, listener?: T[K]): Promise<any> {\r\n\t\treturn new Promise(res => {\r\n\t\t\tconst unsubscribe = this.on(event, <any>((...args: any) => {\r\n\t\t\t\tres(args.length == 1 ? args[0] : args);\r\n\t\t\t\tif(listener) listener(...args);\r\n\t\t\t\tunsubscribe();\r\n\t\t\t}));\r\n\t\t});\r\n\t}\r\n}\r\n","export class CustomError extends Error {\r\n\tstatic code = 500;\r\n\r\n\tprivate _code?: number;\r\n\tget code(): number { return this._code || (<any>this).constructor.code; }\r\n\tset code(c: number) { this._code = c; }\r\n\r\n\tconstructor(message?: string, code?: number) {\r\n\t\tsuper(message);\r\n\t\tif(code != null) this._code = code;\r\n\t}\r\n\r\n\tstatic from(err: Error): CustomError {\r\n\t\tconst code = Number((<any>err).statusCode) ?? Number((<any>err).code);\r\n\t\tconst newErr = new this(err.message || err.toString());\r\n\t\treturn Object.assign(newErr, {\r\n\t\t\tstack: err.stack,\r\n\t\t\t...err,\r\n\t\t\tcode: code ?? undefined\r\n\t\t});\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code != undefined;\r\n\t}\r\n\r\n\ttoString() {\r\n\t\treturn this.message || super.toString();\r\n\t}\r\n}\r\n\r\nexport class BadRequestError extends CustomError {\r\n\tstatic code = 400;\r\n\r\n\tconstructor(message: string = 'Bad Request') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class UnauthorizedError extends CustomError {\r\n\tstatic code = 401;\r\n\r\n\tconstructor(message: string = 'Unauthorized') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class PaymentRequiredError extends CustomError {\r\n\tstatic code = 402;\r\n\r\n\tconstructor(message: string = 'Payment Required') {\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 MethodNotAllowedError extends CustomError {\r\n\tstatic code = 405;\r\n\r\n\tconstructor(message: string = 'Method Not Allowed') {\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 NotAcceptableError extends CustomError {\r\n\tstatic code = 406;\r\n\r\n\tconstructor(message: string = 'Not Acceptable') {\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\r\nexport class NotImplementedError extends CustomError {\r\n\tstatic code = 501;\r\n\r\n\tconstructor(message: string = 'Not Implemented') {\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 BadGatewayError extends CustomError {\r\n\tstatic code = 502;\r\n\r\n\tconstructor(message: string = 'Bad Gateway') {\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 ServiceUnavailableError extends CustomError {\r\n\tstatic code = 503;\r\n\r\n\tconstructor(message: string = 'Service Unavailable') {\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 GatewayTimeoutError extends CustomError {\r\n\tstatic code = 504;\r\n\r\n\tconstructor(message: string = 'Gateway Timeout') {\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\n/**\r\n * Create the correct error object from a status code\r\n * @param {number} code Will be converted to respective error (ex. 404 -> NotFoundError)\r\n * @param {string} message Override default error message\r\n * @return {CustomError} The proper error type\r\n */\r\nexport function errorFromCode(code: number, message?: string) {\r\n\tif(code >= 200 && code < 300) return null;\r\n\tswitch(code) {\r\n\t\tcase 400:\r\n\t\t\treturn new BadRequestError(message);\r\n\t\tcase 401:\r\n\t\t\treturn new UnauthorizedError(message);\r\n\t\tcase 402:\r\n\t\t\treturn new PaymentRequiredError(message);\r\n\t\tcase 403:\r\n\t\t\treturn new ForbiddenError(message);\r\n\t\tcase 404:\r\n\t\t\treturn new NotFoundError(message);\r\n\t\tcase 405:\r\n\t\t\treturn new MethodNotAllowedError(message);\r\n\t\tcase 406:\r\n\t\t\treturn new NotAcceptableError(message);\r\n\t\tcase 500:\r\n\t\t\treturn new InternalServerError(message);\r\n\t\tcase 501:\r\n\t\t\treturn new NotImplementedError(message);\r\n\t\tcase 502:\r\n\t\t\treturn new BadGatewayError(message);\r\n\t\tcase 503:\r\n\t\t\treturn new ServiceUnavailableError(message);\r\n\t\tcase 504:\r\n\t\t\treturn new GatewayTimeoutError(message);\r\n\t\tdefault:\r\n\t\t\treturn new CustomError(message, code);\r\n\t}\r\n}\r\n","import {clean} from './objects';\nimport {PromiseProgress} from './promise-progress';\n\nexport type DecodedResponse<T> = Response & {data: T | null}\n\nexport type HttpInterceptor = (response: Response, next: () => void) => void;\n\nexport type HttpRequestOptions = {\n\tbody?: any;\n\tdecode?: boolean;\n\tfragment?: string;\n\theaders?: {[key: string | symbol]: string | null | undefined};\n\tmethod?: 'GET' | 'POST' | 'PATCH' | 'PUT' | 'DELETE';\n\tquery?: {key: string, value: string}[] | {[key: string]: string};\n\turl?: string;\n\t[key: string]: any;\n}\n\nexport type HttpDefaults = {\n\theaders?: {[key: string | symbol]: string | null | undefined};\n\tinterceptors?: HttpInterceptor[];\n\turl?: string;\n}\n\nexport class Http {\n\tprivate static interceptors: {[key: string]: HttpInterceptor} = {};\n\n\tstatic headers: {[key: string]: string | null | undefined} = {};\n\n\tprivate interceptors: {[key: string]: HttpInterceptor} = {}\n\n\theaders: {[key: string]: string | null | undefined} = {}\n\turl!: string | null;\n\n\tconstructor(defaults: HttpDefaults = {}) {\n\t\tthis.url = defaults.url ?? null;\n\t\tthis.headers = defaults.headers || {};\n\t\tif(defaults.interceptors) {\n\t\t\tdefaults.interceptors.forEach(i => Http.addInterceptor(i));\n\t\t}\n\t}\n\n\tstatic addInterceptor(fn: HttpInterceptor): () => void {\n\t\tconst key = Object.keys(Http.interceptors).length.toString();\n\t\tHttp.interceptors[key] = fn;\n\t\treturn () => { Http.interceptors[key] = <any>null; }\n\t}\n\n\taddInterceptor(fn: HttpInterceptor): () => void {\n\t\tconst key = Object.keys(this.interceptors).length.toString();\n\t\tthis.interceptors[key] = fn;\n\t\treturn () => { this.interceptors[key] = <any>null; }\n\t}\n\n\trequest<T>(opts: HttpRequestOptions = {}): PromiseProgress<DecodedResponse<T>> {\n\t\tif(!this.url && !opts.url) throw new Error('URL needs to be set');\n\t\tlet url = (opts.url?.startsWith('http') ? opts.url : (this.url || '') + (opts.url || '')).replace(/([^:]\\/)\\/+/g, '$1');\n\t\tif(opts.fragment) url.includes('#') ? url.replace(/#.*(\\?|\\n)/g, (match, arg1) => `#${opts.fragment}${arg1}`) : url += '#' + opts.fragment;\n\t\tif(opts.query) {\n\t\t\tconst q = Array.isArray(opts.query) ? opts.query :\n\t\t\t\tObject.keys(opts.query).map(k => ({key: k, value: (<any>opts.query)[k]}))\n\t\t\turl += (url.includes('?') ? '&' : '?') + q.map(q => `${q.key}=${q.value}`).join('&');\n\t\t}\n\n\t\t// Prep headers\n\t\tconst headers = <any>clean({\n\t\t\t'Content-Type': !opts.body ? undefined : (opts.body instanceof FormData ? 'multipart/form-data' : 'application/json'),\n\t\t\t...Http.headers,\n\t\t\t...this.headers,\n\t\t\t...opts.headers\n\t\t});\n\n\t\tif(typeof opts.body == 'object' && opts.body != null && headers['Content-Type'] == 'application/json')\n\t\t\topts.body = JSON.stringify(opts.body);\n\n\t\t// Send request\n\t\treturn new PromiseProgress((res, rej, prog) => {\n\t\t\tfetch(url, {\n\t\t\t\theaders,\n\t\t\t\tmethod: opts.method || (opts.body ? 'POST' : 'GET'),\n\t\t\t\tbody: opts.body\n\t\t\t}).then(async (resp: any) => {\n\t\t\t\tfor(let fn of [...Object.values(Http.interceptors), ...Object.values(this.interceptors)]) {\n\t\t\t\t\tawait new Promise<void>(res => fn(resp, () => res()));\n\t\t\t\t}\n\n\t\t\t\tconst contentLength = resp.headers.get('Content-Length');\n\t\t\t\tconst total = contentLength ? parseInt(contentLength, 10) : 0;\n\t\t\t\tlet loaded = 0;\n\n\t\t\t\tconst reader = resp.body?.getReader();\n\t\t\t\tconst stream = new ReadableStream({\n\t\t\t\t\tstart(controller) {\n\t\t\t\t\t\tfunction push() {\n\t\t\t\t\t\t\treader?.read().then((event: any) => {\n\t\t\t\t\t\t\t\tif(event.done) return controller.close();\n\t\t\t\t\t\t\t\tloaded += event.value.byteLength;\n\t\t\t\t\t\t\t\tprog(loaded / total);\n\t\t\t\t\t\t\t\tcontroller.enqueue(event.value);\n\t\t\t\t\t\t\t\tpush();\n\t\t\t\t\t\t\t}).catch((error: any) => controller.error(error));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpush();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tresp.data = new Response(stream);\n\t\t\t\tif(opts.decode == null || opts.decode) {\n\t\t\t\t\tconst content = resp.headers.get('Content-Type')?.toLowerCase();\n\t\t\t\t\tif(content?.includes('form')) resp.data = <T>await resp.data.formData();\n\t\t\t\t\telse if(content?.includes('json')) resp.data = <T>await resp.data.json();\n\t\t\t\t\telse if(content?.includes('text')) resp.data = <T>await resp.data.text();\n\t\t\t\t\telse if(content?.includes('application')) resp.data = <T>await resp.data.blob();\n\t\t\t\t}\n\n\t\t\t\tif(resp.ok) res(resp);\n\t\t\t\telse rej(resp);\n\t\t\t})\n\t\t});\n\t}\n}\n","import {JSONAttemptParse} from './objects.ts';\n\n/**\n * Decode a JWT payload, this will not check for tampering so be careful\n *\n * @param {string} token JWT to decode\n * @return {unknown} JWT payload\n */\nexport function jwtDecode<T>(token: string): T {\n\tconst base64 = token.split('.')[1]\n\t\t.replace(/-/g, '+').replace(/_/g, '/');\n\treturn <T>JSONAttemptParse(decodeURIComponent(atob(base64).split('').map(function(c) {\n\t\treturn '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\n\t}).join('')));\n}\n","import {TypedEmitter, TypedEvents} from './emitter';\r\n\r\nexport const CliEffects = {\r\n\tCLEAR: \"\\x1b[0m\",\r\n\tBRIGHT: \"\\x1b[1m\",\r\n\tDIM: \"\\x1b[2m\",\r\n\tUNDERSCORE: \"\\x1b[4m\",\r\n\tBLINK: \"\\x1b[5m\",\r\n\tREVERSE: \"\\x1b[7m\",\r\n\tHIDDEN: \"\\x1b[8m\",\r\n}\r\n\r\nexport const CliForeground = {\r\n\tBLACK: '\\x1b[30m',\r\n\tRED: '\\x1b[31m',\r\n\tGREEN: '\\x1b[32m',\r\n\tYELLOW: '\\x1b[33m',\r\n\tBLUE: '\\x1b[34m',\r\n\tMAGENTA: '\\x1b[35m',\r\n\tCYAN: '\\x1b[36m',\r\n\tLIGHT_GREY: '\\x1b[37m',\r\n\tGREY: '\\x1b[90m',\r\n\tLIGHT_RED: '\\x1b[91m',\r\n\tLIGHT_GREEN: '\\x1b[92m',\r\n\tLIGHT_YELLOW: '\\x1b[93m',\r\n\tLIGHT_BLUE: '\\x1b[94m',\r\n\tLIGHT_MAGENTA: '\\x1b[95m',\r\n\tLIGHT_CYAN: '\\x1b[96m',\r\n\tWHITE: '\\x1b[97m',\r\n}\r\n\r\nexport const CliBackground = {\r\n\tBLACK: \"\\x1b[40m\",\r\n\tRED: \"\\x1b[41m\",\r\n\tGREEN: \"\\x1b[42m\",\r\n\tYELLOW: \"\\x1b[43m\",\r\n\tBLUE: \"\\x1b[44m\",\r\n\tMAGENTA: \"\\x1b[45m\",\r\n\tCYAN: \"\\x1b[46m\",\r\n\tWHITE: \"\\x1b[47m\",\r\n\tGREY: \"\\x1b[100m\",\r\n}\r\n\r\nexport enum LOG_LEVEL {\r\n\tERROR = 0,\r\n\tWARN = 1,\r\n\tINFO = 2,\r\n\tLOG = 3,\r\n\tDEBUG = 4,\r\n}\r\n\r\nexport type LoggerEvents = TypedEvents & {\r\n\t'ERROR': (...args: any[]) => any;\r\n\t'WARN': (...args: any[]) => any;\r\n\t'INFO': (...args: any[]) => any;\r\n\t'LOG': (...args: any[]) => any;\r\n\t'DEBUG': (...args: any[]) => any;\r\n};\r\n\r\nexport class Logger extends TypedEmitter<LoggerEvents> {\r\n\tstatic LOG_LEVEL: LOG_LEVEL = LOG_LEVEL.DEBUG;\r\n\r\n\tconstructor(public readonly namespace?: string) {\r\n\t\tsuper();\r\n\t}\r\n\r\n\tprivate pad(text: any, length: number, char: string, end = false) {\r\n\t\tconst t = text.toString();\r\n\t\tconst l = length - t.length;\r\n\t\tif(l <= 0) return t;\r\n\t\tconst padding = Array(~~(l / char.length)).fill(char).join('');\r\n\t\treturn !end ? padding + t : t + padding;\r\n\t}\r\n\r\n\tprivate format(...text: string[]): string {\r\n\t\tconst now = new Date();\r\n\t\tconst timestamp = `${now.getFullYear()}-${now.getMonth() + 1}-${now.getDate()} ${this.pad(now.getHours().toString(), 2, '0')}:${this.pad(now.getMinutes().toString(), 2, '0')}:${this.pad(now.getSeconds().toString(), 2, '0')}.${this.pad(now.getMilliseconds().toString(), 3, '0', true)}`;\r\n\t\treturn `${timestamp}${this.namespace ? ` [${this.namespace}]` : ''} ${text.join(' ')}`;\r\n\t}\r\n\r\n\tdebug(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.DEBUG) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.DEBUG, str);\r\n\t\tconsole.debug(CliForeground.LIGHT_GREY + str + CliEffects.CLEAR);\r\n\t}\r\n\r\n\tlog(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.LOG) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.LOG, str);\r\n\t\tconsole.log(CliEffects.CLEAR + str);\r\n\t}\r\n\r\n\tinfo(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.INFO) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.INFO, str);\r\n\t\tconsole.info(CliForeground.BLUE + str + CliEffects.CLEAR);\r\n\t}\r\n\r\n\twarn(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.WARN) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.WARN, str);\r\n\t\tconsole.warn(CliForeground.YELLOW + str + CliEffects.CLEAR);\r\n\t}\r\n\r\n\terror(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.ERROR) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.ERROR, str);\r\n\t\tconsole.error(CliForeground.RED + str + CliEffects.CLEAR);\r\n\t}\r\n}\r\n","/**\n * Convert decimal number to fraction\n *\n * @example\n * ```js\n * dec2Frac(1.25) // Outputs: \"1 1/4\"\n * ```\n *\n * @param {number} num Number to convert\n * @return {string} Fraction with remainder\n */\nexport function dec2Frac(num: number) {\n\tconst gcd = (a: number, b: number): number => {\n\t\tif (b < 0.0000001) return a;\n\t\treturn gcd(b, ~~(a % b));\n\t};\n\n\tconst len = num.toString().length - 2;\n\tlet denominator = Math.pow(10, len);\n\tlet numerator = num * denominator;\n\tconst divisor = gcd(numerator, denominator);\n\tnumerator = ~~(numerator / divisor);\n\tdenominator = ~~(denominator / divisor)\n\tconst remainder = ~~(numerator / denominator);\n\tnumerator -= remainder * denominator;\n\treturn `${remainder ? remainder + ' ' : ''}${~~(numerator)}/${~~(denominator)}`;\n}\n\n/**\n * Convert fraction to decimal number\n *\n * @example\n * ```js\n * fracToDec('1 1/4') // Outputs: 1.25\n * ```\n *\n * @param {string} frac Fraction to convert\n * @return {number} Faction as a decimal\n */\nexport function fracToDec(frac: string) {\n\tlet split = frac.split(' ');\n\tconst whole = split.length == 2 ? Number(split[0]) : 0;\n\tsplit = (<string>split.pop()).split('/');\n\treturn whole + (Number(split[0]) / Number(split[1]));\n}\n","import {dotNotation, flattenObj} from './objects.ts';\r\n\r\n/**\r\n * String of all letters\r\n */\r\nconst LETTER_LIST = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\r\n\r\n/**\r\n * String of all numbers\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\n/**\r\n * Convert number of bytes into a human-readable size\r\n *\r\n * @param {number} bytes Number of bytes\r\n * @param {number} decimals Decimal places to preserve\r\n * @return {string} Formated size\r\n */\r\nexport function formatBytes(bytes: number, decimals = 2) {\r\n\tif (bytes === 0) return '0 Bytes';\r\n\tconst k = 1024;\r\n\tconst sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\r\n\tconst i = Math.floor(Math.log(bytes) / Math.log(k));\r\n\treturn parseFloat((bytes / Math.pow(k, i)).toFixed(decimals)) + ' ' + sizes[i];\r\n}\r\n\r\n/**\r\n * Extract numbers from a string & create a formated phone number: +1 (123) 456-7890\r\n *\r\n * @param {string} number String that will be parsed for numbers\r\n * @return {string} Formated phone number\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 * ```js\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\n/**\r\n * Add padding to string\r\n *\r\n * @example\r\n * ```js\r\n * const now = new Date();\r\n * const padded = now.getHours() + ':' + pad(now.getMinutes(), 2, '0');\r\n * console.log(padded); // Output: \"2:05\"\r\n * ```\r\n *\r\n * @param text Text that will be padded\r\n * @param {number} length Target length\r\n * @param {string} char Character to use as padding, defaults to space\r\n * @param {boolean} start Will pad start of text if true, or the end if false\r\n * @return {string} Padded string\r\n * @deprecated Please use `String.padStart` & `String.padEnd`\r\n */\r\nexport function pad(text: any, length: number, char: string = ' ', start = true) {\r\n\tif(start) return text.toString().padStart(length, char);\r\n\treturn text.toString().padEnd(length, char);\r\n}\r\n\r\n/**\r\n * Generate a random hexadecimal value\r\n *\r\n * @param {number} length Number of hexadecimal place values\r\n * @return {string} Hexadecimal number as a string\r\n */\r\nexport function randomHex(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 * 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/** 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 * Break a URL string into its parts for easy parsing\r\n *\r\n * @param {string} url URL string that will be parsed\r\n * @returns {RegExpExecArray} Parts of URL\r\n */\r\nexport function parseUrl(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\r\n/**\r\n * Create MD5 hash using native javascript\r\n *\r\n * @param d String to hash\r\n * @returns {string} Hashed string\r\n */\r\nexport function md5(d: string) {\r\n\tvar r = M(V(Y(X(d),8*d.length)));return r.toLowerCase()};\r\n\tfunction M(d:any){for(var _,m=\"0123456789ABCDEF\",f=\"\",r=0;r<d.length;r++)_=d.charCodeAt(r),f+=m.charAt(_>>>4&15)+m.charAt(15&_);return f}\r\n\tfunction X(d:any){for(var _=Array(d.length>>2),m=0;m<_.length;m++)_[m]=0;for(m=0;m<8*d.length;m+=8)_[m>>5]|=(255&d.charCodeAt(m/8))<<m%32;return _}\r\n\tfunction V(d:any){for(var _=\"\",m=0;m<32*d.length;m+=8)_+=String.fromCharCode(d[m>>5]>>>m%32&255);return _}\r\n\tfunction Y(d:any,_:any){d[_>>5]|=128<<_%32,d[14+(_+64>>>9<<4)]=_;for(var m=1732584193,f=-271733879,r=-1732584194,i=271733878,n=0;n<d.length;n+=16){var h=m,t=f,g=r,e=i;f=md5_ii(f=md5_ii(f=md5_ii(f=md5_ii(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_ff(f=md5_ff(f=md5_ff(f=md5_ff(f,r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+0],7,-680876936),f,r,d[n+1],12,-389564586),m,f,d[n+2],17,606105819),i,m,d[n+3],22,-1044525330),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+4],7,-176418897),f,r,d[n+5],12,1200080426),m,f,d[n+6],17,-1473231341),i,m,d[n+7],22,-45705983),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+8],7,1770035416),f,r,d[n+9],12,-1958414417),m,f,d[n+10],17,-42063),i,m,d[n+11],22,-1990404162),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+12],7,1804603682),f,r,d[n+13],12,-40341101),m,f,d[n+14],17,-1502002290),i,m,d[n+15],22,1236535329),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+1],5,-165796510),f,r,d[n+6],9,-1069501632),m,f,d[n+11],14,643717713),i,m,d[n+0],20,-373897302),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+5],5,-701558691),f,r,d[n+10],9,38016083),m,f,d[n+15],14,-660478335),i,m,d[n+4],20,-405537848),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+9],5,568446438),f,r,d[n+14],9,-1019803690),m,f,d[n+3],14,-187363961),i,m,d[n+8],20,1163531501),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+13],5,-1444681467),f,r,d[n+2],9,-51403784),m,f,d[n+7],14,1735328473),i,m,d[n+12],20,-1926607734),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+5],4,-378558),f,r,d[n+8],11,-2022574463),m,f,d[n+11],16,1839030562),i,m,d[n+14],23,-35309556),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+1],4,-1530992060),f,r,d[n+4],11,1272893353),m,f,d[n+7],16,-155497632),i,m,d[n+10],23,-1094730640),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+13],4,681279174),f,r,d[n+0],11,-358537222),m,f,d[n+3],16,-722521979),i,m,d[n+6],23,76029189),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+9],4,-640364487),f,r,d[n+12],11,-421815835),m,f,d[n+15],16,530742520),i,m,d[n+2],23,-995338651),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+0],6,-198630844),f,r,d[n+7],10,1126891415),m,f,d[n+14],15,-1416354905),i,m,d[n+5],21,-57434055),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+12],6,1700485571),f,r,d[n+3],10,-1894986606),m,f,d[n+10],15,-1051523),i,m,d[n+1],21,-2054922799),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+8],6,1873313359),f,r,d[n+15],10,-30611744),m,f,d[n+6],15,-1560198380),i,m,d[n+13],21,1309151649),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+4],6,-145523070),f,r,d[n+11],10,-1120210379),m,f,d[n+2],15,718787259),i,m,d[n+9],21,-343485551),m=safe_add(m,h),f=safe_add(f,t),r=safe_add(r,g),i=safe_add(i,e)}return Array(m,f,r,i)}\r\n\tfunction md5_cmn(d:any,_:any,m:any,f:any,r:any,i:any){return safe_add(bit_rol(safe_add(safe_add(_,d),safe_add(f,i)),r),m)}\r\n\tfunction md5_ff(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(_&m|~_&f,d,_,r,i,n)}\r\n\tfunction md5_gg(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(_&f|m&~f,d,_,r,i,n)}\r\n\tfunction md5_hh(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(_^m^f,d,_,r,i,n)}\r\n\tfunction md5_ii(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(m^(_|~f),d,_,r,i,n)}\r\n\tfunction safe_add(d:any,_:any){var m=(65535&d)+(65535&_);return(d>>16)+(_>>16)+(m>>16)<<16|65535&m}\r\n\tfunction bit_rol(d:any,_:any){return d<<_|d>>>32-_\r\n}\r\n\r\n/**\r\n * Check if email is valid\r\n *\r\n * @param {string} email - Target\r\n * @returns {boolean} - Follows format\r\n */\r\nexport function validateEmail(email: string) {\r\n\treturn /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/.test(email);\r\n}\r\n","import {md5} from './string';\r\n\r\n/**\r\n * Get profile image from Gravatar\r\n *\r\n * @param {string} email Account email address\r\n * @param {string} def Default image, can be a link or '404', see: https://docs.gravatar.com/general/images/\r\n * @returns {string} Gravatar URL\r\n */\r\nexport function gravatar(email: string, def='mp') {\r\n\tif(!email) return '';\r\n\treturn `https://www.gravatar.com/avatar/${md5(email)}?d=${def}`;\r\n}\r\n","/**\r\n * Return date formated highest to lowest: YYYY-MM-DD H:mm AM\r\n *\r\n * @param {Date | number | string} date Date or timestamp to convert to string\r\n * @return {string} Formated date\r\n */\r\nexport function formatDate(date: Date | number | string): string {\r\n\tif(typeof date == 'number' || typeof date == 'string') date = new Date(date);\r\n\tlet hours = date.getHours(), postfix = 'AM';\r\n\tif(hours >= 12) {\r\n\t\tif(hours > 12) hours -= 12;\r\n\t\tpostfix = 'PM';\r\n\t} else if(hours == 0) hours = 12;\r\n\treturn `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')}, ${hours}:${date.getMinutes().toString().padStart(2, '0')} ${postfix}`;\r\n}\r\n\r\n/**\r\n * Use in conjunction with `await` to pause an async script\r\n *\r\n * @example\r\n * ```js\r\n * await sleep(1000) // Pause for 1 second\r\n * ```\r\n *\r\n * @param {number} ms - Time to pause for in milliseconds\r\n * @returns {Promise<unknown>} - Resolves promise when it's time to resume\r\n */\r\nexport function sleep(ms: number): Promise<void> {\r\n\treturn new Promise(res => setTimeout(res, ms));\r\n}\r\n\r\n/**\r\n * Sleep while function returns true\r\n *\r\n * @example\r\n * ```js\r\n * let loading = true;\r\n * setTimeout(() => wait = false, 1000);\r\n * await sleepWhile(() => loading); // Won't continue until loading flag is false\r\n * ```\r\n *\r\n * @param {() => boolean | Promise<boolean>} fn Return true to continue\r\n * @param {number} checkInterval Run function ever x milliseconds\r\n * @return {Promise<void>} Callback when sleep is over\r\n */\r\nexport async function sleepWhile(fn : () => boolean | Promise<boolean>, checkInterval = 100): Promise<void> {\r\n\twhile(await fn()) await sleep(checkInterval);\r\n}\r\n\r\n/**\r\n * Calculate the number of milliseconds until date/time\r\n *\r\n * @param {Date | number} date - Target\r\n * @returns {number} - Number of milliseconds until target\r\n */\r\nexport function timeUntil(date: Date | number): number {\r\n\treturn (date instanceof Date ? date.getTime() : date) - (new Date()).getTime();\r\n}\r\n","/**\n * Return keys on a type as an array of strings\n *\n * @example\n * ```ts\n * type Person = {\n * \t firstName: string;\n * \t lastName: string;\n * \t age: number;\n * }\n *\n * const keys = typeKeys<Person>();\n * console.log(keys); // Output: [\"firstName\", \"lastName\", \"age\"]\n * ```\n *\n * @return {Array<keyof T>} Available keys\n */\nexport function tyoeKeys<T extends object>() {\n\treturn Object.keys(<T>{}) as Array<keyof T>;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.persist = exports.Persist = void 0;\n/**\n * Sync variable's value with persistent storage (LocalStorage by default)\n *\n * @example\n * ```ts\n * const theme = new Persist('theme.current', {default: 'os'});\n * console.log(theme.value); // Output: os\n *\n * theme.value = 'light'; // Any changes to `.value` will automatically sync with localStorage\n *\n * location.reload(); // Simulate refresh\n * console.log(theme.value); // Output: light\n * ```\n */\nclass Persist {\n key;\n options;\n /** Backend service to store data, must implement `Storage` interface */\n storage;\n /** Listeners which should be notified on changes */\n watches = {};\n /** Private value field */\n _value;\n /** Current value or default if undefined */\n get value() { return this._value !== undefined ? this._value : this.options?.default; }\n /** Set value with proxy object wrapper to sync future changes */\n set value(v) {\n if (v == null || typeof v != 'object')\n this._value = v;\n // @ts-ignore\n else\n this._value = new Proxy(v, {\n get: (target, p) => {\n const f = typeof target[p] == 'function';\n if (!f)\n return target[p];\n return (...args) => {\n const value = target[p](...args);\n this.save();\n return value;\n };\n },\n set: (target, p, newValue) => {\n target[p] = newValue;\n this.save();\n return true;\n }\n });\n this.save();\n }\n /**\n * @param {string} key Primary key value will be stored under\n * @param {PersistOptions<T>} options Configure using {@link PersistOptions}\n */\n constructor(key, options = {}) {\n this.key = key;\n this.options = options;\n this.storage = options.storage || localStorage;\n this.load();\n }\n /** Notify listeners of change */\n notify(value) {\n Object.values(this.watches).forEach(watch => watch(value));\n }\n /** Delete value from storage */\n clear() {\n this.storage.removeItem(this.key);\n }\n /** Save current value to storage */\n save() {\n if (this._value === undefined)\n this.clear();\n else\n this.storage.setItem(this.key, JSON.stringify(this._value));\n this.notify(this.value);\n }\n /** Load value from storage */\n load() {\n if (this.storage[this.key] != undefined) {\n let value = JSON.parse(this.storage.getItem(this.key));\n if (value != null && typeof value == 'object' && this.options.type)\n value.__proto__ = this.options.type.prototype;\n this.value = value;\n }\n else\n this.value = this.options.default || undefined;\n }\n /**\n * Callback function which is run when there are changes\n *\n * @param {(value: T) => any} fn Callback will run on each change; it's passed the next value & it's return is ignored\n * @returns {() => void} Function which will unsubscribe the watch/callback when called\n */\n watch(fn) {\n const index = Object.keys(this.watches).length;\n this.watches[index] = fn;\n return () => { delete this.watches[index]; };\n }\n /**\n * Return value as JSON string\n *\n * @returns {string} Stringified object as JSON\n */\n toString() { return JSON.stringify(this.value); }\n /**\n * Return current value\n *\n * @returns {T} Current value\n */\n valueOf() { return this.value; }\n}\nexports.Persist = Persist;\n/**\n * Sync class property with persistent storage (LocalStorage by default)\n *\n * @example\n * ```ts\n * class ThemeEngine {\n * @persist({default: 'os'}) current!: string;\n * }\n *\n * const theme = new ThemeEngine();\n * console.log(theme.current) // Output: os\n *\n * theme.current = 'light'; //Any changes will be automatically saved to localStorage\n *\n * location.reload(); // Simulate refresh\n * console.log(theme.current) // Output: light\n * ```\n *\n * @group Decorators\n * @param {PersistOptions<T> & {key?: string}} options Configure using {@link PersistOptions}\n * @returns Decorator function\n */\nfunction persist(options) {\n return (target, prop) => {\n const key = options?.key || `${target.constructor.name}.${prop.toString()}`;\n const wrapper = new Persist(key, options);\n Object.defineProperty(target, prop, {\n get: function () { return wrapper.value; },\n set: function (v) { wrapper.value = v; }\n });\n };\n}\nexports.persist = persist;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MemoryStorage = void 0;\n/**\n * Example storage backend. By default, persist will use localStorage however,\n * by implementing the Storage interface you can provide a custom backend to\n * store data anywhere you desire such as an external database or redis.\n *\n * @ignore\n */\nclass MemoryStorage {\n get length() { return Object.keys(this).length; }\n clear() { Object.keys(this).forEach(k => this.removeItem(k)); }\n getItem(key) { return this[key]; }\n key(index) { return Object.keys(this)[index]; }\n removeItem(key) { delete this[key]; }\n setItem(key, value) { this[key] = value; }\n}\nexports.MemoryStorage = MemoryStorage;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./persist\"), exports);\n__exportStar(require(\"./memory-storage\"), exports);\n"],"names":["clean","obj","undefinedOnly","o","key","value","deepCopy","deepMerge","target","sources","s","dotNotation","prop","set","i","arr","encodeQuery","data","flattenObj","parent","result","propName","formData","includes","values","allowMissing","e","type","isEqual","a","b","ta","tb","mixin","constructors","c","name","JSONAttemptParse","json","JSONSanitize","space","cache","addUnique","array","el","arrayDiff","makeUnique","v1","v2","caseInsensitiveSort","aVal","bVal","findByProp","v","flattenArr","sortByProp","reverse","n","makeArray","ASet","elements","items","index","Cache","ttl","__publicField","rows","complete","r","csv","flatten","headers","acc","row","h","PromiseProgress","executor","resolve","reject","reason","progress","p","l","promise","res","rej","args","newPromise","callback","resp","downloadFile","blob","url","downloadUrl","href","fileBrowser","options","input","timestampFilename","date","timestamp","uploadWithProgress","prog","xhr","f","event","TypedEmitter","listener","_a","unsubscribe","CustomError","message","code","err","newErr","BadRequestError","UnauthorizedError","PaymentRequiredError","ForbiddenError","NotFoundError","MethodNotAllowedError","NotAcceptableError","InternalServerError","NotImplementedError","BadGatewayError","ServiceUnavailableError","GatewayTimeoutError","errorFromCode","_Http","defaults","fn","opts","match","arg1","q","k","contentLength","total","loaded","reader","stream","controller","push","error","content","_b","Http","jwtDecode","token","base64","CliEffects","CliForeground","CliBackground","LOG_LEVEL","_Logger","namespace","text","length","char","end","t","padding","now","str","Logger","dec2Frac","num","gcd","len","denominator","numerator","divisor","remainder","fracToDec","frac","split","whole","LETTER_LIST","NUMBER_LIST","SYMBOL_LIST","CHAR_LIST","formatBytes","bytes","decimals","sizes","formatPhoneNumber","number","parts","insertAt","pad","start","randomHex","randomString","pool","randomStringBuilder","letters","numbers","symbols","matchAll","regex","ret","parseUrl","processed","groups","domains","query","val","md5","d","M","V","Y","X","_","m","g","md5_ii","md5_hh","md5_gg","md5_ff","safe_add","md5_cmn","bit_rol","validateEmail","email","gravatar","def","formatDate","hours","postfix","sleep","ms","sleepWhile","checkInterval","timeUntil","tyoeKeys","persist_1","persist$1","Persist","newValue","watch","persist","wrapper","memoryStorage","MemoryStorage","__createBinding","this","k2","desc","__exportStar","exports","require$$0","require$$1"],"mappings":"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","x_google_ignoreList":[17,18,19]}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/objects.ts","../src/array.ts","../src/aset.ts","../src/cache.ts","../src/csv.ts","../src/promise-progress.ts","../src/files.ts","../src/emitter.ts","../src/errors.ts","../src/http.ts","../src/jwt.ts","../src/logger.ts","../src/math.ts","../src/string.ts","../src/misc.ts","../src/time.ts","../src/types.ts","../node_modules/var-persist/dist/persist.js","../node_modules/var-persist/dist/memory-storage.js","../node_modules/var-persist/dist/index.js"],"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 * @param {T} value Object to copy\r\n * @returns {T} Type\r\n * @deprecated Please use `structuredClone`\r\n */\r\nexport function deepCopy<T>(value: T): T {\r\n\treturn structuredClone(value);\r\n}\r\n\r\n/**\r\n * Merge any number of objects into the target\r\n *\r\n * @param target Destination of all properties\r\n * @param sources Objects that will copied into target\r\n * @return {any} The des\r\n */\r\nexport function deepMerge<T>(target: any, ...sources: any[]): T {\r\n\tsources.forEach(s => {\r\n\t\tfor(const key in s) {\r\n\t\t\tif(s[key] && typeof s[key] == 'object' && !Array.isArray(s[key])) {\r\n\t\t\t\tif(!target[key]) target[key] = {};\r\n\t\t\t\tdeepMerge(target[key], s[key]);\r\n\t\t\t} else {\r\n\t\t\t\ttarget[key] = s[key];\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\treturn target;\r\n}\r\n\r\n/**\r\n * Get/set a property of an object using dot notation\r\n *\r\n * @example\r\n * ```ts\r\n * // Get a value\r\n * const name = dotNotation<string>(person, 'firstName');\r\n * const familyCarMake = dotNotation(family, 'cars[0].make');\r\n * // Set a value\r\n * dotNotation(family, 'cars[0].make', 'toyota');\r\n * ```\r\n *\r\n * @type T Return type\r\n * @param {Object} obj source object to search\r\n * @param {string} prop property name (Dot notation & indexing allowed)\r\n * @param {any} set Set object property to value, omit to fetch value instead\r\n * @return {T} property value\r\n */\r\nexport function dotNotation<T>(obj: any, prop: string, set: T): T;\r\nexport function dotNotation<T>(obj: any, prop: string): T | undefined;\r\nexport function dotNotation<T>(obj: any, prop: string, set?: T): T | undefined {\r\n\tif(obj == null || !prop) return undefined;\r\n\t// Split property string by '.' or [index]\r\n\treturn <T>prop.split(/[.[\\]]/g).filter(prop => prop.length).reduce((obj, prop, i, arr) => {\r\n\t\tif(prop[0] == '\"' || prop[0] == \"'\") prop = prop.slice(1, -1); // Take quotes out\r\n\t\tif(!obj?.hasOwnProperty(prop)) {\r\n\t\t\tif(set == undefined) return undefined;\r\n\t\t\tobj[prop] = {};\r\n\t\t}\r\n\t\tif(set !== undefined && i == arr.length - 1)\r\n\t\t\treturn obj[prop] = set;\r\n\t\treturn obj[prop];\r\n\t}, obj);\r\n}\r\n\r\n\r\n/**\r\n * Convert object into URL encoded query string\r\n *\r\n * @example\r\n * ```js\r\n * const query = encodeQuery({page: 1, size: 20});\r\n * console.log(query); // Output: \"page=1&size=20\"\r\n * ```\r\n *\r\n * @param {any} data - data to convert\r\n * @returns {string} - Encoded form data\r\n */\r\nexport function encodeQuery(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/**\r\n * Recursively flatten a nested object, while maintaining key structure\r\n *\r\n * @example\r\n * ```ts\r\n * const car = {honda: {model: \"Civic\"}};\r\n * console.log(flattenObj(car)); //Output {honda.model: \"Civic\"}\r\n * ```\r\n *\r\n * @param obj - Object to flatten\r\n * @param parent - Recursively check if key is a parent key or not\r\n * @param result - Result\r\n * @returns {object} - Flattened object\r\n */\r\nexport function flattenObj(obj: any, parent?: any, result: any = {}) {\r\n\tif(typeof obj === \"object\" && !Array.isArray(obj)) {\r\n\t\tfor(const key of Object.keys(obj)) {\r\n\t\t\tconst propName = parent ? parent + '.' + key : key;\r\n\t\t\tif(typeof obj[key] === 'object') {\r\n\t\t\t\tflattenObj(obj[key], propName, result);\r\n\t\t\t} else {\r\n\t\t\t\tresult[propName] = obj[key];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn result;\r\n\t}\r\n}\r\n\r\n/**\r\n * Convert object to FormData\r\n *\r\n * @param target - Object to convert\r\n * @return {FormData} - Form object\r\n */\r\nexport function formData(target: any): FormData {\r\n\tconst data = new FormData();\r\n\tObject.entries(target).forEach(([key, value]) => data.append(key, <any>value));\r\n\treturn data;\r\n}\r\n\r\n/**\r\n * Check that an object has the following values\r\n *\r\n * @example\r\n * ```ts\r\n * const test = {a: 2, b: 2};\r\n * includes(test, {a: 1}); // true\r\n * includes(test, {b: 1, c: 3}); // false\r\n * ```\r\n *\r\n * @param target Object to search\r\n * @param values Criteria to check against\r\n * @param allowMissing Only check the keys that are available on the target\r\n * @returns {boolean} Does target include all the values\r\n */\r\nexport function includes(target: any, values: any, allowMissing = false): boolean {\r\n\tif(target == undefined) return allowMissing;\r\n\tif(Array.isArray(values)) return values.findIndex((e: any, i: number) => !includes(target[i], values[i], allowMissing)) == -1;\r\n\tconst type = typeof values;\r\n\tif(type != typeof target) return false;\r\n\tif(type == 'object') {\r\n\t\treturn Object.keys(values).find(key => !includes(target[key], values[key], allowMissing)) == null;\r\n\t}\r\n\tif(type == 'function') return target.toString() == values.toString();\r\n\treturn target == values;\r\n}\r\n\r\n/**\r\n * Deep check if two objects are equal\r\n *\r\n * @param {any} a - first item to compare\r\n * @param {any} b - second item to compare\r\n * @returns {boolean} True if they match\r\n */\r\nexport function isEqual(a: any, b: any): boolean {\r\n\tconst ta = typeof a, tb = typeof b;\r\n\tif((ta != 'object' || a == null) || (tb != 'object' || b == null))\r\n\t\treturn ta == 'function' && tb == 'function' ? a.toString() == b.toString() : a === b;\r\n\tconst keys = Object.keys(a);\r\n\tif(keys.length != Object.keys(b).length) return false;\r\n\treturn Object.keys(a).every(key => isEqual(a[key], b[key]));\r\n}\r\n\r\n/**\r\n * Experimental: Combine multiple object prototypes into one\r\n *\r\n * @param target Object that will have prototypes added\r\n * @param {any[]} constructors Additionally prototypes that should be merged into target\r\n */\r\nexport function mixin(target: any, constructors: any[]) {\r\n\tconstructors.forEach(c => {\r\n\t\tObject.getOwnPropertyNames(c.prototype).forEach((name) => {\r\n\t\t\tObject.defineProperty(\r\n\t\t\t\ttarget.prototype,\r\n\t\t\t\tname,\r\n\t\t\t\tObject.getOwnPropertyDescriptor(c.prototype, name) ||\r\n\t\t\t\tObject.create(null)\r\n\t\t\t);\r\n\t\t});\r\n\t});\r\n}\r\n\r\n/**\r\n * Parse JSON but return the original string if it fails\r\n *\r\n * @param {string} json JSON string to parse\r\n * @return {string | T} Object if successful, original string otherwise\r\n */\r\nexport function JSONAttemptParse<T>(json: string): T | string {\r\n\ttry { return JSON.parse(json); }\r\n\tcatch { return json; }\r\n}\r\n\r\n/**\r\n * Convert an object to a JSON string avoiding any circular references.\r\n *\r\n * @param obj Object to convert to JSON\r\n * @param {number} space Format the JSON with spaces\r\n * @return {string} JSON string\r\n */\r\nexport function JSONSanitize(obj: any, space?: number): string {\r\n\tlet cache: any[] = [];\r\n\treturn JSON.stringify(obj, (key, value) => {\r\n\t\tif (typeof value === 'object' && value !== null) {\r\n\t\t\tif (cache.includes(value)) return;\r\n\t\t\tcache.push(value);\r\n\t\t}\r\n\t\treturn value;\r\n\t}, space);\r\n}\r\n","import {dotNotation, isEqual} from './objects';\n\n/**\n * Only add element to array if it isn't already included\n *\n * @example\n * ```js\n * const arr = addUnique([1, 2, 3], 3);\n * console.log(arr); // Output: [1, 2, 3]\n * ```\n *\n * @param {T[]} array Target array element will be added to\n * @param {T} el Unique element to add\n * @return {T[]} Array with element if it was unique\n * @deprecated Use ASet to create unique arrays\n */\nexport function addUnique<T>(array: T[], el: T): T[] {\n\tif(array.indexOf(el) === -1) array.push(el);\n\treturn array;\n}\n\n/**\n * Find all unique elements in arrays\n *\n * @param {any[]} a First array to compare\n * @param {any[]} b Second array to compare\n * @return {any[]} Unique elements\n * @deprecated Use ASet to perform Set operations on arrays\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 * Shorthand to find objects with a property value\n *\n * @example\n * ```js\n * const found = [\n * {name: 'Batman'},\n * {name: 'Superman'},\n * ].filter(findByProp('name', 'Batman'));\n * ```\n *\n * @param {string} prop Property to compare (Dot nation supported)\n * @param value Value property must have\n * @return {(v: any) => boolean} Function used by `filter` or `find`\n */\nexport function findByProp(prop: string, value: any) {\n\treturn (v: any) => isEqual(dotNotation(v, prop), value);\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\n/**\n * Make sure every element in array is unique\n *\n * @param {any[]} arr Array that will be filtered in place\n * @return {any[]} Original array\n * @deprecated Please use ASet to create a guaranteed unique array\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 *\n * @param {T[] | T} value Value that should be an array\n * @returns {T[]} Value in an array\n */\nexport function makeArray<T>(value: T | T[]): T[] {\n\treturn Array.isArray(value) ? value : [value];\n}\n","/**\n * An array which functions as a set. It guarantees unique elements\n * and provides set functions for comparisons\n */\nexport class ASet<T> extends Array {\n\t/** Number of elements in set */\n\tget size() {\n\t\treturn this.length;\n\t}\n\n\t/**\n\t * Array to create set from, duplicate values will be removed\n\t * @param {T[]} elements Elements which will be added to set\n\t */\n\tconstructor(elements: T[] = []) {\n\t\tsuper();\n\t\tif(!!elements?.['forEach'])\n\t\t\telements.forEach(el => this.add(el));\n\t}\n\n\t/**\n\t * Add elements to set if unique\n\t * @param items\n\t */\n\tadd(...items: T[]) {\n\t\titems.filter(el => !this.has(el)).forEach(el => this.push(el));\n\t}\n\n\t/**\n\t * Delete elements from set\n\t * @param items Elements that will be deleted\n\t */\n\tdelete(...items: T[]) {\n\t\titems.forEach(el => {\n\t\t\tconst index = this.indexOf(el);\n\t\t\tif(index != -1) this.slice(index, 1);\n\t\t})\n\t}\n\n\t/**\n\t * Create list of elements this set has which the comparison set does not\n\t * @param {ASet<T>} set Set to compare against\n\t * @return {ASet<T>} Different elements\n\t */\n\tdifference(set: ASet<T>) {\n\t\treturn new ASet<T>(this.filter(el => !set.has(el)));\n\t}\n\n\t/**\n\t * Check if set includes element\n\t * @param {T} el Element to look for\n\t * @return {boolean} True if element was found, false otherwise\n\t */\n\thas(el: T) {\n\t\treturn this.indexOf(el) != -1;\n\t}\n\n\t/**\n\t * Create list of elements this set has in common with the comparison set\n\t * @param {ASet<T>} set Set to compare against\n\t * @return {boolean} Set of common elements\n\t */\n\tintersection(set: ASet<T>) {\n\t\treturn new ASet<T>(this.filter(el => set.has(el)));\n\t}\n\n\t/**\n\t * Check if this set has no elements in common with the comparison set\n\t * @param {ASet<T>} set Set to compare against\n\t * @return {boolean} True if nothing in common, false otherwise\n\t */\n\tisDisjointFrom(set: ASet<T>) {\n\t\treturn this.intersection(set).size == 0;\n\t}\n\n\t/**\n\t * Check if all elements in this set are included in the comparison set\n\t * @param {ASet<T>} set Set to compare against\n\t * @return {boolean} True if all elements are included, false otherwise\n\t */\n\tisSubsetOf(set: ASet<T>) {\n\t\treturn this.findIndex(el => !set.has(el)) == -1;\n\t}\n\n\t/**\n\t * Check if all elements from comparison set are included in this set\n\t * @param {ASet<T>} set Set to compare against\n\t * @return {boolean} True if all elements are included, false otherwise\n\t */\n\tisSuperset(set: ASet<T>) {\n\t\treturn set.findIndex(el => !this.has(el)) == -1;\n\t}\n\n\t/**\n\t * Create list of elements that are only in one set but not both (XOR)\n\t * @param {ASet<T>} set Set to compare against\n\t * @return {ASet<T>} New set of unique elements\n\t */\n\tsymmetricDifference(set: ASet<T>) {\n\t\treturn new ASet([...this.difference(set), ...set.difference(this)]);\n\t}\n\n\t/**\n\t * Create joined list of elements included in this & the comparison set\n\t * @param {ASet<T>} set Set join\n\t * @return {ASet<T>} New set of both previous sets combined\n\t */\n\tunion(set: ASet<T> | Array<T>) {\n\t\treturn new ASet([...this, ...set]);\n\t}\n}\n","/**\n * Map of data which tracks whether it is a complete collection & offers optional expiry of cached values\n */\nexport class Cache<K extends string | number | symbol, T> {\n\tprivate store = <Record<K, T>>{};\n\n\t/** Support index lookups */\n\t[key: string | number | symbol]: T | any;\n\t/** Whether cache is complete */\n\tcomplete = false;\n\n\t/**\n\t * Create new cache\n\t *\n\t * @param {keyof T} key Default property to use as primary key\n\t * @param {number} ttl Default expiry in milliseconds\n\t */\n\tconstructor(public readonly key?: keyof T, public ttl?: number) {\n\t\treturn new Proxy(this, {\n\t\t\tget: (target: this, prop: string | symbol) => {\n\t\t\t\tif (prop in target) return (target as any)[prop];\n\t\t\t\treturn target.store[prop as K];\n\t\t\t},\n\t\t\tset: (target: this, prop: string | symbol, value: any) => {\n\t\t\t\tif (prop in target) (target as any)[prop] = value;\n\t\t\t\telse target.store[prop as K] = value;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate getKey(value: T): K {\n\t\tif(!this.key) throw new Error('No key defined');\n\t\treturn <K>value[this.key];\n\t}\n\n\t/**\n\t * Get all cached items\n\t *\n\t * @return {T[]} Array of items\n\t */\n\tall(): T[] {\n\t\treturn Object.values(this.store);\n\t}\n\n\t/**\n\t * Add a new item to the cache. Like set, but finds key automatically\n\t *\n\t * @param {T} value Item to add to cache\n\t * @param {number | undefined} ttl Override default expiry\n\t * @return {this}\n\t */\n\tadd(value: T, ttl = this.ttl): this {\n\t\tconst key = this.getKey(value);\n\t\tthis.set(key, value, ttl);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Add several rows to the cache\n\t *\n\t * @param {T[]} rows Several items that will be cached using the default key\n\t * @param complete Mark cache as complete & reliable, defaults to true\n\t * @return {this}\n\t */\n\taddAll(rows: T[], complete = true): this {\n\t\trows.forEach(r => this.add(r));\n\t\tthis.complete = complete;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Delete an item from the cache\n\t *\n\t * @param {K} key Item's primary key\n\t */\n\tdelete(key: K) {\n\t\tdelete this.store[key];\n\t}\n\n\t/**\n\t * Return cache as an array of key-value pairs\n\t * @return {[K, T][]} Key-value pairs array\n\t */\n\tentries(): [K, T][] {\n\t\treturn <[K, T][]>Object.entries(this.store);\n\t}\n\n\t/**\n\t * Get item from the cache\n\t * @param {K} key Key to lookup\n\t * @return {T} Cached item\n\t */\n\tget(key: K): T {\n\t\treturn this.store[key];\n\t}\n\n\t/**\n\t * Get a list of cached keys\n\t *\n\t * @return {K[]} Array of keys\n\t */\n\tkeys(): K[] {\n\t\treturn <K[]>Object.keys(this.store);\n\t}\n\n\t/**\n\t * Get map of cached items\n\t *\n\t * @return {Record<K, T>}\n\t */\n\tmap(): Record<K, T> {\n\t\treturn structuredClone(this.store);\n\t}\n\n\t/**\n\t * Add an item to the cache manually specifying the key\n\t *\n\t * @param {K} key Key item will be cached under\n\t * @param {T} value Item to cache\n\t * @param {number | undefined} ttl Override default expiry\n\t * @return {this}\n\t */\n\tset(key: K, value: T, ttl = this.ttl): this {\n\t\tthis.store[key] = value;\n\t\tif(ttl) setTimeout(() => {\n\t\t\tthis.complete = false;\n\t\t\tthis.delete(key);\n\t\t}, ttl);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Get all cached items\n\t *\n\t * @return {T[]} Array of items\n\t */\n\tvalues = this.all();\n}\n","import {dotNotation, flattenObj} from './objects.ts';\n\n/**\n * Convert an object to a CSV string\n *\n * @param {any[]} target Array of objects to create CSV from\n * @param {boolean} flatten Should nested object be flattened or treated as values\n * @return {string} CSV string\n */\nexport function csv(target: any[], flatten=true) {\n\tconst headers = target.reduce((acc, row) => {\n\t\tObject.keys(flatten ? flattenObj(row) : row)\n\t\t\t.forEach(key => { if(!acc.includes(key)) acc.push(key); });\n\t\treturn acc;\n\t}, []);\n\treturn [\n\t\theaders.join(','),\n\t\t...target.map(row => headers.map((h: string) => {\n\t\t\tconst value = dotNotation<any>(row, h);\n\t\t\tconst type = typeof value;\n\t\t\tif(type == 'string' && value.includes(',')) return `\"${value}\"`;\n\t\t\tif(type == 'object') return `\"${JSON.stringify(value)}\"`;\n\t\t\treturn value;\n\t\t}).join(','))\n\t].join('\\n');\n}\n","export type ProgressCallback = (progress: number) => any;\n\n/**\n * A promise that fires the `onProgress` callback on incremental progress\n *\n * @example\n * ```js\n * const promise = new Promise((resolve, reject, progress) => {\n * const max = 10;\n * \t for(let i = 0; i < max; i++) progress(i / max);\n * \t resolve(1);\n * });\n *\n * console.log(promise.progress);\n *\n * promise.onProgress(console.log)\n * .then(console.log)\n * .catch(console.error)\n * .finally(...);\n *\n * ```\n */\nexport class PromiseProgress<T> extends Promise<T> {\n\tprivate listeners: ProgressCallback[] = [];\n\n\tprivate _progress = 0;\n\tget progress() { return this._progress; }\n\tset progress(p: number) {\n\t\tif(p == this._progress) return;\n\t\tthis._progress = p;\n\t\tthis.listeners.forEach(l => l(p));\n\t}\n\n\tconstructor(executor: (resolve: (value: T) => any, reject: (reason: any) => void, progress: (progress: number) => any) => void) {\n\t\tsuper((resolve, reject) => executor(\n\t\t\t(value: T) => resolve(value),\n\t\t\t(reason: any) => reject(reason),\n\t\t\t(progress: number) => this.progress = progress,\n\t\t));\n\t}\n\n\tstatic from<T>(promise: Promise<T>): PromiseProgress<T> {\n\t\tif(promise instanceof PromiseProgress) return promise;\n\t\treturn new PromiseProgress<T>((res, rej) => promise\n\t\t\t.then((...args) => res(...args))\n\t\t\t.catch((...args) => rej(...args)));\n\t}\n\n\tprivate from(promise: Promise<T>): PromiseProgress<T> {\n\t\tconst newPromise = PromiseProgress.from(promise);\n\t\tthis.onProgress(p => newPromise.progress = p);\n\t\treturn newPromise;\n\t}\n\n\tonProgress(callback: ProgressCallback) {\n\t\tthis.listeners.push(callback);\n\t\treturn this;\n\t}\n\n\tthen(res?: (v: T) => any, rej?: (err: any) => any): PromiseProgress<any> {\n\t\tconst resp = super.then(res, rej);\n\t\treturn this.from(resp);\n\t}\n\n\tcatch(rej?: (err: any) => any): PromiseProgress<any> {\n\t\treturn this.from(super.catch(rej));\n\t}\n\n\tfinally(res?: () => any): PromiseProgress<any> {\n\t\treturn this.from(super.finally(res));\n\t}\n}\n","import {makeArray} from './array.ts';\nimport {JSONAttemptParse} from './objects.ts';\nimport {PromiseProgress} from './promise-progress';\n\n/**\n * Download blob as a file\n *\n * @param {Blob} blob File as a blob\n * @param {string} name Name blob will be downloaded as\n */\nexport function downloadFile(blob: Blob | string | string[], name: string) {\n\tif(!(blob instanceof Blob)) blob = new Blob(makeArray(blob));\n\tconst url = URL.createObjectURL(blob);\n\tdownloadUrl(url, name);\n\tURL.revokeObjectURL(url);\n}\n\n/**\n * Download a file from a URL\n *\n * @param href URL that will be downloaded\n * @param {string} name Override download name\n */\nexport function downloadUrl(href: any, name?: string) {\n\tconst a = document.createElement('a');\n\ta.href = href;\n\ta.download = name || href.split('/').pop();\n\tdocument.body.appendChild(a);\n\ta.click();\n\tdocument.body.removeChild(a);\n}\n\n/**\n * Open filebrowser & return selected file\n *\n * @param {{accept?: string, multiple?: boolean}} options accept - selectable mimetypes, multiple - Allow selecting more than 1 file\n * @return {Promise<File[]>} Array of selected files\n */\nexport function fileBrowser(options: {accept?: string, multiple?: boolean} = {}): Promise<File[]> {\n\treturn new Promise(res => {\n\t\tconst input = document.createElement('input');\n\t\tinput.type = 'file';\n\t\tinput.accept = options.accept || '*';\n\t\tinput.style.display='none';\n\t\tinput.multiple = !!options.multiple;\n\t\tinput.onblur = input.onchange = async () => {\n\t\t\tres(Array.from(<any>input.files));\n\t\t\tinput.remove();\n\t\t}\n\t\tdocument.body.appendChild(input);\n\t\tinput.click();\n\t});\n}\n\n/**\n * Create timestamp intended for filenames from a date\n *\n * @param {string} name Name of file, `{{TIMESTAMP}}` will be replaced\n * @param {Date | number | string} date Date to use for timestamp\n * @return {string} Interpolated filename, or the raw timestamp if name was omitted\n */\nexport function timestampFilename(name?: string, date: Date | number | string = new Date()) {\n\tif(typeof date == 'number' || typeof date == 'string') date = new Date(date);\n\tconst timestamp = `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')}_${date.getHours().toString().padStart(2, '0')}-${date.getMinutes().toString().padStart(2, '0')}-${date.getSeconds().toString().padStart(2, '0')}`;\n\treturn name ? name.replace('{{TIMESTAMP}}', timestamp) : timestamp;\n}\n\n/**\n * Upload file to URL with progress callback using PromiseProgress\n *\n * @param {{url: string, files: File[], headers?: {[p: string]: string}, withCredentials?: boolean}} options\n * @return {PromiseProgress<T>} Promise of request with `onProgress` callback\n */\nexport function uploadWithProgress<T>(options: {\n\turl: string;\n\tfiles: File[];\n\theaders?: {[key: string]: string};\n\twithCredentials?: boolean;\n}): PromiseProgress<T> {\n\treturn new PromiseProgress<T>((res, rej, prog) => {\n\t\tconst xhr = new XMLHttpRequest();\n\t\tconst formData = new FormData();\n\t\toptions.files.forEach(f => formData.append('file', f));\n\n\t\txhr.withCredentials = !!options.withCredentials;\n\t\txhr.upload.addEventListener('progress', (event) => event.lengthComputable ? prog(event.loaded / event.total) : null);\n\t\txhr.addEventListener('loadend', () => res(<T>JSONAttemptParse(xhr.responseText)));\n\t\txhr.addEventListener('error', () => rej(JSONAttemptParse(xhr.responseText)));\n\t\txhr.addEventListener('timeout', () => rej({error: 'Request timed out'}));\n\n\t\txhr.open('POST', options.url);\n\t\tObject.entries(options.headers || {}).forEach(([key, value]) => xhr.setRequestHeader(key, value));\n\t\txhr.send(formData);\n\t});\n}\n","export type Listener = (...args: any[]) => any;\r\nexport type TypedEvents = {[k in string | symbol]: Listener} & {'*': (event: string, ...args: any[]) => any};\r\n\r\nexport type NamespaceEvents<Namespace extends string, Events extends TypedEvents> = {\r\n\t[K in keyof Events as `${Namespace}:${Extract<K, string>}`]: Events[K];\r\n};\r\n\r\nexport class TypedEmitter<T extends TypedEvents = TypedEvents> {\r\n\tprivate static listeners: {[key: string]: Listener[]} = {};\r\n\r\n\tprivate listeners: { [key in keyof T]?: Listener[] } = {};\r\n\r\n\tstatic emit(event: any, ...args: any[]) {\r\n\t\t(this.listeners['*'] || []).forEach(l => l(event, ...args));\r\n\t\t(this.listeners[event.toString()] || []).forEach(l => l(...args));\r\n\t};\r\n\r\n\tstatic off(event: any, listener: Listener) {\r\n\t\tconst e = event.toString();\r\n\t\tthis.listeners[e] = (this.listeners[e] || []).filter(l => l === listener);\r\n\t}\r\n\r\n\tstatic on(event: any, listener: Listener) {\r\n\t\tconst e = event.toString();\r\n\t\tif(!this.listeners[e]) this.listeners[e] = [];\r\n\t\tthis.listeners[e]?.push(listener);\r\n\t\treturn () => this.off(event, listener);\r\n\t}\r\n\r\n\tstatic once(event: any, listener?: Listener): Promise<any> {\r\n\t\treturn new Promise(res => {\r\n\t\t\tconst unsubscribe = this.on(event, <any>((...args: any) => {\r\n\t\t\t\tres(args.length == 1 ? args[0] : args);\r\n\t\t\t\tif(listener) listener(...args);\r\n\t\t\t\tunsubscribe();\r\n\t\t\t}));\r\n\t\t});\r\n\t}\r\n\r\n\temit<K extends keyof T>(event: K, ...args: Parameters<T[K]>) {\r\n\t\t(this.listeners['*'] || []).forEach(l => l(event, ...args));\r\n\t\t(this.listeners[event] || []).forEach(l => l(...args));\r\n\t};\r\n\r\n\toff<K extends keyof T = string>(event: K, listener: T[K]) {\r\n\t\tthis.listeners[event] = (this.listeners[event] || []).filter(l => l === listener);\r\n\t}\r\n\r\n\ton<K extends keyof T = string>(event: K, listener: T[K]) {\r\n\t\tif(!this.listeners[event]) this.listeners[event] = [];\r\n\t\tthis.listeners[event]?.push(listener);\r\n\t\treturn () => this.off(event, listener);\r\n\t}\r\n\r\n\tonce<K extends keyof T = string>(event: K, listener?: T[K]): Promise<any> {\r\n\t\treturn new Promise(res => {\r\n\t\t\tconst unsubscribe = this.on(event, <any>((...args: any) => {\r\n\t\t\t\tres(args.length == 1 ? args[0] : args);\r\n\t\t\t\tif(listener) listener(...args);\r\n\t\t\t\tunsubscribe();\r\n\t\t\t}));\r\n\t\t});\r\n\t}\r\n}\r\n","export class CustomError extends Error {\r\n\tstatic code = 500;\r\n\r\n\tprivate _code?: number;\r\n\tget code(): number { return this._code || (<any>this).constructor.code; }\r\n\tset code(c: number) { this._code = c; }\r\n\r\n\tconstructor(message?: string, code?: number) {\r\n\t\tsuper(message);\r\n\t\tif(code != null) this._code = code;\r\n\t}\r\n\r\n\tstatic from(err: Error): CustomError {\r\n\t\tconst code = Number((<any>err).statusCode) ?? Number((<any>err).code);\r\n\t\tconst newErr = new this(err.message || err.toString());\r\n\t\treturn Object.assign(newErr, {\r\n\t\t\tstack: err.stack,\r\n\t\t\t...err,\r\n\t\t\tcode: code ?? undefined\r\n\t\t});\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code != undefined;\r\n\t}\r\n\r\n\ttoString() {\r\n\t\treturn this.message || super.toString();\r\n\t}\r\n}\r\n\r\nexport class BadRequestError extends CustomError {\r\n\tstatic code = 400;\r\n\r\n\tconstructor(message: string = 'Bad Request') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class UnauthorizedError extends CustomError {\r\n\tstatic code = 401;\r\n\r\n\tconstructor(message: string = 'Unauthorized') {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n\tstatic instanceof(err: Error) {\r\n\t\treturn (<any>err).constructor.code == this.code;\r\n\t}\r\n}\r\n\r\nexport class PaymentRequiredError extends CustomError {\r\n\tstatic code = 402;\r\n\r\n\tconstructor(message: string = 'Payment Required') {\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 MethodNotAllowedError extends CustomError {\r\n\tstatic code = 405;\r\n\r\n\tconstructor(message: string = 'Method Not Allowed') {\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 NotAcceptableError extends CustomError {\r\n\tstatic code = 406;\r\n\r\n\tconstructor(message: string = 'Not Acceptable') {\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\r\nexport class NotImplementedError extends CustomError {\r\n\tstatic code = 501;\r\n\r\n\tconstructor(message: string = 'Not Implemented') {\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 BadGatewayError extends CustomError {\r\n\tstatic code = 502;\r\n\r\n\tconstructor(message: string = 'Bad Gateway') {\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 ServiceUnavailableError extends CustomError {\r\n\tstatic code = 503;\r\n\r\n\tconstructor(message: string = 'Service Unavailable') {\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 GatewayTimeoutError extends CustomError {\r\n\tstatic code = 504;\r\n\r\n\tconstructor(message: string = 'Gateway Timeout') {\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\n/**\r\n * Create the correct error object from a status code\r\n * @param {number} code Will be converted to respective error (ex. 404 -> NotFoundError)\r\n * @param {string} message Override default error message\r\n * @return {CustomError} The proper error type\r\n */\r\nexport function errorFromCode(code: number, message?: string) {\r\n\tif(code >= 200 && code < 300) return null;\r\n\tswitch(code) {\r\n\t\tcase 400:\r\n\t\t\treturn new BadRequestError(message);\r\n\t\tcase 401:\r\n\t\t\treturn new UnauthorizedError(message);\r\n\t\tcase 402:\r\n\t\t\treturn new PaymentRequiredError(message);\r\n\t\tcase 403:\r\n\t\t\treturn new ForbiddenError(message);\r\n\t\tcase 404:\r\n\t\t\treturn new NotFoundError(message);\r\n\t\tcase 405:\r\n\t\t\treturn new MethodNotAllowedError(message);\r\n\t\tcase 406:\r\n\t\t\treturn new NotAcceptableError(message);\r\n\t\tcase 500:\r\n\t\t\treturn new InternalServerError(message);\r\n\t\tcase 501:\r\n\t\t\treturn new NotImplementedError(message);\r\n\t\tcase 502:\r\n\t\t\treturn new BadGatewayError(message);\r\n\t\tcase 503:\r\n\t\t\treturn new ServiceUnavailableError(message);\r\n\t\tcase 504:\r\n\t\t\treturn new GatewayTimeoutError(message);\r\n\t\tdefault:\r\n\t\t\treturn new CustomError(message, code);\r\n\t}\r\n}\r\n","import {clean} from './objects';\nimport {PromiseProgress} from './promise-progress';\n\nexport type DecodedResponse<T> = Response & {data: T | null}\n\nexport type HttpInterceptor = (response: Response, next: () => void) => void;\n\nexport type HttpRequestOptions = {\n\tbody?: any;\n\tdecode?: boolean;\n\tfragment?: string;\n\theaders?: {[key: string | symbol]: string | null | undefined};\n\tmethod?: 'GET' | 'POST' | 'PATCH' | 'PUT' | 'DELETE';\n\tquery?: {key: string, value: string}[] | {[key: string]: string};\n\turl?: string;\n\t[key: string]: any;\n}\n\nexport type HttpDefaults = {\n\theaders?: {[key: string | symbol]: string | null | undefined};\n\tinterceptors?: HttpInterceptor[];\n\turl?: string;\n}\n\nexport class Http {\n\tprivate static interceptors: {[key: string]: HttpInterceptor} = {};\n\n\tstatic headers: {[key: string]: string | null | undefined} = {};\n\n\tprivate interceptors: {[key: string]: HttpInterceptor} = {}\n\n\theaders: {[key: string]: string | null | undefined} = {}\n\turl!: string | null;\n\n\tconstructor(defaults: HttpDefaults = {}) {\n\t\tthis.url = defaults.url ?? null;\n\t\tthis.headers = defaults.headers || {};\n\t\tif(defaults.interceptors) {\n\t\t\tdefaults.interceptors.forEach(i => Http.addInterceptor(i));\n\t\t}\n\t}\n\n\tstatic addInterceptor(fn: HttpInterceptor): () => void {\n\t\tconst key = Object.keys(Http.interceptors).length.toString();\n\t\tHttp.interceptors[key] = fn;\n\t\treturn () => { Http.interceptors[key] = <any>null; }\n\t}\n\n\taddInterceptor(fn: HttpInterceptor): () => void {\n\t\tconst key = Object.keys(this.interceptors).length.toString();\n\t\tthis.interceptors[key] = fn;\n\t\treturn () => { this.interceptors[key] = <any>null; }\n\t}\n\n\trequest<T>(opts: HttpRequestOptions = {}): PromiseProgress<DecodedResponse<T>> {\n\t\tif(!this.url && !opts.url) throw new Error('URL needs to be set');\n\t\tlet url = (opts.url?.startsWith('http') ? opts.url : (this.url || '') + (opts.url || '')).replace(/([^:]\\/)\\/+/g, '$1');\n\t\tif(opts.fragment) url.includes('#') ? url.replace(/#.*(\\?|\\n)/g, (match, arg1) => `#${opts.fragment}${arg1}`) : url += '#' + opts.fragment;\n\t\tif(opts.query) {\n\t\t\tconst q = Array.isArray(opts.query) ? opts.query :\n\t\t\t\tObject.keys(opts.query).map(k => ({key: k, value: (<any>opts.query)[k]}))\n\t\t\turl += (url.includes('?') ? '&' : '?') + q.map(q => `${q.key}=${q.value}`).join('&');\n\t\t}\n\n\t\t// Prep headers\n\t\tconst headers = <any>clean({\n\t\t\t'Content-Type': !opts.body ? undefined : (opts.body instanceof FormData ? 'multipart/form-data' : 'application/json'),\n\t\t\t...Http.headers,\n\t\t\t...this.headers,\n\t\t\t...opts.headers\n\t\t});\n\n\t\tif(typeof opts.body == 'object' && opts.body != null && headers['Content-Type'] == 'application/json')\n\t\t\topts.body = JSON.stringify(opts.body);\n\n\t\t// Send request\n\t\treturn new PromiseProgress((res, rej, prog) => {\n\t\t\tfetch(url, {\n\t\t\t\theaders,\n\t\t\t\tmethod: opts.method || (opts.body ? 'POST' : 'GET'),\n\t\t\t\tbody: opts.body\n\t\t\t}).then(async (resp: any) => {\n\t\t\t\tfor(let fn of [...Object.values(Http.interceptors), ...Object.values(this.interceptors)]) {\n\t\t\t\t\tawait new Promise<void>(res => fn(resp, () => res()));\n\t\t\t\t}\n\n\t\t\t\tconst contentLength = resp.headers.get('Content-Length');\n\t\t\t\tconst total = contentLength ? parseInt(contentLength, 10) : 0;\n\t\t\t\tlet loaded = 0;\n\n\t\t\t\tconst reader = resp.body?.getReader();\n\t\t\t\tconst stream = new ReadableStream({\n\t\t\t\t\tstart(controller) {\n\t\t\t\t\t\tfunction push() {\n\t\t\t\t\t\t\treader?.read().then((event: any) => {\n\t\t\t\t\t\t\t\tif(event.done) return controller.close();\n\t\t\t\t\t\t\t\tloaded += event.value.byteLength;\n\t\t\t\t\t\t\t\tprog(loaded / total);\n\t\t\t\t\t\t\t\tcontroller.enqueue(event.value);\n\t\t\t\t\t\t\t\tpush();\n\t\t\t\t\t\t\t}).catch((error: any) => controller.error(error));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpush();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tresp.data = new Response(stream);\n\t\t\t\tif(opts.decode == null || opts.decode) {\n\t\t\t\t\tconst content = resp.headers.get('Content-Type')?.toLowerCase();\n\t\t\t\t\tif(content?.includes('form')) resp.data = <T>await resp.data.formData();\n\t\t\t\t\telse if(content?.includes('json')) resp.data = <T>await resp.data.json();\n\t\t\t\t\telse if(content?.includes('text')) resp.data = <T>await resp.data.text();\n\t\t\t\t\telse if(content?.includes('application')) resp.data = <T>await resp.data.blob();\n\t\t\t\t}\n\n\t\t\t\tif(resp.ok) res(resp);\n\t\t\t\telse rej(resp);\n\t\t\t})\n\t\t});\n\t}\n}\n","import {JSONAttemptParse} from './objects.ts';\n\n/**\n * Decode a JWT payload, this will not check for tampering so be careful\n *\n * @param {string} token JWT to decode\n * @return {unknown} JWT payload\n */\nexport function jwtDecode<T>(token: string): T {\n\tconst base64 = token.split('.')[1]\n\t\t.replace(/-/g, '+').replace(/_/g, '/');\n\treturn <T>JSONAttemptParse(decodeURIComponent(atob(base64).split('').map(function(c) {\n\t\treturn '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\n\t}).join('')));\n}\n","import {TypedEmitter, TypedEvents} from './emitter';\r\n\r\nexport const CliEffects = {\r\n\tCLEAR: \"\\x1b[0m\",\r\n\tBRIGHT: \"\\x1b[1m\",\r\n\tDIM: \"\\x1b[2m\",\r\n\tUNDERSCORE: \"\\x1b[4m\",\r\n\tBLINK: \"\\x1b[5m\",\r\n\tREVERSE: \"\\x1b[7m\",\r\n\tHIDDEN: \"\\x1b[8m\",\r\n}\r\n\r\nexport const CliForeground = {\r\n\tBLACK: '\\x1b[30m',\r\n\tRED: '\\x1b[31m',\r\n\tGREEN: '\\x1b[32m',\r\n\tYELLOW: '\\x1b[33m',\r\n\tBLUE: '\\x1b[34m',\r\n\tMAGENTA: '\\x1b[35m',\r\n\tCYAN: '\\x1b[36m',\r\n\tLIGHT_GREY: '\\x1b[37m',\r\n\tGREY: '\\x1b[90m',\r\n\tLIGHT_RED: '\\x1b[91m',\r\n\tLIGHT_GREEN: '\\x1b[92m',\r\n\tLIGHT_YELLOW: '\\x1b[93m',\r\n\tLIGHT_BLUE: '\\x1b[94m',\r\n\tLIGHT_MAGENTA: '\\x1b[95m',\r\n\tLIGHT_CYAN: '\\x1b[96m',\r\n\tWHITE: '\\x1b[97m',\r\n}\r\n\r\nexport const CliBackground = {\r\n\tBLACK: \"\\x1b[40m\",\r\n\tRED: \"\\x1b[41m\",\r\n\tGREEN: \"\\x1b[42m\",\r\n\tYELLOW: \"\\x1b[43m\",\r\n\tBLUE: \"\\x1b[44m\",\r\n\tMAGENTA: \"\\x1b[45m\",\r\n\tCYAN: \"\\x1b[46m\",\r\n\tWHITE: \"\\x1b[47m\",\r\n\tGREY: \"\\x1b[100m\",\r\n}\r\n\r\nexport enum LOG_LEVEL {\r\n\tERROR = 0,\r\n\tWARN = 1,\r\n\tINFO = 2,\r\n\tLOG = 3,\r\n\tDEBUG = 4,\r\n}\r\n\r\nexport type LoggerEvents = TypedEvents & {\r\n\t'ERROR': (...args: any[]) => any;\r\n\t'WARN': (...args: any[]) => any;\r\n\t'INFO': (...args: any[]) => any;\r\n\t'LOG': (...args: any[]) => any;\r\n\t'DEBUG': (...args: any[]) => any;\r\n};\r\n\r\nexport class Logger extends TypedEmitter<LoggerEvents> {\r\n\tstatic LOG_LEVEL: LOG_LEVEL = LOG_LEVEL.DEBUG;\r\n\r\n\tconstructor(public readonly namespace?: string) {\r\n\t\tsuper();\r\n\t}\r\n\r\n\tprivate pad(text: any, length: number, char: string, end = false) {\r\n\t\tconst t = text.toString();\r\n\t\tconst l = length - t.length;\r\n\t\tif(l <= 0) return t;\r\n\t\tconst padding = Array(~~(l / char.length)).fill(char).join('');\r\n\t\treturn !end ? padding + t : t + padding;\r\n\t}\r\n\r\n\tprivate format(...text: string[]): string {\r\n\t\tconst now = new Date();\r\n\t\tconst timestamp = `${now.getFullYear()}-${now.getMonth() + 1}-${now.getDate()} ${this.pad(now.getHours().toString(), 2, '0')}:${this.pad(now.getMinutes().toString(), 2, '0')}:${this.pad(now.getSeconds().toString(), 2, '0')}.${this.pad(now.getMilliseconds().toString(), 3, '0', true)}`;\r\n\t\treturn `${timestamp}${this.namespace ? ` [${this.namespace}]` : ''} ${text.join(' ')}`;\r\n\t}\r\n\r\n\tdebug(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.DEBUG) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.DEBUG, str);\r\n\t\tconsole.debug(CliForeground.LIGHT_GREY + str + CliEffects.CLEAR);\r\n\t}\r\n\r\n\tlog(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.LOG) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.LOG, str);\r\n\t\tconsole.log(CliEffects.CLEAR + str);\r\n\t}\r\n\r\n\tinfo(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.INFO) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.INFO, str);\r\n\t\tconsole.info(CliForeground.BLUE + str + CliEffects.CLEAR);\r\n\t}\r\n\r\n\twarn(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.WARN) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.WARN, str);\r\n\t\tconsole.warn(CliForeground.YELLOW + str + CliEffects.CLEAR);\r\n\t}\r\n\r\n\terror(...args: string[]) {\r\n\t\tif(Logger.LOG_LEVEL < LOG_LEVEL.ERROR) return;\r\n\t\tconst str = this.format(...args);\r\n\t\tLogger.emit(LOG_LEVEL.ERROR, str);\r\n\t\tconsole.error(CliForeground.RED + str + CliEffects.CLEAR);\r\n\t}\r\n}\r\n","/**\n * Convert decimal number to fraction\n *\n * @example\n * ```js\n * dec2Frac(1.25) // Outputs: \"1 1/4\"\n * ```\n *\n * @param {number} num Number to convert\n * @return {string} Fraction with remainder\n */\nexport function dec2Frac(num: number) {\n\tconst gcd = (a: number, b: number): number => {\n\t\tif (b < 0.0000001) return a;\n\t\treturn gcd(b, ~~(a % b));\n\t};\n\n\tconst len = num.toString().length - 2;\n\tlet denominator = Math.pow(10, len);\n\tlet numerator = num * denominator;\n\tconst divisor = gcd(numerator, denominator);\n\tnumerator = ~~(numerator / divisor);\n\tdenominator = ~~(denominator / divisor)\n\tconst remainder = ~~(numerator / denominator);\n\tnumerator -= remainder * denominator;\n\treturn `${remainder ? remainder + ' ' : ''}${~~(numerator)}/${~~(denominator)}`;\n}\n\n/**\n * Convert fraction to decimal number\n *\n * @example\n * ```js\n * fracToDec('1 1/4') // Outputs: 1.25\n * ```\n *\n * @param {string} frac Fraction to convert\n * @return {number} Faction as a decimal\n */\nexport function fracToDec(frac: string) {\n\tlet split = frac.split(' ');\n\tconst whole = split.length == 2 ? Number(split[0]) : 0;\n\tsplit = (<string>split.pop()).split('/');\n\treturn whole + (Number(split[0]) / Number(split[1]));\n}\n","import {dotNotation, flattenObj} from './objects.ts';\r\n\r\n/**\r\n * String of all letters\r\n */\r\nconst LETTER_LIST = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\r\n\r\n/**\r\n * String of all numbers\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\n/**\r\n * Convert number of bytes into a human-readable size\r\n *\r\n * @param {number} bytes Number of bytes\r\n * @param {number} decimals Decimal places to preserve\r\n * @return {string} Formated size\r\n */\r\nexport function formatBytes(bytes: number, decimals = 2) {\r\n\tif (bytes === 0) return '0 Bytes';\r\n\tconst k = 1024;\r\n\tconst sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\r\n\tconst i = Math.floor(Math.log(bytes) / Math.log(k));\r\n\treturn parseFloat((bytes / Math.pow(k, i)).toFixed(decimals)) + ' ' + sizes[i];\r\n}\r\n\r\n/**\r\n * Extract numbers from a string & create a formated phone number: +1 (123) 456-7890\r\n *\r\n * @param {string} number String that will be parsed for numbers\r\n * @return {string} Formated phone number\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 * ```js\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\n/**\r\n * Add padding to string\r\n *\r\n * @example\r\n * ```js\r\n * const now = new Date();\r\n * const padded = now.getHours() + ':' + pad(now.getMinutes(), 2, '0');\r\n * console.log(padded); // Output: \"2:05\"\r\n * ```\r\n *\r\n * @param text Text that will be padded\r\n * @param {number} length Target length\r\n * @param {string} char Character to use as padding, defaults to space\r\n * @param {boolean} start Will pad start of text if true, or the end if false\r\n * @return {string} Padded string\r\n * @deprecated Please use `String.padStart` & `String.padEnd`\r\n */\r\nexport function pad(text: any, length: number, char: string = ' ', start = true) {\r\n\tif(start) return text.toString().padStart(length, char);\r\n\treturn text.toString().padEnd(length, char);\r\n}\r\n\r\n/**\r\n * Generate a random hexadecimal value\r\n *\r\n * @param {number} length Number of hexadecimal place values\r\n * @return {string} Hexadecimal number as a string\r\n */\r\nexport function randomHex(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 * 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/** 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 * Break a URL string into its parts for easy parsing\r\n *\r\n * @param {string} url URL string that will be parsed\r\n * @returns {RegExpExecArray} Parts of URL\r\n */\r\nexport function parseUrl(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\r\n/**\r\n * Create MD5 hash using native javascript\r\n *\r\n * @param d String to hash\r\n * @returns {string} Hashed string\r\n */\r\nexport function md5(d: string) {\r\n\tvar r = M(V(Y(X(d),8*d.length)));return r.toLowerCase()};\r\n\tfunction M(d:any){for(var _,m=\"0123456789ABCDEF\",f=\"\",r=0;r<d.length;r++)_=d.charCodeAt(r),f+=m.charAt(_>>>4&15)+m.charAt(15&_);return f}\r\n\tfunction X(d:any){for(var _=Array(d.length>>2),m=0;m<_.length;m++)_[m]=0;for(m=0;m<8*d.length;m+=8)_[m>>5]|=(255&d.charCodeAt(m/8))<<m%32;return _}\r\n\tfunction V(d:any){for(var _=\"\",m=0;m<32*d.length;m+=8)_+=String.fromCharCode(d[m>>5]>>>m%32&255);return _}\r\n\tfunction Y(d:any,_:any){d[_>>5]|=128<<_%32,d[14+(_+64>>>9<<4)]=_;for(var m=1732584193,f=-271733879,r=-1732584194,i=271733878,n=0;n<d.length;n+=16){var h=m,t=f,g=r,e=i;f=md5_ii(f=md5_ii(f=md5_ii(f=md5_ii(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_ff(f=md5_ff(f=md5_ff(f=md5_ff(f,r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+0],7,-680876936),f,r,d[n+1],12,-389564586),m,f,d[n+2],17,606105819),i,m,d[n+3],22,-1044525330),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+4],7,-176418897),f,r,d[n+5],12,1200080426),m,f,d[n+6],17,-1473231341),i,m,d[n+7],22,-45705983),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+8],7,1770035416),f,r,d[n+9],12,-1958414417),m,f,d[n+10],17,-42063),i,m,d[n+11],22,-1990404162),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+12],7,1804603682),f,r,d[n+13],12,-40341101),m,f,d[n+14],17,-1502002290),i,m,d[n+15],22,1236535329),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+1],5,-165796510),f,r,d[n+6],9,-1069501632),m,f,d[n+11],14,643717713),i,m,d[n+0],20,-373897302),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+5],5,-701558691),f,r,d[n+10],9,38016083),m,f,d[n+15],14,-660478335),i,m,d[n+4],20,-405537848),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+9],5,568446438),f,r,d[n+14],9,-1019803690),m,f,d[n+3],14,-187363961),i,m,d[n+8],20,1163531501),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+13],5,-1444681467),f,r,d[n+2],9,-51403784),m,f,d[n+7],14,1735328473),i,m,d[n+12],20,-1926607734),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+5],4,-378558),f,r,d[n+8],11,-2022574463),m,f,d[n+11],16,1839030562),i,m,d[n+14],23,-35309556),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+1],4,-1530992060),f,r,d[n+4],11,1272893353),m,f,d[n+7],16,-155497632),i,m,d[n+10],23,-1094730640),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+13],4,681279174),f,r,d[n+0],11,-358537222),m,f,d[n+3],16,-722521979),i,m,d[n+6],23,76029189),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+9],4,-640364487),f,r,d[n+12],11,-421815835),m,f,d[n+15],16,530742520),i,m,d[n+2],23,-995338651),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+0],6,-198630844),f,r,d[n+7],10,1126891415),m,f,d[n+14],15,-1416354905),i,m,d[n+5],21,-57434055),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+12],6,1700485571),f,r,d[n+3],10,-1894986606),m,f,d[n+10],15,-1051523),i,m,d[n+1],21,-2054922799),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+8],6,1873313359),f,r,d[n+15],10,-30611744),m,f,d[n+6],15,-1560198380),i,m,d[n+13],21,1309151649),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+4],6,-145523070),f,r,d[n+11],10,-1120210379),m,f,d[n+2],15,718787259),i,m,d[n+9],21,-343485551),m=safe_add(m,h),f=safe_add(f,t),r=safe_add(r,g),i=safe_add(i,e)}return Array(m,f,r,i)}\r\n\tfunction md5_cmn(d:any,_:any,m:any,f:any,r:any,i:any){return safe_add(bit_rol(safe_add(safe_add(_,d),safe_add(f,i)),r),m)}\r\n\tfunction md5_ff(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(_&m|~_&f,d,_,r,i,n)}\r\n\tfunction md5_gg(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(_&f|m&~f,d,_,r,i,n)}\r\n\tfunction md5_hh(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(_^m^f,d,_,r,i,n)}\r\n\tfunction md5_ii(d:any,_:any,m:any,f:any,r:any,i:any,n:any){return md5_cmn(m^(_|~f),d,_,r,i,n)}\r\n\tfunction safe_add(d:any,_:any){var m=(65535&d)+(65535&_);return(d>>16)+(_>>16)+(m>>16)<<16|65535&m}\r\n\tfunction bit_rol(d:any,_:any){return d<<_|d>>>32-_\r\n}\r\n\r\n/**\r\n * Check if email is valid\r\n *\r\n * @param {string} email - Target\r\n * @returns {boolean} - Follows format\r\n */\r\nexport function validateEmail(email: string) {\r\n\treturn /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/.test(email);\r\n}\r\n","import {md5} from './string';\r\n\r\n/**\r\n * Get profile image from Gravatar\r\n *\r\n * @param {string} email Account email address\r\n * @param {string} def Default image, can be a link or '404', see: https://docs.gravatar.com/general/images/\r\n * @returns {string} Gravatar URL\r\n */\r\nexport function gravatar(email: string, def='mp') {\r\n\tif(!email) return '';\r\n\treturn `https://www.gravatar.com/avatar/${md5(email)}?d=${def}`;\r\n}\r\n\r\n/**\r\n * Escape any regex special characters to avoid misinterpretation during search\r\n *\r\n * @param {string} value String which should be escaped\r\n * @return {string} New escaped sequence\r\n */\r\nexport function escapeRegex(value: string) {\r\n\treturn value.replace(/[.*+?^${}()|\\[\\]\\\\]/g, '\\\\$&');\r\n}\r\n","/**\r\n * Return date formated highest to lowest: YYYY-MM-DD H:mm AM\r\n *\r\n * @param {Date | number | string} date Date or timestamp to convert to string\r\n * @return {string} Formated date\r\n */\r\nexport function formatDate(date: Date | number | string): string {\r\n\tif(typeof date == 'number' || typeof date == 'string') date = new Date(date);\r\n\tlet hours = date.getHours(), postfix = 'AM';\r\n\tif(hours >= 12) {\r\n\t\tif(hours > 12) hours -= 12;\r\n\t\tpostfix = 'PM';\r\n\t} else if(hours == 0) hours = 12;\r\n\treturn `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')}, ${hours}:${date.getMinutes().toString().padStart(2, '0')} ${postfix}`;\r\n}\r\n\r\n/**\r\n * Use in conjunction with `await` to pause an async script\r\n *\r\n * @example\r\n * ```js\r\n * await sleep(1000) // Pause for 1 second\r\n * ```\r\n *\r\n * @param {number} ms - Time to pause for in milliseconds\r\n * @returns {Promise<unknown>} - Resolves promise when it's time to resume\r\n */\r\nexport function sleep(ms: number): Promise<void> {\r\n\treturn new Promise(res => setTimeout(res, ms));\r\n}\r\n\r\n/**\r\n * Sleep while function returns true\r\n *\r\n * @example\r\n * ```js\r\n * let loading = true;\r\n * setTimeout(() => wait = false, 1000);\r\n * await sleepWhile(() => loading); // Won't continue until loading flag is false\r\n * ```\r\n *\r\n * @param {() => boolean | Promise<boolean>} fn Return true to continue\r\n * @param {number} checkInterval Run function ever x milliseconds\r\n * @return {Promise<void>} Callback when sleep is over\r\n */\r\nexport async function sleepWhile(fn : () => boolean | Promise<boolean>, checkInterval = 100): Promise<void> {\r\n\twhile(await fn()) await sleep(checkInterval);\r\n}\r\n\r\n/**\r\n * Calculate the number of milliseconds until date/time\r\n *\r\n * @param {Date | number} date - Target\r\n * @returns {number} - Number of milliseconds until target\r\n */\r\nexport function timeUntil(date: Date | number): number {\r\n\treturn (date instanceof Date ? date.getTime() : date) - (new Date()).getTime();\r\n}\r\n","/**\n * Return keys on a type as an array of strings\n *\n * @example\n * ```ts\n * type Person = {\n * \t firstName: string;\n * \t lastName: string;\n * \t age: number;\n * }\n *\n * const keys = typeKeys<Person>();\n * console.log(keys); // Output: [\"firstName\", \"lastName\", \"age\"]\n * ```\n *\n * @return {Array<keyof T>} Available keys\n */\nexport function tyoeKeys<T extends object>() {\n\treturn Object.keys(<T>{}) as Array<keyof T>;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.persist = exports.Persist = void 0;\n/**\n * Sync variable's value with persistent storage (LocalStorage by default)\n *\n * @example\n * ```ts\n * const theme = new Persist('theme.current', {default: 'os'});\n * console.log(theme.value); // Output: os\n *\n * theme.value = 'light'; // Any changes to `.value` will automatically sync with localStorage\n *\n * location.reload(); // Simulate refresh\n * console.log(theme.value); // Output: light\n * ```\n */\nclass Persist {\n key;\n options;\n /** Backend service to store data, must implement `Storage` interface */\n storage;\n /** Listeners which should be notified on changes */\n watches = {};\n /** Private value field */\n _value;\n /** Current value or default if undefined */\n get value() { return this._value !== undefined ? this._value : this.options?.default; }\n /** Set value with proxy object wrapper to sync future changes */\n set value(v) {\n if (v == null || typeof v != 'object')\n this._value = v;\n // @ts-ignore\n else\n this._value = new Proxy(v, {\n get: (target, p) => {\n const f = typeof target[p] == 'function';\n if (!f)\n return target[p];\n return (...args) => {\n const value = target[p](...args);\n this.save();\n return value;\n };\n },\n set: (target, p, newValue) => {\n target[p] = newValue;\n this.save();\n return true;\n }\n });\n this.save();\n }\n /**\n * @param {string} key Primary key value will be stored under\n * @param {PersistOptions<T>} options Configure using {@link PersistOptions}\n */\n constructor(key, options = {}) {\n this.key = key;\n this.options = options;\n this.storage = options.storage || localStorage;\n this.load();\n }\n /** Notify listeners of change */\n notify(value) {\n Object.values(this.watches).forEach(watch => watch(value));\n }\n /** Delete value from storage */\n clear() {\n this.storage.removeItem(this.key);\n }\n /** Save current value to storage */\n save() {\n if (this._value === undefined)\n this.clear();\n else\n this.storage.setItem(this.key, JSON.stringify(this._value));\n this.notify(this.value);\n }\n /** Load value from storage */\n load() {\n if (this.storage[this.key] != undefined) {\n let value = JSON.parse(this.storage.getItem(this.key));\n if (value != null && typeof value == 'object' && this.options.type)\n value.__proto__ = this.options.type.prototype;\n this.value = value;\n }\n else\n this.value = this.options.default || undefined;\n }\n /**\n * Callback function which is run when there are changes\n *\n * @param {(value: T) => any} fn Callback will run on each change; it's passed the next value & it's return is ignored\n * @returns {() => void} Function which will unsubscribe the watch/callback when called\n */\n watch(fn) {\n const index = Object.keys(this.watches).length;\n this.watches[index] = fn;\n return () => { delete this.watches[index]; };\n }\n /**\n * Return value as JSON string\n *\n * @returns {string} Stringified object as JSON\n */\n toString() { return JSON.stringify(this.value); }\n /**\n * Return current value\n *\n * @returns {T} Current value\n */\n valueOf() { return this.value; }\n}\nexports.Persist = Persist;\n/**\n * Sync class property with persistent storage (LocalStorage by default)\n *\n * @example\n * ```ts\n * class ThemeEngine {\n * @persist({default: 'os'}) current!: string;\n * }\n *\n * const theme = new ThemeEngine();\n * console.log(theme.current) // Output: os\n *\n * theme.current = 'light'; //Any changes will be automatically saved to localStorage\n *\n * location.reload(); // Simulate refresh\n * console.log(theme.current) // Output: light\n * ```\n *\n * @group Decorators\n * @param {PersistOptions<T> & {key?: string}} options Configure using {@link PersistOptions}\n * @returns Decorator function\n */\nfunction persist(options) {\n return (target, prop) => {\n const key = options?.key || `${target.constructor.name}.${prop.toString()}`;\n const wrapper = new Persist(key, options);\n Object.defineProperty(target, prop, {\n get: function () { return wrapper.value; },\n set: function (v) { wrapper.value = v; }\n });\n };\n}\nexports.persist = persist;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MemoryStorage = void 0;\n/**\n * Example storage backend. By default, persist will use localStorage however,\n * by implementing the Storage interface you can provide a custom backend to\n * store data anywhere you desire such as an external database or redis.\n *\n * @ignore\n */\nclass MemoryStorage {\n get length() { return Object.keys(this).length; }\n clear() { Object.keys(this).forEach(k => this.removeItem(k)); }\n getItem(key) { return this[key]; }\n key(index) { return Object.keys(this)[index]; }\n removeItem(key) { delete this[key]; }\n setItem(key, value) { this[key] = value; }\n}\nexports.MemoryStorage = MemoryStorage;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./persist\"), exports);\n__exportStar(require(\"./memory-storage\"), exports);\n"],"names":["clean","obj","undefinedOnly","o","key","value","deepCopy","deepMerge","target","sources","s","dotNotation","prop","set","i","arr","encodeQuery","data","flattenObj","parent","result","propName","formData","includes","values","allowMissing","e","type","isEqual","a","b","ta","tb","mixin","constructors","c","name","JSONAttemptParse","json","JSONSanitize","space","cache","addUnique","array","el","arrayDiff","makeUnique","v1","v2","caseInsensitiveSort","aVal","bVal","findByProp","v","flattenArr","sortByProp","reverse","n","makeArray","ASet","elements","items","index","Cache","ttl","__publicField","rows","complete","r","csv","flatten","headers","acc","row","h","PromiseProgress","executor","resolve","reject","reason","progress","p","l","promise","res","rej","args","newPromise","callback","resp","downloadFile","blob","url","downloadUrl","href","fileBrowser","options","input","timestampFilename","date","timestamp","uploadWithProgress","prog","xhr","f","event","TypedEmitter","listener","_a","unsubscribe","CustomError","message","code","err","newErr","BadRequestError","UnauthorizedError","PaymentRequiredError","ForbiddenError","NotFoundError","MethodNotAllowedError","NotAcceptableError","InternalServerError","NotImplementedError","BadGatewayError","ServiceUnavailableError","GatewayTimeoutError","errorFromCode","_Http","defaults","fn","opts","match","arg1","q","k","contentLength","total","loaded","reader","stream","controller","push","error","content","_b","Http","jwtDecode","token","base64","CliEffects","CliForeground","CliBackground","LOG_LEVEL","_Logger","namespace","text","length","char","end","t","padding","now","str","Logger","dec2Frac","num","gcd","len","denominator","numerator","divisor","remainder","fracToDec","frac","split","whole","LETTER_LIST","NUMBER_LIST","SYMBOL_LIST","CHAR_LIST","formatBytes","bytes","decimals","sizes","formatPhoneNumber","number","parts","insertAt","pad","start","randomHex","randomString","pool","randomStringBuilder","letters","numbers","symbols","matchAll","regex","ret","parseUrl","processed","groups","domains","query","val","md5","d","M","V","Y","X","_","m","g","md5_ii","md5_hh","md5_gg","md5_ff","safe_add","md5_cmn","bit_rol","validateEmail","email","gravatar","def","escapeRegex","formatDate","hours","postfix","sleep","ms","sleepWhile","checkInterval","timeUntil","tyoeKeys","persist_1","persist$1","Persist","newValue","watch","persist","wrapper","memoryStorage","MemoryStorage","__createBinding","this","k2","desc","__exportStar","exports","require$$0","require$$1"],"mappings":"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","x_google_ignoreList":[17,18,19]}
|