{"version":3,"file":"hs.min.cjs","sources":["../lib/array.ts","../lib/string.ts","../lib/math.ts","../lib/number.ts","../lib/operators.ts","../lib/hashmap.ts","../lib/matrix.ts"],"sourcesContent":["//// ------------------------------- HANDY ARRAYS © Handy-JS 5m/21d/23y -------------------------------\r\n\r\n\r\ndeclare global {\r\n  /**\r\n   * `SortAlgorithm` is a type that represents the sorting algorithms.\r\n   */\r\n  type BinarySortAlgorithms =\r\n    | \"bubble\"\r\n    | \"selection\"\r\n    | \"insertion\"\r\n    | \"merge\"\r\n    | \"quick\"\r\n    | \"heap\"\r\n    // | \"radix\" it supports only numbers\r\n    // | \"counting\" it supports only numbers\r\n    | \"bucket\"\r\n    | \"shell\";\r\n\r\n\r\n  /**\r\n   * `SortOrder` is a type that represents the sorting order.\r\n   */\r\n  type SortOrder = \"asc\" | \"desc\";\r\n\r\n  interface Array<T> {\r\n    /**\r\n     * shuffles the elements in the given array.\r\n     * @example\r\n     * const arr = [1, 2, 3, 4, 5];\r\n     * arr.shuffle() // [3, 5, 4, 1, 2]\r\n     */\r\n    shuffle(): T[];\r\n\r\n    /**\r\n     * Sort or descending order using by default it will sort the array in ascending order.\r\n     * @param {string} order\r\n     * @example\r\n     * const arr = [1, 2, 3, 4, 5];\r\n     * arr.bubbleSort() // [1, 2, 3, 4, 5]\r\n     * arr.bubbleSort(\"desc\") // [5, 4, 3, 2, 1]\r\n     */\r\n    bubbleSort(order?: SortOrder): T[];\r\n\r\n    /**\r\n     * Sort or descending order using by default it will sort the array in ascending order.\r\n     * @param {string} order // the order of the sorting: \"asc\" or \"desc\"\r\n     * @example\r\n     * const arr = [1, 2, 3, 4, 5];\r\n     * arr.selectionSort() // [1, 2, 3, 4, 5]\r\n     * arr.selectionSort(\"desc\") // [5, 4, 3, 2, 1]\r\n     */\r\n    selectionSort(order?: SortOrder): T[];\r\n\r\n    /**\r\n     * Sort or descending order using by default it will sort the array in ascending order.\r\n     * @param {string} order // the order of the sorting: \"asc\" or \"desc\"\r\n     * @example\r\n     * const arr = [1, 2, 3, 4, 5];\r\n     * arr.insertionSort() // [1, 2, 3, 4, 5]\r\n     * arr.insertionSort(\"desc\") // [5, 4, 3, 2, 1]\r\n     */\r\n    insertionSort(order?: SortOrder): T[];\r\n\r\n    /**\r\n     * Sort or descending order using by default it will sort the array in ascending order.\r\n     * @param {string} order // the order of the sorting: \"asc\" or \"desc\"\r\n     * @example\r\n     * const arr = [1, 2, 3, 4, 5];\r\n     * arr.mergeSort() // [1, 2, 3, 4, 5]\r\n     * arr.mergeSort(\"desc\") // [5, 4, 3, 2, 1]\r\n     */\r\n    mergeSort(order?: SortOrder): T[];\r\n\r\n    /**\r\n     * Sort or descending order using by default it will sort the array in ascending order.\r\n     * @param {string} order // the order of the sorting: \"asc\" or \"desc\"\r\n     * @example\r\n     * const arr = [1, 2, 3, 4, 5];\r\n     * arr.quickSort() // [1, 2, 3, 4, 5]\r\n     * arr.quickSort(\"desc\") // [5, 4, 3, 2, 1]\r\n     */\r\n    quickSort(order?: SortOrder): T[];\r\n\r\n    /**\r\n     * Sort or descending order using by default it will sort the array in ascending order.\r\n     * @param {string} order // the order of the sorting: \"asc\" or \"desc\"\r\n     * @example\r\n     * const arr = [1, 2, 3, 4, 5];\r\n     * arr.heapSort() // [1, 2, 3, 4, 5]\r\n     * arr.heapSort(\"desc\") // [5, 4, 3, 2, 1]\r\n     */\r\n    heapSort(order?: SortOrder): T[];\r\n\r\n    /**\r\n     * Sort or descending order using by default it will sort the array in ascending order.\r\n     * @param {string} order // the order of the sorting: \"asc\" or \"desc\"\r\n     * @example\r\n     * const arr = [1, 2, 3, 4, 5];\r\n     * arr.countingSort() // [1, 2, 3, 4, 5]\r\n     * arr.countingSort(\"desc\") // [5, 4, 3, 2, 1]\r\n     */\r\n    countingSort(order?: SortOrder): T[];\r\n\r\n\r\n    /**\r\n     * Sort or descending order using by default it will sort the array in ascending order.\r\n     * @param {string} order // the order of the sorting: \"asc\" or \"desc\"\r\n     * @example\r\n     * const arr = [1, 2, 3, 4, 5];\r\n     * arr.bucketSort() // [1, 2, 3, 4, 5]\r\n     * arr.bucketSort(2,\"desc\") // [5, 4, 3, 2, 1]\r\n     */\r\n    bucketSort(order?: SortOrder): T[];\r\n\r\n    /**\r\n     * Sort or descending order using by default it will sort the array in ascending order.\r\n     * @param {number} radix // the radix base to be used wish sorting the array (default: 10)\r\n     * @default radix = 10\r\n     * @param {string} order // the order of the sorting: \"asc\" or \"desc\"\r\n     * @example\r\n     * const arr = [1, 2, 3, 4, 5];\r\n     * arr.radixSort() // [1, 2, 3, 4, 5]\r\n     * arr.radixSort(10,\"desc\") // [5, 4, 3, 2, 1]\r\n     */\r\n    radixSort(radix?: number, order?: SortOrder): T[];\r\n\r\n    /**\r\n     * Sort or descending order using by default it will sort the array in ascending order.\r\n     * @param {string} order // the order of the sorting: \"asc\" or \"desc\"\r\n     * @example\r\n     * const arr = [1, 2, 3, 4, 5];\r\n     * arr.shellSort() // [1, 2, 3, 4, 5]\r\n     * arr.shellSort(\"desc\") // [5, 4, 3, 2, 1]\r\n     */\r\n    shellSort(order?: SortOrder): T[];\r\n\r\n    /**\r\n     * splits an array into chunks of the given size.\r\n     * @param {number} size // the size of the chunk to be used wish splitting the array (default: 1)\r\n     * @example\r\n     * const arr = [1, 2, 3, 4, 5];\r\n     * arr.chunk(2) // [[1, 2], [3, 4], [5]]\r\n     */\r\n    chunk(size?: number): T[][];\r\n\r\n    /**\r\n     * removes all falsy values from an array.\r\n     * @example\r\n     * const arr = [0, 1, false, 2, \"\", 3, \"a\", \"e\" * 23, NaN, \"s\", 34];\r\n     * arr.compact() // [1, 2, 3, \"a\", \"s\", 34]\r\n     */\r\n    compact(): any[];\r\n\r\n    /**\r\n     * removes all nullish `null` values from an array.\r\n     * @example\r\n     * const arr = [0, null, 1, false, 2, \"\", 3, \"a\", \"e\" * 23, NaN, \"s\", 34];\r\n     * arr.filterNullish() // [0, 1, false, 2, \"\", 3, \"a\", \"e\" * 23, NaN, \"s\", 34]\r\n     */\r\n    filterNullish(): any[];\r\n\r\n    /**\r\n     * removes all duplicates from an array.\r\n     * @example\r\n     * const arr = [1, 2, 3, 4, 5, 5, 5, 6];\r\n     * arr.unique() // [1, 2, 3, 4, 5, 6]\r\n     */\r\n    unique(): T[];\r\n\r\n    /**\r\n     * counts the occurrences of each element in an array.\r\n     * @param {CallableFunction} callback\r\n     * @example\r\n     * const arr = [1, 2, 3, 4, 5];\r\n     * arr.countBy(x => x % 2 === 0 ? 'even' : 'odd') // { odd: 3, even: 2 }\r\n     */\r\n    countBy(callback: (item: any) => string): object;\r\n\r\n    /**\r\n     * searches an array for the specified item using the binary search algorithm.\r\n     * @param {any} target // the target to be searched for\r\n     * @param {BinarySortAlgorithms | undefined} sortalgo the sort algorithm to be used in sorting the array before searching\r\n     * @example\r\n     * const arr = [1, 2, 3, 4, 5];\r\n     * arr.binarySearch(3) // 2\r\n     */\r\n    binarySearch(target: any, sortalgo?: BinarySortAlgorithms): any | -1;\r\n\r\n    /**\r\n     * empties the array.\r\n     */\r\n    clear(): void;\r\n\r\n    /**\r\n     * return a true copy of the array.\r\n     */\r\n    copy(): T[];\r\n\r\n    /**\r\n     * return a random element or an array of random elements from the array based on the given quantity.\r\n     * @param {number} quantity the quantity of the random elements (default: 1)\r\n     */\r\n    sample(quantity?: number): T | T[];\r\n\r\n    /**\r\n     * count the occurrences of a value in an array.\r\n     * @param {any} target the target to be searched for\r\n     */\r\n    count(target: any): number;\r\n\r\n    /**\r\n     * return the difference between two arrays in a new array.\r\n     */\r\n    differ(other: any[]): T[];\r\n\r\n  }    \r\n};\r\n\r\n// const arr = [1, 2, 3, 4, 5];\r\n// arr.\r\n\r\n/**\r\n * creates an array of numbers in the given range.\r\n * @param {number} start\r\n * @param {number} end\r\n * @param {number} step\r\n * @example\r\n * HArray.range(0, 5) // [0, 1, 2, 3, 4, 5]\r\n */\r\nexport function range(end: number, start = 0, step = 1){\r\n    const length = Math.floor((end - start) / step) + 1;\r\n    return Array.from({ length }, (_, i) => start + i * step);\r\n};\r\n\r\nArray.prototype.shuffle = function (){\r\n    if (this.length === 0) return this;\r\n\r\n    for (let i = this.length - 1; i > 0; i--) {\r\n        const j = Math.floor(Math.random() * (i + 1));\r\n        [this[i], this[j]] = [this[j], this[i]];\r\n    }\r\n    return this;\r\n};\r\n\r\nArray.prototype.bubbleSort = function (order: SortOrder = \"asc\") { \r\n    if (this.length === 0) return this;\r\n\r\n    for (let i = 0; i < this.length; i++) {\r\n        for (let j = 0; j < this.length - i - 1; j++) {\r\n            if (order === \"asc\" ? this[j] > this[j + 1] : this[j] < this[j + 1]) {\r\n                [this[j], this[j + 1]] = [this[j + 1], this[j]];\r\n            }\r\n        }\r\n    }\r\n    return this;\r\n};\r\n\r\nArray.prototype.selectionSort = function (order: SortOrder = \"asc\") {\r\n    if (this.length === 0) return this;\r\n\r\n    for (let i = 0; i < this.length; i++) {\r\n        let min = i;\r\n        for (let j = i + 1; j < this.length; j++) {\r\n            if (order === \"asc\" ? this[j] < this[min] : this[j] > this[min]) min = j;\r\n        }\r\n        if (min !== i) [this[i], this[min]] = [this[min], this[i]];\r\n    }\r\n    return this;\r\n};\r\n\r\nArray.prototype.insertionSort = function (order: SortOrder = \"asc\") {\r\n    if (this.length === 0) return this;\r\n\r\n    for (let i = 1; i < this.length; i++) {\r\n        let j = i - 1;\r\n        let temp = this[i];\r\n        while (j >= 0 && (order === \"asc\" ? this[j] > temp : this[j] < temp)) {\r\n            this[j + 1] = this[j];\r\n            j--;\r\n        }\r\n        this[j + 1] = temp;\r\n    }\r\n    return this;\r\n};\r\n\r\nArray.prototype.mergeSort = function (order: SortOrder = \"asc\") {\r\n    if (this.length === 0) return this;\r\n\r\n    const merge = (left: any[], right: any[]) => {\r\n        const result = [];\r\n        while (left.length && right.length) {\r\n            if (order === \"asc\" ? left[0] <= right[0] : left[0] >= right[0]) {\r\n                result.push(left.shift());\r\n            } else {\r\n                result.push(right.shift());\r\n            }\r\n        }\r\n        while (left.length) result.push(left.shift());\r\n        while (right.length) result.push(right.shift());\r\n        return result;\r\n    }\r\n    if (this.length < 2) return this;\r\n    const middle = Math.floor(this.length / 2);\r\n    const left = this.slice(0, middle);\r\n    const right = this.slice(middle, this.length);\r\n    return merge(left.mergeSort(order), right.mergeSort(order));\r\n};\r\n\r\nArray.prototype.quickSort = function (order: SortOrder = \"asc\") {\r\n    if (this.length === 0) return this;\r\n\r\n    const partition = (arr: any[], left: number, right: number) => {\r\n        const pivot = arr[Math.floor((right + left) / 2)];\r\n        let i = left;\r\n        let j = right;\r\n        while (i <= j) {\r\n            if (order === \"asc\") {\r\n                while (arr[i] < pivot) i++;\r\n                while (arr[j] > pivot) j--;\r\n            } else {\r\n                while (arr[i] > pivot) i++;\r\n                while (arr[j] < pivot) j--;\r\n            }\r\n            if (i <= j) {\r\n                [arr[i], arr[j]] = [arr[j], arr[i]];\r\n                i++;\r\n                j--;\r\n            }\r\n        }\r\n        return i;\r\n    }\r\n    \r\n    let left = 0;\r\n    let right = this.length - 1;\r\n    let index;\r\n    if (this.length > 1) {\r\n        index = partition(this, left, right);\r\n        if (left < index - 1) this.quickSort(order);\r\n        if (index < right) this.quickSort(order);\r\n    }\r\n    return this;\r\n};\r\n\r\nArray.prototype.heapSort = function (order: SortOrder = \"asc\") {\r\n    if (this.length === 0) return this;\r\n    \r\n    const heapify = (arr: any[], length: number, i: number) => {\r\n        let largest = i;\r\n        const left = i * 2 + 1;\r\n        const right = left + 1;\r\n        if (left < length && (order === \"asc\" ? arr[left] > arr[largest] : arr[left] < arr[largest])) largest = left;\r\n        if (right < length && (order === \"asc\" ? arr[right] > arr[largest] : arr[right] < arr[largest])) largest = right;\r\n        if (largest !== i) {\r\n            [arr[i], arr[largest]] = [arr[largest], arr[i]];\r\n            heapify(arr, length, largest);\r\n        }\r\n    }\r\n\r\n    const buildMaxHeap = (arr: any[]) => {\r\n        for (let i = Math.floor(arr.length / 2); i >= 0; i--) heapify(arr, arr.length, i);\r\n        return arr;\r\n    }\r\n\r\n    buildMaxHeap(this);\r\n    for (let i = this.length - 1; i > 0; i--) {\r\n        [this[0], this[i]] = [this[i], this[0]];\r\n        heapify(this, i, 0);\r\n    }\r\n    return this;\r\n};\r\n\r\n// THIS: only support array of numbers\r\nArray.prototype.countingSort = function (this: number[], order: SortOrder = \"asc\") {\r\n    if (this.length === 0) return this;\r\n    if (!this.every(num => typeof num === \"number\")) throw new Error(\"countingSort only support array of numbers\");\r\n\r\n    const min = Math.min(...this);\r\n    const max = Math.max(...this);\r\n    const countBucket = new Array(max - min + 1).fill(0);\r\n    const start = order === \"asc\" ? 0 : countBucket.length - 1;\r\n    const step = order === \"asc\" ? 1 : -1;\r\n    for (let i = 0; i < this.length; i++) countBucket[this[i] - min]++;\r\n    let index = start;\r\n    for (let i = 0; i < countBucket.length; i++) {\r\n        while (countBucket[i] > 0) {\r\n            this[index] = i + min;\r\n            index += step;\r\n            countBucket[i]--;\r\n        }\r\n    }\r\n    return this;\r\n};\r\n\r\nArray.prototype.bucketSort = function (order: SortOrder = \"asc\") {\r\n    if (this.length === 0) return this;\r\n\r\n    const buckets: { [key: string]: any[] } = {};\r\n\r\n    for (const item of this) {\r\n      const key = item.toString();\r\n  \r\n      if (!buckets[key]) {\r\n        buckets[key] = [];\r\n      }\r\n  \r\n      buckets[key].push(item);\r\n    }\r\n  \r\n    const sortedKeys = Object.keys(buckets).sort();\r\n    const sortedArray: any[] = [];\r\n  \r\n    for (const key of sortedKeys) {\r\n      sortedArray.push(...buckets[key]);\r\n    }\r\n  \r\n    return order === \"asc\" ? sortedArray : sortedArray.reverse();\r\n};\r\n\r\n// THIS: only support array of numbers\r\n// the radix sort is not working, it's frezzing the browser\r\nArray.prototype.radixSort = function (this: number[], radix: number = 10, order: SortOrder = \"asc\") {\r\n    if (this.length === 0) return this;\r\n    if (!this.every(num => typeof num === \"number\")) throw new Error(\"radixSort only support array of numbers\");\r\n     \r\n    // TODO: fix radix sort\r\n\r\n    return this;\r\n};\r\n\r\nArray.prototype.shellSort = function (order: SortOrder = \"asc\") {\r\n    if (this.length === 0) return this;\r\n\r\n    for (let gap = Math.floor(this.length / 2); gap > 0; gap = Math.floor(gap / 2)) {\r\n        for (let i = gap; i < this.length; i++) {\r\n            const temp = this[i];\r\n            let j;\r\n            for (j = i; j >= gap && (order === \"asc\" ? this[j - gap] > temp : this[j - gap] < temp); j -= gap){\r\n                this[j] = this[j - gap];\r\n            }\r\n            this[j] = temp;\r\n        }\r\n    }\r\n    return this;\r\n};\r\n\r\nArray.prototype.chunk = function (size = 1){\r\n    if (size < 1) return this;\r\n    return this.slice(0, Math.ceil(this.length / size)).reduce((acc, _, i) => [...acc, this.slice(size * i, size * i + size)], []);\r\n};\r\n\r\nArray.prototype.compact = function (){ \r\n    if (this.length === 0) return this;\r\n    return this.filter(item => item) \r\n};\r\n\r\nArray.prototype.filterNullish = function (){ \r\n    if (this.length === 0) return this;\r\n    return this.filter(item => item != null) \r\n};\r\n\r\nArray.prototype.unique = function (){ \r\n    if (this.length === 0) return this;\r\n    return [...new Set(this)] \r\n};\r\n\r\nArray.prototype.countBy = function (callback){\r\n    if (this.length === 0) return this;\r\n    return this.reduce((acc, val) => {\r\n        const key = callback(val);\r\n        acc[key] = (acc[key] || 0) + 1;\r\n        return acc;\r\n    }, {});\r\n};\r\n\r\nArray.prototype.binarySearch = function (target: any, sortalgo:BinarySortAlgorithms | undefined){\r\n    if (this.length === 0) return -1;    \r\n    // swith between the sort algorithms\r\n    let sortedArray = [];\r\n    switch (sortalgo) {\r\n        case 'bubble':\r\n            sortedArray = this.bubbleSort(); break;\r\n        case 'selection':\r\n            sortedArray = this.selectionSort(); break;\r\n        case 'insertion':\r\n            sortedArray = this.insertionSort(); break;\r\n        case 'merge':\r\n            sortedArray = this.mergeSort(); break;\r\n        case 'quick':\r\n            sortedArray = this.quickSort(); break;\r\n        case 'heap':\r\n            sortedArray = this.heapSort(); break;\r\n        case 'shell':\r\n            sortedArray = this.shellSort(); break;\r\n        case 'bucket':\r\n            sortedArray = this.bucketSort(); break;\r\n        default:\r\n            sortedArray = this.sort(); break;\r\n    }\r\n    // binary search\r\n    let start = 0;\r\n    let end = sortedArray.length - 1;\r\n    while (start <= end) {\r\n        const mid = Math.floor((start + end) / 2);\r\n        if (sortedArray[mid] === target) return mid;\r\n        if (sortedArray[mid] < target) start = mid + 1;\r\n        else end = mid - 1;\r\n    }\r\n    return -1;\r\n};\r\n\r\nArray.prototype.clear = function (){\r\n    if (this.length === 0) return this;\r\n    this.length = 0;\r\n    return this;\r\n};\r\n\r\nArray.prototype.copy = function (){\r\n    if (this.length === 0) return this;\r\n    return [...this];\r\n};\r\n\r\nArray.prototype.sample = function (quantity: number = 1){\r\n    if (this.length === 0) return this;\r\n    if (quantity < 1) return [];\r\n    if (quantity === 1) return this[Math.randomInt(this.length)];\r\n    return this.sort(() => Math.random() - Math.random()).slice(0, quantity);\r\n};\r\n\r\nArray.prototype.count = function (target: any){\r\n    if (this.length === 0) return 0;\r\n    return this.filter(item => item === target).length;\r\n};\r\n\r\nArray.prototype.differ = function (other: any[]){\r\n    if (this.length === 0) return this;\r\n    return this.filter(item => !other.includes(item));\r\n};\r\n\r\nexport default Array;","//// ------------------------------- HANDY STRING © Handy-JS 5m/21d/23y -------------------------------\r\ndeclare global {\r\n    interface String {\r\n        /**\r\n         * capitalizes the first letter of every word in a string.\r\n         */\r\n        toCapitalCase(): string;\r\n\r\n        /**\r\n         * capitalizes the first letter of every word in a string according to any locale-specific case mappings in effect at the time.\r\n         * @param {string | string[]} [locales] A string with a BCP 47 language tag, or an array of such strings. For the general form and interpretation of the locales argument, see the [Intl](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#Locale_identification_and_negotiation) page.\r\n         * @example\r\n         * \"ßver ßee\".toLocaleCapitalCase() // output:\"SSver SSee\"\r\n         */\r\n        toLocaleCapitalCase(locales?: string | string[] | undefined): string;\r\n\r\n        /**\r\n         * capitalizes the first letter of every word starting with the second word in a string and removes all the spaces.\r\n         * @example\r\n         * \"hello world\".toCamelCase() // output:\"helloWorld\"\r\n         */\r\n        toCamelCase(): string;\r\n\r\n        /**\r\n         * capitalizes the first letter of every word in a string and removes all the spaces according to any locale-specific case mappings in effect at the time.\r\n         * @param {string | string[]} [locales] A string with a BCP 47 language tag, or an array of such strings. For the general form and interpretation of the locales argument, see the [Intl](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#Locale_identification_and_negotiation) page.\r\n         * @example\r\n         * \"ßver ßee\".toLocaleCamelCase() // output:\"SSverSSee\"\r\n         */\r\n        toLocaleCamelCase(locales?: string | string[] | undefined): string;\r\n\r\n        /**\r\n         * reverse a string and string of special characters. like emojis, diacritics, and other grapheme clusters.\r\n         */\r\n        reverse(): string;\r\n\r\n         /**\r\n          * Returns the positions of the all occurrence of a substring.\r\n          * @param {string} target — The substring to search for in the string\r\n          * @param {number} startPosition — The index at which to begin searching the String object. If omitted, search starts at the beginning of the string.\r\n          */\r\n        indexesOf(target: string, startPosition?: number): number[];\r\n\r\n        /**\r\n         * Returns a number indicating whether a reference string comes before or after or is the same as the given string in sort order.\r\n         * @param {string} target The string against which the referring string is comparing.\r\n         */\r\n        compare(target: string): number;\r\n\r\n        /**\r\n         * Returns true if the sequence of elements of searchString converted to a String \r\n         * is the same as the corresponding elements of this object (converted to a String)\r\n         * starting at position. Otherwise returns false.\r\n         * @param {string} target The string against which the referring string is comparing.\r\n         * @param {number} position The index at which to begin searching the String object. If omitted, search starts at the beginning of the string.\r\n         */\r\n        equals(target: string, position?: number): boolean;\r\n\r\n        /**\r\n         * Returns true if the sequence of elements of searchString converted to a String\r\n         * is the same as the corresponding elements of this object (converted to a String) regardless of their casing,\r\n         * starting at position. Otherwise returns false.\r\n         * @param {string} target The string against which the referring string is comparing.\r\n         * @param {number} position The index at which to begin searching the String object. If omitted, search starts at the beginning of the string.\r\n         */\r\n        equalsIgnoreCase(target: string, position?: number, locales?: string | string[] | undefined): boolean;\r\n\r\n        /**\r\n         * escape a string from all white spaces and all control characters (characters with a code point < U+0020).\r\n         * @param {boolean} [isForAttribute] If true, escape the string for use in HTML attribute.\r\n         */\r\n        escape(isForAttribute?: boolean): string;\r\n\r\n        /**\r\n         * return a sample of words from a string.\r\n         * @param {number} [wordCount] The number of words to get from the string.\r\n         */\r\n        sample(wordCount?: number): string;\r\n\r\n        /**\r\n         * return the number of words in a string.\r\n         * @param {string | RegExp} [separator] Specifies the character to use for separating the string. The separator is treated as a string or a regular expression. If separator is omitted, the array returned contains one element consisting of the entire string.\r\n         */\r\n        size(separator?: string | RegExp): number;\r\n\r\n    }\r\n};\r\n\r\n\r\nString.prototype.toCapitalCase = function () {\r\n    return  this.split(\" \").map( (word:string) => { return word[0].toUpperCase() + word.slice(1)}).join(\" \") \r\n};\r\n\r\nString.prototype.toLocaleCapitalCase = function (locales?: string | string[] | undefined) {\r\n    return  this.split(\" \").map( (word:string) => { return word[0].toLocaleUpperCase(locales) + word.slice(1)}).join(\" \") \r\n};\r\n\r\nString.prototype.toCamelCase = function () { \r\n    return  this.split(\" \").map( (word:string, index:number) => { return index === 0 ? word[0].toLowerCase() + word.slice(1) : word[0].toUpperCase() + word.slice(1)}).join(\"\") \r\n};\r\n\r\nString.prototype.toLocaleCamelCase = function (locales?: string | string[] | undefined) {\r\n    return  this.split(\" \").map( (word:string, index:number) => { return index === 0 ? word[0].toLocaleLowerCase(locales) + word.slice(1) : word[0].toLocaleUpperCase(locales) + word.slice(1)}).join(\"\")\r\n};\r\n\r\nString.prototype.reverse = function () {\r\n    return [...this].reverse().join(\"\");\r\n};\r\n\r\nString.prototype.indexesOf = function (target: string, startPosition?: number | undefined) {\r\n    let indexes: number[] = [];\r\n    let index = this.indexOf(target, startPosition);\r\n    while (index !== -1) {\r\n        indexes.push(index);\r\n        index = this.indexOf(target, index + 1);\r\n    }\r\n    return indexes;\r\n};\r\n\r\nString.prototype.compare = function (target: string) {\r\n    return this.localeCompare(target);\r\n};\r\n\r\nString.prototype.equals = function (target: string, position: number = 0) {\r\n    return [...this].splice(position).join(\"\") === [...target].splice(position).join(\"\");\r\n};\r\n\r\nString.prototype.equalsIgnoreCase = function (target: string, position: number = 0, locales?: string | string[] | undefined) {\r\n    return [...this.toLocaleLowerCase(locales)].splice(position).join(\"\") === [...target.toLocaleLowerCase(locales)].splice(position).join(\"\");\r\n};\r\n\r\nString.prototype.escape = function (isForAttribute: boolean = false) {\r\n    let str = this;\r\n    if (isForAttribute) {\r\n        str = str.replace(/\"/g, \"&quot;\");\r\n    }\r\n    return str.replace(/[\\n\\r\\t\\v\\f\\b]/g, \"\").replace(/\\s+/g, \" \").replace(/[\\u0000-\\u001F]/g, \"\");\r\n};\r\n\r\nString.prototype.sample = function (wordCount: number = 0, separator: string | RegExp = \" \") {\r\n    let words = this.split(separator);\r\n    if (wordCount === 0 || wordCount > words.length || wordCount < 0) {\r\n        return words.slice(0, Math.randomInt(this.length)).join(separator as string);\r\n    }\r\n    return words.slice(0, wordCount).join(separator as string);\r\n};\r\n\r\nString.prototype.size = function (separator: string | RegExp = \" \") {\r\n    return this.split(separator).length;\r\n};\r\n\r\nexport default String;\r\n","//// ------------------------------- HANDY MATH © Handy-JS 5m/21d/23y -------------------------------\r\n\r\ndeclare global{\r\n    interface Math{\r\n         /**\r\n         * The Tau constant, equal to 2 * PI.\r\n         */\r\n        TAU : number\r\n\r\n        /**\r\n         * The square root of `3`. approximately `1.732`.\r\n         */\r\n        SQRT3 : number\r\n\r\n        /**\r\n         * The Golden ratio constant, approximately `1.618`.\r\n         */\r\n        PHI : number\r\n\r\n        /**\r\n         * The Golomb-Dickman constant, approximately `0.624`.\r\n         * Math Formula: `G = 1 - G`\r\n         */\r\n        G : number\r\n\r\n        /**\r\n         * The Feigenbaum constant, approximately `4.669`.\r\n         * Math Formula: `delta = 1 - alpha`\r\n         */\r\n        DELTA : number\r\n\r\n        /**\r\n         * The Euler-Mascheroni constant, approximately `0.577`.\r\n         * Math Formula: `gamma = 1 - zeta(0)`\r\n         */\r\n        GAMMA : number\r\n\r\n        /**\r\n         * Catalan's constant, approximately `0.915`.\r\n         * Math Formula: `K = 1 - zeta(2)`\r\n         */\r\n        K : number\r\n\r\n        /**\r\n         * Apery's constant, approximately `1.202`.\r\n         * Math Formula: `zeta(3)`\r\n         */\r\n        ZETA3 : number\r\n\r\n        /**\r\n         * Cahen's constant, approximately `0.643`.\r\n         * Math Formula: `theta = 1 - zeta(4)`\r\n         */\r\n        THETA : number\r\n        \r\n        /**\r\n         * Landau-Ramanujan constant, approximately `0.764`.\r\n         * Math Formula: `kappa = 1 - zeta(3)`\r\n         */\r\n        KAPPA : number\r\n\r\n        /**\r\n         * Glaisher–Kinkelin constant, approximately `1.282`.\r\n         * Math Formula: `A = e^(1/12 - zeta'(-1))`\r\n         */\r\n        A : number\r\n\r\n        /**\r\n         * Backhouse's constant, approximately `1.456`.\r\n         * Math Formula: `B = e^(1/12 - zeta'(-1))`\r\n         */\r\n        B : number\r\n\r\n        /**\r\n         * returns a random number between `min` and `max` explicitly\r\n         * @param {number} max the maximum number\r\n         * @param {number} min the minimum number by default it's 0\r\n         */\r\n        randomInt(max:number, min?:number):number\r\n\r\n        /**\r\n         * clamps the `value` between `min` and `max` otherwise it returns the `min` or `max`\r\n         * @param {number} value the value to clamp\r\n         * @param {number} min the minimum value\r\n         * @param {number} max the maximum value\r\n         * @example\r\n         * HMath.clamp(10, 1, 5) // 5\r\n         */\r\n        clamp(value:number, min:number, max:number): number\r\n\r\n        /**\r\n         * returns a value between `start` and `end` based on the `t` value\r\n         * The math formula is `start * (1 - t) + end * t`\r\n         * @param {number} start the start value\r\n         * @param {number} end the end value\r\n         * @param {number} t the t value\r\n         * @example\r\n         * HMath.lerp(0, 100, 0.5) // 50\r\n         * HMath.lerp(0, 100, 0.25) // 25\r\n         * HMath.lerp(0, 100, 0.75) // 75\r\n         */\r\n        lerp(start:number, end:number, t:number): number\r\n\r\n        /**\r\n         * it returns the value mapped from the input range to the output range\r\n         * The math formula is \r\n         * `output = ((value - inputMin) / (inputMax - inputMin)) * (outputMax - outputMin) + outputMin`\r\n         * @param {number} value the value to map\r\n         * @param {number} inputMin the minimum value of the input range\r\n         * @param {number} inputMax the maximum value of the input range\r\n         * @param {number} outputMin the minimum value of the output range\r\n         * @param {number} outputMax the maximum value of the output range\r\n         * @example\r\n         * HMath.map(50, 0, 100, 0, 1) // 0.5\r\n         * HMath.map(50, 0, 100, 0, 10) // 5\r\n         * HMath.map(50, 0, 100, 0, 1000) // 500\r\n         */\r\n        map(value:number, inputMin:number, inputMax:number, outputMin:number, outputMax:number): number\r\n\r\n    }\r\n}\r\n\r\nObject.assign(Math, {\r\n    A : 1.282427129100622636875342568869791727767688927325001192063740432988395529732,\r\n    B : 1.456074948582689671399595351116543266074274800178127884495013673643948446868,\r\n    G : 0.624329988543550870992936383100837235703606993625832517625695166735847239685,\r\n    K : 0.915965594177219015054603514932384110774149374281672134266498119621763019776,\r\n    TAU : 2 * Math.PI, // 2 * PI\r\n    SQRT3 : 1.73205080756887729352744634150587236694280525381038062805580697945193301690880, // square root of 3\r\n    PHI : 1.61803398874989484820458683436563811772030917980576286213544862270526046281890, // golden ratio\r\n    DELTA : 4.669201609102990671853203820466201617258185577475768632745651343004134330211, \r\n    GAMMA : 0.577215664901532860606512090082402431042159335939923598805767234884867726777,\r\n    ZETA3 : 1.202056903159594285399738161511449990764986292340498881792271555341838205786,\r\n    THETA : 0.6434105463,\r\n    KAPPA : 0.764223653589220662990698731250092320971690526083222067341264027404987097155,\r\n\r\n    randomInt(max:number, min = 0){ return Math.floor(Math.random() * (max - min + 1)) + min},\r\n\r\n    clamp(value:number, min:number, max:number) { return Math.min(Math.max(value, min), max) },\r\n\r\n    lerp(start:number, end:number, t:number){ return start * (1 - t) + end * t },\r\n\r\n    map(value:number, inputMin:number, inputMax:number, outputMin:number, outputMax:number){\r\n        const inputRange = inputMax - inputMin\r\n        const outputRange = outputMax - outputMin\r\n        const normalizedValue = (value - inputMin) / inputRange\r\n        return outputMin + normalizedValue * outputRange\r\n    }\r\n});\r\n\r\nexport default Math;","//// ------------------------------- HANDY NUMBER © Handy-JS 6m/2d/23y -------------------------------\r\n\r\ndeclare global {\r\n    interface Number {\r\n        /**\r\n         * Returns a string representation of a number in human readable format. like 1K, 1M, 1B, 1T, etc.\r\n         */\r\n        toHuman(): string;\r\n\r\n        /**\r\n         * Returns a string representation of a number readable format. like 10-000, 1-000-000, 1-000-000-000, etc.\r\n         * @param separator The separator to be used. Default is `-`\r\n         */\r\n        toReadable(separator?: string): string;\r\n    }\r\n};\r\n\r\nNumber.prototype.toHuman = function (): string {\r\n    const num = this.valueOf();\r\n    const si = [\r\n        { value: 1, symbol: \"\" },\r\n        { value: 1E3, symbol: \"K\" },\r\n        { value: 1E6, symbol: \"M\" },\r\n        { value: 1E9, symbol: \"B\" },\r\n        { value: 1E12, symbol: \"T\" },\r\n        { value: 1E15, symbol: \"P\" },\r\n        { value: 1E18, symbol: \"E\" },\r\n    ];\r\n    const rx = /\\.0+$|(\\.[0-9]*[1-9])0+$/;\r\n    let i;\r\n    for (i = si.length - 1; i > 0; i--) if (num >= si[i].value) break;\r\n    return (num / si[i].value).toFixed(2).replace(rx, \"$1\") + si[i].symbol;\r\n};\r\n\r\nNumber.prototype.toReadable = function (separator: string = \"-\"): string {\r\n    const num = this.valueOf();\r\n    const rx = /(\\d+)(\\d{3})/;\r\n    return String(num).replace(/^\\d+/, function (w) {\r\n        while (rx.test(w)) {\r\n            w = w.replace(rx, \"$1\" + separator + \"$2\");\r\n        }\r\n        return w;\r\n    });\r\n};\r\n\r\nexport default Number;","//// ------------------------------- HANDY OPERATORS © Handy-JS 5m/21d/23y -------------------------------\r\n\r\n/**\r\n * it returns true if all the arguments are true\r\n * @param  {boolean[]} args\r\n * @example\r\n * and(true, true, true) // true\r\n */\r\nexport function and(...args: boolean[]) {return args.every(arg => arg === true)}\r\n\r\n/**\r\n * it returns true if any of the arguments is true\r\n * @param  {boolean[]} args\r\n * @example\r\n * or(true, false, false) // true\r\n */\r\nexport function or(...args: boolean[]) {return args.some(arg => arg === true)}\r\n\r\n/**\r\n * it returns the opposite of the argument given\r\n * @param {any} arg\r\n * @example\r\n * not(true) // false\r\n */\r\nexport function not(arg:any) {return !arg}\r\n\r\n/**\r\n * the `is` function is used to compare two values if they are truly equal\r\n * @param {any} value1\r\n * @param {any} value2\r\n * @example\r\n * is(1, 1) // true\r\n * is(\"hello\", \"hi\") // false\r\n * // Objects are compared by their keys recursively\r\n * const obj1 = {name: \"john\", age: 20};\r\n * const obj2 = {name: \"john\", age: 20};\r\n * is(obj1, obj2) // true\r\n * \r\n * // Functions are compared by their source code\r\n * const fn1 = () => console.log(\"hello\");\r\n * const fn2 = () => console.log(\"hi\");\r\n * is(fn1, fn2) // false\r\n * \r\n * // Dates are compared by their millisecond representation\r\n * const date1 = new Date();\r\n * const date2 = new Date(date1.getTime());\r\n * is(date1, date2) // true\r\n * \r\n * // Regular expressions are compared by their source code\r\n * const reg1 = /hello/;\r\n * const reg2 = /hi/;\r\n * is(reg1, reg2) // false\r\n */\r\nexport function is(value1: any, value2: any): boolean{\r\n    switch (typeof value1) {\r\n        // compare functions by their source code\r\n        case 'function': return value1.toString() === value2.toString();\r\n\r\n        // compare object by keys recursively\r\n        case 'object': \r\n            if (or(value1 === null, value2 === null)) { return value1 === value2 };\r\n\r\n            switch (value1.constructor) {\r\n                // compare dates by their millisecond representation\r\n                case Date: return value1.getTime() === value2.getTime();\r\n                // compare regular expressions by their source code\r\n                case RegExp: return value1.toString() === value2.toString();\r\n\r\n                default:\r\n                    if (not(is(value1.constructor, value2.constructor))) { return false }\r\n\r\n                    const keys1 = Object.keys(value1);\r\n                    const keys2 = Object.keys(value2);\r\n\r\n                    if (not(is(keys1.length, keys2.length))){ return false };\r\n                    \r\n                    return keys1.every(key => is(value1[key], value2[key]));\r\n            }\r\n\r\n        default: return value1 === value2;\r\n    }\r\n}\r\n\r\n/**\r\n * loops through the given iterations and calls the callback function with the index ```i``` as argument\r\n * @param {number} iterations// the number of iterations to loop through default is 1\r\n * @param {CallableFunction} cb // the function to call in each iteration with the `index` ```i``` as argument\r\n * @param {number} index // the starting index by default it's 0\r\n * @param {number} step // the step to increment the index by default it's 1\r\n * @example\r\n * loop(5, i=>console.log(i)) // 0 1 2 3 4\r\n */\r\nexport function loop(iterations = 1, cb:(index: number) => void, index = 0, step = 1){ for (index; index < iterations; index+=step) { cb(index) } }\r\n\r\n/**\r\n * loops through the given `object` and calls the `callback` function with the `key` as argument\r\n * @param {object} obj // the object to loop through\r\n * @param {CallableFunction} cb // the function to call in each iteration with the `key` as argument\r\n * @example\r\n * const obj = {name:\"ahmed\", age: 20};\r\n * objloop(obj, (key, val) => console.log(key, val))\r\n * // name ahmed\r\n * // age 20\r\n */\r\n// objloop function with typescript\r\nexport function objloop<Obj extends object>(obj: Obj, cb: (key: keyof Obj, val: Obj[keyof Obj]) => void){ for ( const key in obj) { cb(key, obj[key]) } }\r\n\r\n/**\r\n * The `keyloop` function loops through the given `object` and calls the `callback` function with the `key` as argument\r\n * @param {object} obj // the object to loop through\r\n * @param {CallableFunction} cb // the function to call in each iteration with the `key` as argument\r\n * @example\r\n * const obj = {name:\"ahmed\", age: 20};\r\n * keyloop(obj, key => console.log(key)) // name\r\n */\r\nexport function keyloop<Obj extends object>(obj: Obj, cb: (key: keyof Obj) => void){ for ( const key in obj) { cb(key) } }\r\n\r\n/**\r\n * The `valloop` function loops through the given `object` and calls the `callback` function with the `value` as argument\r\n * @param {object} obj // the object to loop through\r\n * @param {CallableFunction} cb // the function to call in each iteration with the `value` as argument\r\n * @example\r\n * const obj = {name:\"ahmed\", age: 20};\r\n * valloop(obj, val => console.log(val)) // ahmed\r\n */\r\nexport function valloop<Obj extends object>(obj: Obj, cb: (val: Obj[keyof Obj]) => void){ for ( const key in obj) { cb(obj[key]) } }\r\n\r\n\r\n/// ======================THE HOPERATORS CLASS: HANDY-JS: OPERATORS METHODS ======================\r\n\r\n/**\r\n * @namespace HOperators\r\n * @description handy operators\r\n * @example\r\n * // 1\r\n * import HOperators from 'handy-js'\r\n * HOperators.and(true, true, true) // true\r\n * HOperators.or(true, false, false) // true\r\n * // 2\r\n * import {and, or} from 'handy-js'\r\n * and(true, true, true) // true\r\n * or(true, false, false) // true\r\n */\r\nexport default class HOperators {\r\n    /**\r\n     * it returns true if all the arguments are true\r\n     * @memberof HOperators\r\n     * @param  {...any} args\r\n     * @example\r\n     * HOperators.and(true, true, true) // true\r\n     */\r\n    static and = and\r\n\r\n    /**\r\n     * it returns true if any of the arguments is true\r\n     * @memberof HOperators\r\n     * @param  {...any} args\r\n     * @example\r\n     * HOperators.or(true, false, false) // true\r\n     */\r\n    static or = or\r\n\r\n    /**\r\n     * it returns the opposite of the argument given\r\n     * @memberof HOperators\r\n     * @param {any} arg\r\n     * @example\r\n     * HOperators.not(true) // false\r\n     * HOperators.not(false) // true\r\n     */\r\n    static not = not\r\n\r\n    /**\r\n     * This method is used to compare two values if they are truly equal\r\n     * @memberof HOperators\r\n     * @param {any} value1\r\n     * @param {any} value2\r\n     * @example\r\n     * HOperators.is(1, 1) // true\r\n     * HOperators.is(\"hello\", \"hi\") // false\r\n     * \r\n     * // Objects are compared by their keys recursively\r\n     * const obj1 = {name: \"john\", age: 20};\r\n     * const obj2 = {name: \"john\", age: 20};\r\n     * HOperators.is(obj1, obj2) // true\r\n     * \r\n     * // Functions are compared by their source code\r\n     * const fn1 = () => console.log(\"hello\");\r\n     * const fn2 = () => console.log(\"hi\");\r\n     * HOperators.is(fn1, fn2) // false\r\n     * \r\n     * // Dates are compared by their millisecond representation\r\n     * const date1 = new Date();\r\n     * const date2 = new Date(date1.getTime());\r\n     * HOperators.is(date1, date2) // true\r\n     * \r\n     * // Regular expressions are compared by their source code\r\n     * const reg1 = /hello/;\r\n     * const reg2 = /hi/;\r\n     * HOperators.is(reg1, reg2) // false\r\n     */\r\n    static is = is\r\n\r\n    /**\r\n     * loops through the given iterations and calls the callback function with the index ```i``` as argument\r\n     * @memberof HOperators\r\n     * @param {number} iterations// the number of iterations to loop through\r\n     * @param {CallableFunction} callback // the function to call in each iteration with the `index` ```i``` as argument\r\n     * @param {number} i // the starting index by default it's 0\r\n     * @param {number} step // the step to increment the index by default it's 1\r\n     * @example\r\n     * HOperators.loop(5, i=>console.log(i)) // 0 1 2 3 4\r\n     */\r\n    static loop = loop\r\n\r\n    /**\r\n     * loops through the given `object` and calls the `callback` function with the `key` as argument\r\n     * @memberof HOperators\r\n     * @param {object} obj // the object to loop through\r\n     * @param {CallableFunction} callback // the function to call in each iteration with the `key` as argument\r\n     * @example\r\n     * const obj = {name:\"ahmed\", age: 20};\r\n     * HOperators.objloop(obj, (key, val) => console.log(key, val))\r\n     * // name ahmed # the keys\r\n     * // age 20 # the values\r\n     */\r\n    static objloop = objloop\r\n\r\n    /**\r\n     * The `keyloop` function loops through the given `object` and calls the `callback` function with the `key` as argument\r\n     * @param {object} obj // the object to loop through\r\n     * @param {CallableFunction} cb // the function to call in each iteration with the `key` as argument\r\n     * @example\r\n     * const obj = {name:\"ahmed\", age: 20};\r\n     * keyloop(obj, key => console.log(key)) // name\r\n     */\r\n    static keyloop = keyloop\r\n\r\n    /**\r\n     * The `valloop` function loops through the given `object` and calls the `callback` function with the `value` as argument\r\n     * @memberof HOperators\r\n     * @param {object} obj // the object to loop through\r\n     * @param {CallableFunction} cb // the function to call in each iteration with the `value` as argument\r\n     * @example\r\n     * const obj = {name:\"ahmed\", age: 20};\r\n     * valloop(obj, val => console.log(val)) // ahmed\r\n     */\r\n    static valloop = valloop\r\n\r\n}\r\n","//// ------------------------------- HANDY HASHMAP © Handy-JS 5m/27d/23y -------------------------------\r\n\r\n/**\r\n * HashMap implementation in JavaScript\r\n */\r\nexport default class HashMap {\r\n    \r\n    map = new Map();\r\n\r\n    constructor(obj?: any) {\r\n        this.map = new Map();\r\n        if (obj) {\r\n            Object.keys(obj).forEach((key) => {\r\n                this.map.set(key, obj[key]);\r\n            });\r\n        }\r\n    }\r\n  \r\n    /**\r\n     * Add a key-value pair to the HashMap\r\n     * @param key The key of the key-value pair\r\n     * @param value The value of the key-value pair\r\n     */\r\n    put(key: string, value: any) {\r\n      this.map.set(key, value);\r\n    }\r\n  \r\n    /**\r\n     * Get the value associated with a key\r\n     * @param key The key whose value is to be returned\r\n     */\r\n    get(key: string) {\r\n      return this.map.get(key);\r\n    }\r\n\r\n    /**\r\n     * Get the value associated with a key or insert a new key-value pair if the key does not exist\r\n     * @param key The key whose value is to be updated\r\n     * @param value The value to be inserted if the key does not exist\r\n     */\r\n    upsert(key: string, value: any) {\r\n        if (this.contains(key)) {\r\n            this.map.set(key, value);\r\n        }else{\r\n            this.put(key, value);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Update the value associated with a key\r\n     * @param key The key whose value is to be updated\r\n     * @param value The value to be updated\r\n     */\r\n    update(key: string, value: any) {\r\n        if (this.contains(key)) {\r\n            this.map.set(key, value);\r\n        }else{\r\n            throw new Error(`Key ${key} does not exist`);\r\n        }\r\n    }\r\n  \r\n    /**\r\n     * Remove a key-value pair from the HashMap\r\n     * @param key The key whose value is to be removed\r\n     */\r\n    remove(key: string) {\r\n      this.map.delete(key);\r\n    }\r\n  \r\n    /**\r\n     * Check if the HashMap contains a given key\r\n     * @param key The key to be checked\r\n     */\r\n    contains(key: string) {\r\n      return this.map.has(key);\r\n    }\r\n  \r\n    /**\r\n     * Get all the keys present in the HashMap\r\n     */\r\n    keys() {\r\n      return Array.from(this.map.keys());\r\n    }\r\n  \r\n    /**\r\n     * Get all the values present in the HashMap\r\n     */\r\n    values() {\r\n      return Array.from(this.map.values());\r\n    }\r\n  \r\n    /**\r\n     * Get the size of the HashMap\r\n     */\r\n    size() {\r\n      return this.map.size;\r\n    }\r\n\r\n    /**\r\n     * Clear the HashMap\r\n     */\r\n    clear() {\r\n        this.map.clear();\r\n    }\r\n\r\n    /**\r\n     * Check if the HashMap is empty\r\n     */\r\n    isEmpty() {\r\n        return this.map.size === 0;\r\n    }\r\n\r\n    /**\r\n     * Iterate over the HashMap\r\n     */\r\n    forEach(callback: (value: any, key: string) => void) {\r\n        for (const [key, value] of this.map) {\r\n            callback(value, key);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Filter the HashMap\r\n     */\r\n    filter(callback: (value: any, key: string) => boolean) {\r\n        const filtered = new HashMap();\r\n        this.forEach((value, key) => {\r\n            if (callback(value, key)) {\r\n                filtered.put(key, value);\r\n            }\r\n        });\r\n        return filtered;\r\n    }\r\n\r\n    /**\r\n     * Get the entries of the HashMap\r\n     */\r\n    entries() {\r\n        return Array.from(this.map.entries());\r\n    }\r\n\r\n    /**\r\n     * Convert the HashMap to an object\r\n     */\r\n    toObject() {\r\n        const obj: any = {};\r\n        this.forEach((value, key) => {\r\n            obj[key] = value;\r\n        });\r\n        return obj;\r\n    }\r\n\r\n    /**\r\n     * Convert the HashMap to an array\r\n     */\r\n    toArray(){\r\n        const arr: any[] = [];\r\n        this.forEach((value, key) => {\r\n            arr.push([key, value]);\r\n        });\r\n        return arr;\r\n    }\r\n\r\n    /**\r\n     * Convert the HashMap to a flat array\r\n     */\r\n    toFlatArray(){\r\n        const arr: any[] = [];\r\n        this.forEach((value, key) => {\r\n            arr.push(key);\r\n            arr.push(value);\r\n        });\r\n        return arr;\r\n    }\r\n\r\n    /**\r\n     * get the first key of the associated value\r\n     * @param value The value whose key is to be returned\r\n     */\r\n    getKeyByValue(value: any): string | null {\r\n        for (const [key, val] of this.map) {\r\n            if (val === value) {\r\n                return key;\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    /**\r\n     * get all the keys of the associated value\r\n     * @param value The value whose keys are to be returned\r\n     */\r\n    getKeysByValue(value: any): string[] {\r\n        const keys: string[] = [];\r\n        for (const [key, val] of this.map) {\r\n            if (val === value) {\r\n                keys.push(key);\r\n            }\r\n        }\r\n        return keys;\r\n    }\r\n\r\n    /**\r\n     * update the key of a value\r\n     * @param value The value whose key is to be updated\r\n     * @param newKey The new key to be updated\r\n     */\r\n    updateKeyByValue(value: any, newKey: string) {\r\n        const key = this.getKeyByValue(value);\r\n        if (key) {\r\n            this.remove(key);\r\n            this.put(newKey, value);\r\n        }\r\n    }\r\n\r\n};","//// ------------------------------- HANDY MATRIX © Handy-JS 5m/28d/23y -------------------------------\r\n\r\n/**\r\n * implementation of `matrix` operations in typescript/javascript\r\n */\r\nexport default class Matrix {\r\n  private readonly rows: number;\r\n  private readonly cols: number;\r\n  private readonly data: number[][];\r\n\r\n  constructor(data: number[][]) {\r\n    if (Array.isArray(data)) {\r\n      // Copy the data array\r\n      this.data = [...data];\r\n\r\n      // Check if all rows have the same number of columns\r\n      const cols = data[0].length;\r\n      if (!data.every((row) => row.length === cols)) {\r\n        throw new Error(\"All rows must have the same number of columns.\");\r\n      }\r\n\r\n      this.rows = data.length;\r\n      this.cols = cols;\r\n    } else {\r\n      throw new Error(\"Invalid data format. Expecting an array of arrays.\");\r\n    }\r\n  }\r\n\r\n  /**\r\n   * fill the matrix with zeros `0` based on the given `rows` and `columns`\r\n   */\r\n  public static zeros(rows: number, cols: number): Matrix {\r\n    const data: number[][] = new Array(rows)\r\n      .fill(0)\r\n      .map(() => new Array(cols).fill(0));\r\n    return new Matrix(data);\r\n  }\r\n\r\n  /**\r\n   * fill the matrix with ones `1` based on the given `rows` and `columns`\r\n   */\r\n  public static ones(rows: number, cols: number): Matrix {\r\n    const data: number[][] = new Array(rows)\r\n      .fill(0)\r\n      .map(() => new Array(cols).fill(1));\r\n    return new Matrix(data);\r\n  }\r\n\r\n  /**\r\n   * return a matrix with 1 along the `diagonal` and 0 elsewhere, based on the given `size`\r\n   */\r\n  public static eye(size: number): Matrix {\r\n    const data: number[][] = new Array(size).fill(0).map((_, i) => {\r\n      const row = new Array(size).fill(0);\r\n      row[i] = 1;\r\n      return row;\r\n    });\r\n    return new Matrix(data);\r\n  }\r\n\r\n  /**\r\n   * return a matrix with random values between `min` and `max` based on the given `rows` and `columns`\r\n   */\r\n  public static random(\r\n    rows: number,\r\n    cols: number,\r\n    max: number,\r\n    min: number = 0\r\n  ): Matrix {\r\n    const data: number[][] = new Array(rows)\r\n      .fill(0)\r\n      .map(() => new Array(cols).fill(0).map(() => Math.randomInt(max, min)));\r\n    return new Matrix(data);\r\n  }\r\n\r\n  /**\r\n   * add 2 matrices, `matrix1` + `matrix2`\r\n   */\r\n  public static add(matrix1: Matrix, matrix2: Matrix): Matrix {\r\n    if (!Matrix.isSameSize(matrix1, matrix2)) {\r\n      throw new Error(\"Matrix dimensions must be the same for addition.\");\r\n    }\r\n\r\n    const result: number[][] = matrix1.data.map((row: number[], i: number) =>\r\n      row.map((val: number, j: number) => val + matrix2.data[i][j])\r\n    );\r\n    return new Matrix(result);\r\n  }\r\n\r\n  /**\r\n   * subtract 2 matrices, `matrix1` - `matrix2`\r\n   */\r\n  public static subtract(matrix1: Matrix, matrix2: Matrix): Matrix {\r\n    if (!Matrix.isSameSize(matrix1, matrix2)) {\r\n      throw new Error(\"Matrix dimensions must be the same for subtraction.\");\r\n    }\r\n\r\n    const result: number[][] = matrix1.data.map((row: number[], i: number) =>\r\n      row.map((val: number, j: number) => val - matrix2.data[i][j])\r\n    );\r\n    return new Matrix(result);\r\n  }\r\n\r\n  /**\r\n   * multiply 2 matrices, `matrix1` * `matrix2`, complexity: `O(n^3)`\r\n   */\r\n  public static multiply(matrix1: Matrix, matrix2: Matrix): Matrix {\r\n    if (matrix1.cols !== matrix2.rows) {\r\n      throw new Error(\r\n        \"Number of columns in Matrix 1 must match the number of rows in Matrix 2 for multiplication.\"\r\n      );\r\n    }\r\n\r\n    const result: number[][] = new Array(matrix1.rows)\r\n      .fill(0)\r\n      .map(() => new Array(matrix2.cols).fill(0));\r\n\r\n    for (let i = 0; i < matrix1.rows; i++) {\r\n      for (let j = 0; j < matrix2.cols; j++) {\r\n        for (let k = 0; k < matrix1.cols; k++) {\r\n          result[i][j] += matrix1.data[i][k] * matrix2.data[k][j];\r\n        }\r\n      }\r\n    }\r\n    return new Matrix(result);\r\n  }\r\n\r\n  /**\r\n   * multiply a matrix by a scalar, `matrix` * `scalar`\r\n   */\r\n  public static scale(matrix: Matrix, scalar: number): Matrix {\r\n    const result: number[][] = matrix.data.map((row: number[]) =>\r\n      row.map((val: number) => val * scalar)\r\n    );\r\n    return new Matrix(result);\r\n  }\r\n\r\n  /**\r\n   * transpose a matrix by swapping rows and columns\r\n   * @param {Matrix} matrix - matrix to transpose\r\n   */\r\n  public static transpose(matrix: Matrix): Matrix {\r\n    const result: number[][] = new Array(matrix.cols)\r\n      .fill(0)\r\n      .map(() => new Array(matrix.rows).fill(0));\r\n\r\n    for (let i = 0; i < matrix.rows; i++) {\r\n      for (let j = 0; j < matrix.cols; j++) {\r\n        result[j][i] = matrix.data[i][j];\r\n      }\r\n    }\r\n    return new Matrix(result);\r\n  }\r\n\r\n  /**\r\n   * compare tow matrices size\r\n   */\r\n  private static isSameSize(matrix1: Matrix, matrix2: Matrix): boolean {\r\n    return matrix1.rows === matrix2.rows && matrix1.cols === matrix2.cols;\r\n  }\r\n\r\n  /**\r\n   * check if the index of row and column is valid\r\n   */\r\n  private static isValidIndex(\r\n    matrix: Matrix,\r\n    rowIndex: number,\r\n    colIndex: number\r\n  ): boolean {\r\n    return (\r\n      rowIndex >= 0 &&\r\n      rowIndex < matrix.rows &&\r\n      colIndex >= 0 &&\r\n      colIndex < matrix.cols\r\n    );\r\n  }\r\n\r\n  /**\r\n   * return the size of the matrix\r\n   */\r\n  public size(): { rows: number; cols: number } {\r\n    return { rows: this.rows, cols: this.cols };\r\n  }\r\n\r\n  /**\r\n   * return the shape of the matrix\r\n   */\r\n  public shape(): [number, number] {\r\n    return [this.rows, this.cols];\r\n  }\r\n\r\n  /**\r\n   * get the value of the matrix at the given row (x-axis) and column (y-axis) (zero-indexed)\r\n   * @param row {number} The x-axis of the matrix\r\n   * @param col {number} The y-axis of the matrix\r\n   */\r\n  public get(row: number, col: number): number {\r\n    if (!Matrix.isValidIndex(this, row, col)) {\r\n      throw new Error(\"Invalid row or column index.\");\r\n    }\r\n    return this.data[row][col];\r\n  }\r\n\r\n  /**\r\n   * set the value of the matrix at the given row (x-axis) and column (y-axis) (zero-indexed)\r\n   * @param row {number} The x-axis of the matrix\r\n   * @param col {number} The y-axis of the matrix\r\n   * @param value {number} The value to set at the given row and column\r\n   */\r\n  public set(row: number, col: number, value: number): void {\r\n    if (!Matrix.isValidIndex(this, row, col)) {\r\n      throw new Error(\"Invalid row or column index.\");\r\n    }\r\n    this.data[row][col] = value;\r\n  }\r\n\r\n  /**\r\n   * convert the matrix to an array\r\n   */\r\n  public toArray(): number[][] {\r\n    return [...this.data];\r\n  }\r\n\r\n  /**\r\n   * convert the matrix to a flattened array\r\n   */\r\n  public flatten(): number[] {\r\n    return this.data.flat();\r\n  }\r\n\r\n  /**\r\n   * make a copy of the matrix\r\n   */\r\n  public clone(): Matrix {\r\n    return new Matrix([...this.data]);\r\n  }\r\n\r\n  /**\r\n   * Print the matrix to the `console`\r\n   */\r\n  public log(): void {\r\n    console.log(this.data.map((row) => row.join(\" \")).join(\"\\n\"));\r\n  }\r\n}\r\n"],"names":[],"mappings":"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"}