{"version":3,"sources":["../source/functions/arrays/index.ts","../source/functions/clipboard/index.ts","../source/functions/data/index.ts","../source/functions/dom/index.ts","../source/functions/graphql/index.ts","../source/functions/image/index.ts","../source/functions/indexing/index.ts","../source/functions/uuid/index.ts","../source/functions/runtime/index.ts","../source/functions/mathematics/index.ts","../source/functions/mathematics/arithmetic.ts","../source/functions/mathematics/constants.ts","../source/functions/mathematics/geometry.ts","../source/functions/mathematics/numbers.ts","../source/functions/mathematics/random.ts","../source/functions/meta/index.ts","../source/functions/network/index.ts","../source/functions/objects/index.ts","../source/functions/sha/index.ts","../source/functions/size/index.ts","../source/functions/storage/index.ts","../source/functions/strings/index.ts","../source/functions/time/index.ts","../source/functions/url/index.ts"],"names":["range","OPERATION_TYPES","debouncedCallback","flip","equal","shuffle"],"mappings":"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","file":"index.mjs","sourcesContent":["// #region module\n/**\n * Returns the range of integers between start (including) and end (excluding).\n *\n * https://dev.to/namirsab/comment/2050\n * @param start\n * @param end\n */\nexport const range = (\n    start: number,\n    end: number,\n) => {\n    const length = end - start;\n    return Array.from({ length }, (_, i) => start + i);\n}\n\n\n/**\n * Check if two arrays are equal.\n *\n * @param a\n * @param b\n */\nexport const equal = <T>(\n    a: T[],\n    b: T[],\n): Boolean => {\n    if (a === b) return true;\n    if (a == null || b == null) return false;\n    if (a.length !== b.length) return false;\n\n    for (let i = 0; i < a.length; i++) {\n        if (a[i] !== b[i]) return false;\n    }\n\n    return true;\n}\n\n\n/**\n * Move the `from` indexed item to the `to` indexed item of an array.\n *\n * @param items\n * @param from\n * @param to\n */\nexport const move = <T>(\n    items: T[],\n    from: number,\n    to: number,\n) => {\n    const newItems = [\n        ...items,\n    ];\n\n    newItems.splice(\n        to,\n        0,\n        newItems.splice(from, 1)[0]\n    );\n\n    return newItems;\n}\n\n\n/**\n * Swap item `a` with `b`.\n *\n * @param items\n * @param a\n * @param b\n */\nexport const swap = <T>(\n    items: T[],\n    a: number,\n    b: number,\n) => {\n    const newItems = [\n        ...items,\n    ];\n\n    [newItems[a], newItems[b]] = [newItems[b], newItems[a]];\n\n    return newItems;\n}\n\n\n/**\n * Get unique items based on their `identifier`.\n *\n * @param array\n * @param identifier default `'id'`\n * @returns\n */\nexport const unique = <T = any>(\n    array: T[],\n    identifier = 'id',\n) => {\n    const result = [];\n    const map = new Map();\n\n    for (const item of array.reverse()) {\n        if (!map.has((item as any)[identifier])) {\n            map.set((item as any)[identifier], true);\n\n            result.push({\n                ...item,\n            });\n        }\n    }\n\n    return result.reverse();\n}\n\n\n\n/**\n * Shuffles the `values` of an array.\n *\n * @param array\n * @returns\n */\nexport const shuffle = <T = any>(\n    values: T[],\n): T[] => {\n    const array = [\n        ...values,\n    ];\n\n    let m = array.length;\n    let i: number | undefined;\n    let temporary: T | undefined;\n\n    // From `https://bost.ocks.org/mike/shuffle`.\n    // While there are elements to shuffle…\n    while (m) {\n        // Pick a remaining element…\n        i = Math.floor(Math.random() * m--);\n\n        // And swap it with the current element.\n        temporary = array[m];\n        array[m] = array[i];\n        array[i] = temporary;\n\n        temporary = undefined;\n    }\n\n    return array;\n}\n// #endregion module\n","// #region module\nexport const copy = (\n    text: string,\n) => {\n    const el = document.createElement('textarea');\n    el.value = text;\n    el.setAttribute('readonly', '');\n    el.style.position = 'absolute';\n    el.style.left = '-9999px';\n    document.body.appendChild(el);\n    const selected = (document as any).getSelection().rangeCount > 0 ? (document as any).getSelection().getRangeAt(0) : false;\n    el.select();\n    document.execCommand('copy');\n    document.body.removeChild(el);\n    if (selected) {\n        (document as any).getSelection().removeAllRanges();\n        (document as any).getSelection().addRange(selected);\n    }\n};\n// #endregion module\n","// #region imports\n    // #region external\n    import {\n        PossibleDataString,\n    } from '~data/interfaces';\n    // #endregion external\n// #endregion imports\n\n\n\n// #region module\nexport const parse = <T = any>(\n    value: PossibleDataString,\n) => {\n    if (!value) {\n        return;\n    }\n\n    try {\n        const data = JSON.parse(value);\n        return data as T;\n    } catch (error) {\n        return;\n    }\n}\n\n\nexport const parseFromString = <T = any>(\n    value: string,\n) => {\n    try {\n        const data = JSON.parse(value);\n        return data as T;\n    } catch (error) {\n        return value;\n    }\n}\n\n\nexport const stringifyOrDefault = (\n    data: any,\n) => {\n    if (typeof data === 'undefined') {\n        return undefined;\n    }\n\n    if (typeof data === 'string') {\n        return data;\n    }\n\n    return JSON.stringify(\n        data,\n        (_, value) => typeof value === 'undefined' ? null : value,\n    );\n}\n// #endregion module\n","// #region module\nexport const placeCaretAtEnd = (\n    el: any,\n) => {\n    el.focus();\n    if (typeof window.getSelection != \"undefined\"\n            && typeof document.createRange != \"undefined\") {\n        const range = document.createRange();\n        range.selectNodeContents(el);\n        range.collapse(false);\n        const sel: any = window.getSelection();\n        sel.removeAllRanges();\n        sel.addRange(range);\n    } else if (typeof (document as any).body.createTextRange !== \"undefined\") {\n        const textRange = (document as any).body!.createTextRange();\n        textRange.moveToElementText(el);\n        textRange.collapse(false);\n        textRange.select();\n    }\n}\n\n\n/**\n * Gets the event path cross-browser.\n *\n * Based on https://stackoverflow.com/a/39245638\n *\n * @param event\n */\nexport const getEventPath = (\n    event: Event,\n) => {\n    if (event.composedPath) {\n        return event.composedPath() as HTMLElement[];\n    }\n\n    return (event as any)['path'] as HTMLElement[] || [];\n}\n\n\n\nexport const verifyPathInputElement = (\n    path?: HTMLElement[],\n) => {\n    if (!path) {\n        return false;\n    }\n\n    let input = false;\n\n    path.some(element => {\n        if (\n            element.tagName === 'INPUT'\n            || element.tagName === 'TEXTAREA'\n            || element.contentEditable === 'true'\n        ) {\n            input = true;\n            return true;\n        }\n        return false;\n    })\n\n    return input;\n}\n\n\nexport const verifyEventInput = (\n    event: Event,\n) => {\n    const path = getEventPath(event);\n\n    return verifyPathInputElement(path);\n}\n\n\n\n/**\n * Downloads `content` as file with `filename`.\n *\n * @param filename\n * @param content\n * @param dataString default `'data:text/plain;charset=utf-8,'`\n */\nexport const downloadContent = (\n    filename: string,\n    content: string,\n    dataString = 'data:text/plain;charset=utf-8,',\n) => {\n    const element = document.createElement('a');\n    element.setAttribute(\n        'href',\n        dataString + encodeURIComponent(content),\n    );\n    element.setAttribute('download', filename);\n\n    element.style.display = 'none';\n    document.body.appendChild(element);\n\n    element.click();\n\n    document.body.removeChild(element);\n}\n// #endregion module\n","// #region module\nexport const deleteTypenames = (\n    data: any,\n) => {\n    let dataObject = null;\n    if (Array.isArray(data)) {\n        dataObject = [ ...data ];\n    } else {\n        dataObject = { ...data };\n    }\n\n    for (const property in dataObject) {\n        if (property === '__typename') {\n            delete dataObject[property];\n        }\n\n        if (typeof dataObject[property] === 'object' && dataObject[property] !== null) {\n            const dataObjectProperty = deleteTypenames(dataObject[property]);\n            dataObject[property] = dataObjectProperty;\n        }\n    }\n\n    return dataObject;\n}\n// #endregion module\n","// #region module\n/**\n * Load image from URL in browser.\n *\n * @param url\n * @param anonymous\n */\nexport const load = (\n    url: string,\n    anonymous: boolean = true,\n) => {\n    return new Promise(\n        (response) => {\n            const image = new Image();\n            image.onload = (() => response(image));\n            if (anonymous) {\n                image.crossOrigin = 'anonymous';\n            }\n            image.src = url;\n        },\n    );\n};\n// #endregion module\n","// #region imports\n    // #region external\n    import {\n        Indexed,\n    } from '~data/interfaces';\n\n    import * as uuid from '~functions/uuid';\n    // #endregion external\n// #endregion imports\n\n\n\n// #region module\n/**\n * Identify `items` by an `idEntity` property.\n *\n * @param items\n * @param idEntity\n */\nexport const identify = <T>(\n    items: T[],\n    /**\n     * Identify items by a certain property. Default `id`.\n     */\n    idEntity?: string,\n) => {\n    const idProperty = idEntity || 'id';\n\n    type Identified = {\n        [property in typeof idProperty]: string;\n    }\n    type IdentifiedT = T & Identified;\n\n\n    const identifiedItems = items.map(item => {\n        const idValue: string = (item as Record<string, any>)[idProperty] || uuid.generate();\n\n        const identifiedItem = {\n            ...item,\n        };\n        (identifiedItem as Record<string, any>)[idProperty] = idValue;\n\n        return identifiedItem as IdentifiedT;\n    });\n\n    return identifiedItems;\n}\n\n\n\nexport type MapType = 'map';\nexport type ObjectType = 'object';\nexport type CreateType = MapType | ObjectType;\n\nexport function create<T, O extends ObjectType>(items: T[], type?: O, idKey?: string): Indexed<T>;\nexport function create<T, M extends MapType>(items: T[], type?: M, idKey?: string): Map<string, T>;\nexport function create<T, C extends CreateType>(items: T[], type?: C, idKey?: string)  {\n    const id = idKey || 'id';\n    const typeProperty = type || 'object';\n\n    switch (typeProperty) {\n        case 'map':\n            {\n                const mappedItems = new Map<string, T>();\n\n                items.map(item => {\n                    const idValue: string = (item as Record<string, any>)[id] || uuid.generate();\n                    mappedItems.set(idValue, item);\n                });\n\n                return mappedItems;\n            }\n        case 'object':\n            {\n                const indexedItems: Indexed<T> = {};\n\n                for (const item of items) {\n                    const itemID: string | undefined = (item as Record<string, any>)[id];\n                    if (!itemID) {\n                        continue;\n                    }\n                    indexedItems[itemID] = item;\n                }\n\n                return indexedItems;\n            }\n    }\n\n    return;\n}\n// #endregion module\n","// #region imports\n    // #region external\n    import {\n        isBrowser,\n        isNode,\n    } from '../runtime';\n    // #endregion external\n// #endregion imports\n\n\n\n// #region module\n/**\n * Generate a unique identifier with or without `separator`.\n *\n * Based on https://stackoverflow.com/a/2117523.\n *\n * @param separator\n */\nexport const v4Browser = (\n    separator: string = '',\n) => {\n    return (\n        [1e7] as any + separator + 1e3 + separator + 4e3 + separator + 8e3 + separator + 1e11).replace(/[018]/g,\n        (c: any) => (((c ^ crypto.getRandomValues(new Uint8Array(1))[0]) & 15) >> c / 4).toString(16)\n    );\n}\n\n\nexport const v4Node = (\n    separator: string = '',\n) => {\n    // Web Crypto (`crypto.getRandomValues`) is available in Node >= 19 (and browsers), so this\n    // no longer needs `eval('require')('crypto')` to hide a Node-only require from bundlers.\n    const randomBytes = globalThis.crypto.getRandomValues(new Uint8Array(16));\n    const id = Array.from(randomBytes, byte => byte.toString(16).padStart(2, '0')).join('');\n    if (!separator) {\n        return id;\n    }\n\n    return id.slice(0, 8) + separator\n        + id.slice(8, 12) + separator\n        + id.slice(12, 16) + separator\n        + id.slice(16, 20) + separator\n        + id.slice(20);\n}\n\n\n\nexport const generate = (\n    separator: string = '',\n    version: string = 'v4',\n): string => {\n    if (version === 'v4') {\n        if (isBrowser) {\n            return v4Browser(separator);\n        }\n\n        if (isNode) {\n            return v4Node(separator);\n        }\n    }\n\n    return '';\n}\n\n\n/**\n * Generate multiple, concatenated uuids.\n *\n * @param count default `2`\n * @param separator\n * @returns\n */\nexport const multiple = (\n    count: number = 2,\n    separator?: string,\n) => {\n    let value = '';\n\n    for (let i = 0; i < count; i++) {\n        value += generate(\n            separator,\n        );\n    }\n\n    return value;\n}\n// #endregion module\n","// #region module\n/**\n * Based on https://stackoverflow.com/a/38815760\n */\nexport const isBrowser = typeof window !== 'undefined'\n    && ({}).toString.call(window) === '[object Window]';\n\n// `globalThis` (universal) instead of the Node-only `global` — in Node it still tags as `[object global]`,\n// in the browser it is the window (`[object Window]`), so the discriminator is preserved without @types/node.\nexport const isNode = typeof globalThis !== 'undefined'\n    && ({}).toString.call(globalThis) === '[object global]';\n// #endregion module\n","// #region imports\n    // #region internal\n    import * as arithmetic from './arithmetic';\n    import * as constants from './constants';\n    import * as geometry from './geometry';\n    import * as numbers from './numbers';\n    import * as random from './random';\n    // #endregion internal\n// #endregion imports\n\n\n\n// #region exports\nexport {\n    arithmetic,\n    constants,\n    geometry,\n    numbers,\n    random,\n};\n// #endregion exports\n","// #region module\nexport enum OPERATION_TYPES {\n    SUM = 'SUM',\n    PRODUCT = 'PRODUCT',\n    DIFFERENCE = 'DIFFERENCE',\n}\n\n/**\n * Operate on the `values` up to the given `index` based the specific `operation`.\n * If the `index` is not given it operates to the end.\n *\n * @param type\n * @param values\n * @param index\n */\nexport const operation = (\n    type: keyof typeof OPERATION_TYPES,\n    values: number[],\n    index?: number,\n): number => {\n    const _index = typeof index === 'number'\n        ? index\n        : values.length;\n\n    if (_index === 0) {\n        return 0;\n    }\n\n    if (_index > values.length) {\n        throw 'sum(): Index Out of Bounds.';\n    }\n\n    const _values = values.slice(\n        0,\n        _index,\n    );\n    return _values.reduce(\n        (total, val) => {\n            switch(type) {\n                case OPERATION_TYPES.SUM:\n                    return total + val;\n                case OPERATION_TYPES.PRODUCT:\n                    return total * val;\n                case OPERATION_TYPES.DIFFERENCE:\n                    return total - val;\n                default:\n                    return total + val;\n            }\n        },\n    );\n}\n\n\n/**\n * Sum the `values` up to the given `index`.\n * If the `index` is not given it sums to the end.\n *\n * @param values\n * @param index\n */\nexport const sum = (\n    values: number[],\n    index?: number,\n): number => {\n    const value = operation(\n        OPERATION_TYPES.SUM,\n        values,\n        index\n    );\n    return value;\n}\n\n\n/**\n * Multiply the `values` up to the given `index`.\n * If the `index` is not given it multiplies to the end.\n *\n * @param values\n * @param index\n */\nexport const product = (\n    values: number[],\n    index?: number,\n): number => {\n    const value = operation(\n        OPERATION_TYPES.PRODUCT,\n        values,\n        index\n    );\n    return value;\n}\n// #endregion module\n","// #region module\nexport const tau = Math.PI * 2;\n// #endregion module\n","// #region module\n/**\n * Convert the `angle` from radians to degrees.\n *\n * @param angle\n */\nexport const toDegrees = (\n    angle: number\n) => {\n    return angle * (180 / Math.PI);\n}\n\n\n/**\n * Convert the `angle` from degrees to radians.\n * @param angle\n */\nexport const toRadians = (\n    angle: number,\n) => {\n    return angle * (Math.PI / 180);\n}\n// #endregion module\n","// #region module\n/**\n * Return true if `value` is an integer\n * but not equal to `1`.\n *\n * @param value\n */\nexport const checkIntegerNonUnit = (\n    value: number,\n) => {\n    if (\n        Number.isInteger(value)\n        && value !== 1\n    ) {\n        return true;\n    }\n\n    return false;\n}\n\n\n/**\n * Normalizes the `value` between the `lower` and `upper` limits.\n *\n * ```\n * normalizeBetween( 20, 0, 100) -> 20\n * normalizeBetween(-20, 0, 100) -> 0\n * normalizeBetween(120, 0, 100) -> 100\n * ```\n *\n * @param value\n * @param lower\n * @param upper\n * @returns\n */\n export const normalizeBetween = (\n    value: number,\n    lower: number,\n    upper: number,\n) => {\n    if (value < lower) {\n        return lower;\n    }\n\n    if (value > upper) {\n        return upper;\n    }\n\n    return value;\n}\n// #endregion module\n","// #region module\n/**\n * Generate a random number between the given `maximum` and `minimum` values.\n *\n * @param maximum - `1` by default.\n * @param minimum - `0` by default.\n * @param integer - `false` by default. If `true` it returns an integer.\n * @param closedInterval - `true` by default. If `false` it does not include the endpoints.\n * @returns A rational number by default.\n */\nexport const number = (\n    maximum: number = 1,\n    minimum: number = 0,\n    integer: boolean = false,\n    closedInterval: boolean = true,\n): number => {\n    const value = Math.random() * (maximum - minimum);\n\n    if (!integer) {\n        return value + minimum;\n    }\n\n    if (!closedInterval) {\n        return Math.floor(value) + minimum;\n    }\n\n    const randomInterval = Math.random();\n    return Math.floor(value) + minimum + Math.round(randomInterval);\n};\n// #endregion module\n","// #region module\nexport const debounce = (\n    func: any,\n    wait: any,\n    immediate: boolean = false,\n) => {\n    let timeout: any;\n\n    return function (this: any, ...args: any[]) {\n        const context = this;\n\n        const later = function() {\n            timeout = null;\n            if (!immediate) func.apply(context, args);\n        };\n\n        const callNow = immediate && !timeout;\n\n        clearTimeout(timeout);\n\n        timeout = setTimeout(later, wait);\n\n        if (callNow) func.apply(context, args);\n    };\n};\n\n\n/**\n * Source: https://stackoverflow.com/a/57335271\n *\n * @param callback Function to be called.\n * @param wait Debounce time.\n */\nexport function debouncedCallback<A extends any[]>(\n    callback: (...args: A) => void,\n    wait: number,\n) {\n    // track args & timeout handle between calls\n    let argsRef: any;\n    let timeout: any;\n\n    function cleanup() {\n        if (timeout) {\n            clearTimeout(timeout);\n        }\n    }\n\n    return function debouncedCallback(\n        ...args: A\n    ) {\n        // capture latest args\n        argsRef = args;\n\n        // clear debounce timer\n        cleanup();\n\n        // start waiting again\n        timeout = setTimeout(() => {\n            if(argsRef) {\n                callback(...argsRef);\n            }\n        }, wait);\n    };\n}\n// #endregion module\n","// #region module\n\n// https://stackoverflow.com/a/36760050/6639124\nconst ipv4Regex = /^((25[0-5]|(2[0-4]|1\\d|[1-9]|)\\d)(\\.(?!$)|$)){4}$/;\n\n// https://stackoverflow.com/a/50385461/6639124\nconst ipv6Regex = /(([0-9a-fA-F]{0,4}:){1,7}[0-9a-fA-F]{0,4})/;\n\n// https://stackoverflow.com/a/60831867/6639124\nconst originRegex = /https?:\\/\\/(?:w{1,3}\\.)?[^\\s.]+(?:\\.[a-z]+)*(?::\\d+)?((?:\\/\\w+)|(?:-\\w+))*\\/?(?![^<]*(?:<\\/\\w+>|\\/?>))/;\n\n\n\nexport const isIPv4 = (\n    value: string | undefined,\n) => {\n    if (typeof value !== 'string') {\n        return false;\n    }\n\n    return ipv4Regex.test(value);\n}\n\n\nexport const isIPv6 = (\n    value: string | undefined,\n) => {\n    if (typeof value !== 'string') {\n        return false;\n    }\n\n    return ipv6Regex.test(value);\n}\n\n\nexport const isIP = (\n    value: string | undefined,\n) => {\n    const ipv4 = isIPv4(value);\n    if (ipv4) {\n        return 'ipv4';\n    }\n\n    const ipv6 = isIPv6(value);\n    if (ipv6) {\n        return 'ipv6';\n    }\n\n    return;\n}\n\n\n/**\n * Checks the value respects `<scheme> \"://\" <hostname> [ \":\" <port> ]`.\n *\n * @param value\n * @returns\n */\nexport const isOrigin = (\n    value: string | undefined,\n) => {\n    if (typeof value !== 'string') {\n        return false;\n    }\n\n    return originRegex.test(value);\n}\n// #endregion module\n","// #region imports\n    // #region external\n    import {\n        InvertResult,\n        RecursivePartial,\n        NestedKeyOf,\n        RecursiveOmit,\n    } from '~data/interfaces';\n    // #endregion external\n// #endregion imports\n\n\n\n// #region module\nexport const isObject = (\n    entity: any,\n) => {\n    if (\n        typeof entity === 'object'\n        && !Array.isArray(entity)\n        && entity !== null\n    ) {\n        return true;\n    }\n\n    return false;\n}\n\n\n\n/**\n * http://blog.nicohaemhouts.com/2015/08/03/accessing-nested-javascript-objects-with-string-key/\n *\n * @param data\n * @param path\n * @param separator\n */\nexport const getNested = <T>(\n    data: T,\n    path: string,\n    separator: string = '.',\n) => {\n    try {\n        return path.\n            replace('[', separator).replace(']','').\n            split(separator).\n            reduce(\n                (obj: any, property: string) => {\n                    return obj[property];\n                },\n                data,\n            );\n    } catch (err) {\n        return undefined;\n    }\n}\n\n\n/**\n * https://stackoverflow.com/a/52912610\n *\n * @param data\n * @param update\n * @param path\n * @param separator\n*/\nexport const updateNested = <T, U>(\n   data: T,\n   path: string,\n   update: U,\n   separator: string = '.',\n): T | undefined => {\n    try {\n        const split = path.split(separator);\n\n        let current = data;\n\n        while (split.length > 1) {\n            const part = split.shift();\n\n            if (!part) {\n                return;\n            }\n\n            const parent = current;\n            current = (current as any)[part];\n\n            if (undefined === current) {\n                (parent as any)[part] = {};\n                current = (parent as any)[part];\n            }\n        }\n\n        if (split.length === 1) {\n            const part = split.shift();\n            if (!part) {\n                return;\n            }\n            (current as any)[part] = update;\n        }\n\n        return data;\n    } catch (err) {\n        return;\n    }\n}\n\n\n/**\n * https://stackoverflow.com/a/40294058/6639124\n *\n * @param obj\n * @param hash\n */\nconst deepClone = (\n    obj: any,\n    hash = new WeakMap(),\n): any => {\n    if (Object(obj) !== obj) return obj; // primitives\n\n    if (hash.has(obj)) return hash.get(obj); // cyclic reference\n\n    const result = obj instanceof Set ? new Set(obj) // See note about this!\n                 : obj instanceof Map ? new Map(Array.from(obj, ([key, val]) =>\n                                        [key, deepClone(val, hash)]))\n                 : obj instanceof Date ? new Date(obj)\n                 : obj instanceof RegExp ? new RegExp(obj.source, obj.flags)\n                 // ... add here any specific treatment for other classes ...\n                 // and finally a catch-all:\n                 : obj.constructor ? new obj.constructor()\n                 : Object.create(null);\n\n    hash.set(obj, result);\n\n    return Object.assign(\n        result,\n        ...Object.keys(obj).map(\n            key => ({ [key]: deepClone(obj[key], hash) })\n        ),\n    );\n}\n\n\n/**\n * Creates a deep clone of the `data`.\n *\n * The default `type` is `json`, meant for deep cloning of json-like objects.\n * The `any` `type` will handle a deep clone of `Function`, `Date`, and more.\n *\n * @param data\n * @param type\n */\nexport const clone = <D>(\n    data: D,\n    type?: 'json' | 'any',\n): D => {\n    // Explicit 'json' keeps the fast path for plain JSON-like data, but falls back to the\n    // cycle-safe deep clone on cyclic input — `JSON.stringify` THROWS on cycles, and\n    // `JSON.parse(JSON.stringify(undefined))` throws (\"undefined is not valid JSON\").\n    if (type === 'json') {\n        try {\n            return JSON.parse(\n                JSON.stringify(data),\n            );\n        } catch (_error) {\n            return deepClone(data);\n        }\n    }\n\n    // Default (+ 'any'): cycle-safe deep clone. `deepClone` guards primitives/null/undefined,\n    // handles Date/Map/Set/RegExp + cyclic references, and never throws — unlike the old\n    // JSON default which silently dropped functions/undefined and crashed on cycles. This is\n    // the per-tree-mutation hot path, so it must not throw.\n    return deepClone(data);\n}\n\n\n/**\n * Convert map to object.\n *\n * @param map\n */\nexport const mapToObject = <K, V>(\n    map: Map<K, V>,\n) => {\n    const obj: any = {};\n\n    for (const [key, value] of map) {\n        obj[key] = value;\n    }\n\n    return obj;\n}\n\n\n/**\n * Removes `undefined` or `null` values from key-value object.\n *\n * @param object\n * @returns\n */\nexport const clean = (\n    object: Record<string, any | undefined | null>,\n    onlyUndefined = false,\n) => {\n    const clonedObject = clone(object, 'any');\n\n    for (const [key, value] of Object.entries(clonedObject)) {\n        if (typeof value === 'undefined') {\n            delete clonedObject[key];\n        }\n\n        if (!onlyUndefined) {\n            if (value === null) {\n                delete clonedObject[key];\n            }\n        }\n\n        if (isObject(value)) {\n            clonedObject[key] = clean(value, onlyUndefined);\n        }\n    }\n\n    return clonedObject;\n}\n\n\n/**\n * Flips the keys and the values of the object.\n * The values must be `string`s or `number`s.\n *\n * ```\n * const a = {\n *   b: 'c',\n *   d: 'e',\n *   f: 1,\n *   g: true, // ignored\n * } as const;\n *\n * flip(a) -> {\n *   c: 'b',\n *   e: 'd',\n *   1: 'f',\n * }\n * ```\n *\n * @param obj\n * @returns\n */\nexport const flip = <\n    T extends Record<PropertyKey, PropertyKey>,\n>(\n    obj: T,\n): InvertResult<T> => Object.entries(obj).reduce(\n    (flip, entry) => {\n        const [\n            key,\n            value,\n        ] = entry;\n\n        if (\n            typeof value !== 'string'\n            && typeof value !== 'number'\n        ) {\n            return flip;\n        }\n\n        (flip as Record<string, any>)[value] = key;\n        return flip;\n    },\n    {} as InvertResult<T>,\n);\n\n\n/**\n * Merges `target` into `object`.\n *\n * The `resolvers` can be used to resolve any field within the `object`\n * using dot-access syntax, e.g. `{ 'key1.key1.key3': () => value }`.\n *\n * @param object\n * @param target\n * @param resolvers\n * @param trunk\n * @returns\n */\nexport const merge = <O extends object = any, R = O>(\n    object: O,\n    target: RecursivePartial<O>,\n    resolvers: Partial<\n        Record<\n            NestedKeyOf<O>, any | (() => any)\n        >\n    > = {} as any,\n    trunk?: string,\n): R => {\n    const resolverMap = resolvers as Record<string, any>;\n\n    // Only recurse into PLAIN objects; Date/Map/Set/RegExp/class instances are leaf values\n    // (merge them by reference, don't rebuild them as `{}`).\n    const isMergeable = (value: any): boolean =>\n        isObject(value)\n        && (value.constructor === Object || value.constructor === undefined);\n\n    /**\n     * Recurse on the sub-nodes themselves (NOT a re-walk from the root via `getNested` per\n     * key) so the merge is O(total keys) instead of O(keys × depth); and union BOTH sides'\n     * keys at each level so a field present in `target` but absent from `object` is KEPT\n     * rather than silently dropped (the previous version iterated only `object`'s keys).\n     */\n    const mergeNode = (\n        objectNode: any,\n        targetNode: any,\n        path?: string,\n    ): any => {\n        if (!isMergeable(objectNode) && !isMergeable(targetNode)) {\n            return typeof targetNode !== 'undefined' ? targetNode : objectNode;\n        }\n\n        const result: any = {};\n        const keys = new Set<string>([\n            ...(isObject(objectNode) ? Object.keys(objectNode) : []),\n            ...(isObject(targetNode) ? Object.keys(targetNode) : []),\n        ]);\n\n        for (const key of keys) {\n            const keyPath = path ? path + '.' + key : key;\n\n            // Use `in` so a resolver value of `0` / `false` / `''` is honored (not skipped).\n            if (keyPath in resolverMap) {\n                const resolver = resolverMap[keyPath];\n                result[key] = typeof resolver === 'function' ? resolver() : resolver;\n                continue;\n            }\n\n            const objectField = isObject(objectNode) ? objectNode[key] : undefined;\n            const targetField = isObject(targetNode) ? targetNode[key] : undefined;\n\n            if (isMergeable(objectField) || isMergeable(targetField)) {\n                result[key] = mergeNode(objectField, targetField, keyPath);\n                continue;\n            }\n\n            result[key] = typeof targetField !== 'undefined'\n                ? targetField\n                : objectField;\n        }\n\n        return result;\n    };\n\n    const objectStart = trunk ? getNested(object, trunk) : object;\n    const targetStart = trunk ? getNested(target, trunk) : target;\n\n    return mergeNode(objectStart, targetStart, trunk) as R;\n}\n\n\n/**\n * Check `target` equals `object` based on `object`s keys.\n *\n * @param object\n * @param target\n * @param trunk\n * @returns\n */\nexport const equals = <O = any>(\n    object: O,\n    target: O,\n    trunk?: string,\n): boolean => {\n    const keysObject = trunk\n        ? getNested(object, trunk)\n        : object;\n\n    for (const key in keysObject) {\n        const path = trunk\n            ? trunk + '.' + key\n            : key;\n\n        const valueObject = getNested(object, path);\n        const valueTarget = getNested(target, path);\n\n        if (isObject(valueObject)) {\n            const equal = equals(\n                object,\n                target,\n                path,\n            );\n\n            if (!equal) {\n                return false;\n            }\n\n            continue;\n        }\n\n        if (valueObject !== valueTarget) {\n            return false;\n        }\n    }\n\n    return true;\n}\n\n\nexport const omit = <\n    O extends Record<string, any>,\n    K extends NestedKeyOf<O> | NestedKeyOf<O>[],\n>(\n    object: O,\n    keys: K,\n    trunk?: string,\n): RecursiveOmit<O, K> => {\n    const result: any = {};\n\n    const keysObject = trunk\n        ? getNested(object, trunk)\n        : object;\n\n    for (const key in keysObject) {\n        const path = trunk\n            ? trunk + '.' + key as NestedKeyOf<O>\n            : key as NestedKeyOf<O>;\n\n        if (typeof keys === 'string') {\n            if (keys === path) {\n                continue;\n            }\n        } else if (keys.includes(path)) {\n            continue;\n        }\n\n        const field = getNested(object, path);\n\n        if (isObject(field)) {\n            const value = omit(\n                object,\n                keys,\n                path as any,\n            );\n\n            result[key] = value;\n            continue;\n        }\n\n        result[key] = field;\n    }\n\n    return result;\n}\n// #endregion module\n","// #region module\nconst compute = async (\n    data: string,\n    algorithm: string = 'sha256',\n): Promise<string> => {\n    // Web Crypto (`crypto.subtle`) is available in browsers and Node >= 19, so a single path\n    // covers both. This replaces the old browser/Node split + the `eval('require')('crypto')`\n    // hack (whose only purpose was hiding the Node require from bundlers).\n    const subtleAlgorithm = algorithm.toUpperCase().replace('SHA', 'SHA-');\n    const messageBytes = new TextEncoder().encode(data);\n    const hashBuffer = await globalThis.crypto.subtle.digest(subtleAlgorithm, messageBytes);\n    return Array.from(new Uint8Array(hashBuffer))\n        .map(byte => byte.toString(16).padStart(2, '0'))\n        .join('');\n}\n// #endregion module\n\n\n\n// #region exports\nexport {\n    compute,\n};\n// #endregion exports\n","// #region module\n/**\n * Convert bytes to human readable text, e.g. `12345678` bytes to `12.34 MB`.\n *\n * `binary` sets the block size to `1024` or `1000` bytes.\n *\n * @param binary\n * @returns\n */\nconst humanFormat = (\n    size: number,\n    binary = false,\n) => {\n    const block = binary\n        ? 1024\n        : 1000;\n\n    if (size < block) {\n        return size + ' B';\n    }\n\n    const i = Math.floor(Math.log(size) / Math.log(block));\n    let num: number | string = (size / Math.pow(block, i));\n    const round = Math.round(num);\n\n    num = round < 10\n        ? num.toFixed(2)\n        : round < 100\n            ? num.toFixed(1)\n            : round;\n\n    const binaryText = binary ? 'i' : '';\n    const prefix = 'KMGTPEZY'[i - 1] + binaryText;\n\n    return `${num} ${prefix}B`;\n}\n// #endregion module\n\n\n\n// #region exports\nexport {\n    humanFormat,\n};\n// #endregion exports\n","// #region module\nexport const loadState = (\n    name: string,\n) => {\n    try {\n        const serializedState = localStorage.getItem(name);\n        if (serializedState === null) {\n            return;\n        }\n\n        return JSON.parse(serializedState);\n    } catch (error) {\n        return;\n    }\n};\n\n\nexport const saveState = <S>(\n    state: S,\n    name: string,\n) => {\n    try {\n        const serializedState = JSON.stringify(state);\n        localStorage.setItem(name, serializedState);\n    } catch (error) {\n        return;\n    }\n};\n// #endregion module\n","// #region imports\n    // #region external\n    import {\n        shuffle as arraysShuffle,\n    } from '../arrays';\n    // #endregion external\n// #endregion imports\n\n\n\n// #region module\nexport const removeWhitespace = (\n    value: string | undefined,\n) => {\n    if (!value) {\n        return '';\n    }\n\n    return value\n        .replace(/\\s+/g, ' ')\n        .trim();\n}\n\n\n/**\n * Capitalizes the first letter of the word.\n *\n * ``` text\n * e.g. foo -> Foo\n * ```\n *\n * @param value\n */\nexport const capitalize = (\n    value: string,\n) => {\n    return value.charAt(0).toUpperCase() + value.slice(1);\n}\n\n\n/**\n * Capitalizes the first letter of every word.\n *\n * ``` text\n * e.g. foo boo -> Foo Boo\n * ```\n *\n * @param value\n */\nexport const capitalizeAll = (\n    value: string,\n) => {\n    const splits = value.split(' ');\n\n    const capitalizedSplits = splits.map(split => {\n        return capitalize(split);\n    });\n\n    return capitalizedSplits.join(' ');\n}\n\n\n/**\n * Truncates the `value` to a given `length` adding the `ending`.\n *\n * ``` text\n * e.g. 1234567890 -> 1234…\n * ```\n *\n * ``` typescript\n * truncate('1234567890', 4)\n * ```\n *\n * @param value\n * @param length default `100`\n * @param ending default `'…'`\n * @returns\n */\nexport const truncate = (\n    value: string | undefined,\n    length: number = 50,\n    ending: string = '…',\n) => {\n    if (!value) {\n        return '';\n    }\n\n    if (value.length <= length) {\n        return value;\n    }\n\n    return value.slice(0, length) + ending;\n}\n\n\n/**\n * Trims the middle of the `value` keeping the lateral `length`\n * and replacing with the `middle`.\n *\n * ``` text\n * e.g. 12345678901234567890 -> 123456…567890\n * ```\n *\n * @param value\n * @param length default `6`\n * @param middle default `'…'`\n * @param startLength\n * @param endLength\n * @returns\n */\nexport const trimMiddle = (\n    value: string | undefined,\n    length: number = 6,\n    middle: string = '…',\n    startLength?: number,\n    endLength?: number,\n) => {\n    if (!value) {\n        return '';\n    }\n\n    const lengthSum = (startLength ?? length) + (endLength ?? length);\n\n    if (value.length < (lengthSum + middle.length)) {\n        return value;\n    }\n\n    const start = value.slice(0, startLength ?? length);\n    const end = value.slice(value.length - (endLength ?? length));\n    const trim = start + middle + end;\n\n    return trim;\n}\n\n\n/**\n * Given a text string, e.g. 'one two three',\n * it removes the last word, 'three', returning 'one two'.\n *\n * If the text string is one word, 'one', it returns ''.\n *\n * @param text Text string.\n */\nexport const removeLastWord = (\n    text: string,\n): string => {\n    const wordsArray = text.split(' ');\n    if (wordsArray.length === 1) {\n        return '';\n    }\n\n    const removedLastWordArray = wordsArray.slice(0, wordsArray.length - 1);\n    const words = removedLastWordArray.join(' ');\n\n    return words;\n}\n\n\n/**\n * Given `PascalCaseValue` it returns `pascal.case.value`.\n *\n * @param value\n * @param lowercase default `true`\n * @returns\n */\nexport const pascalCaseToDotNotation = (\n    value: string,\n    lowercase = true,\n) => {\n    let newValue = '';\n\n    for (let i = 0; i < value.length; i++) {\n        const letter = value[i];\n\n        if (letter === letter.toUpperCase()) {\n            if (i !== 0) {\n                newValue += '.';\n            }\n\n            if (lowercase) {\n                newValue += letter.toLowerCase();\n            } else {\n                newValue += letter;\n            }\n        } else {\n            newValue += letter;\n        }\n    }\n\n    return newValue;\n}\n\n\n/**\n * Given `PascalCaseValue` it returns `Pascal_Case_Value`.\n *\n * @param value\n * @returns\n */\nexport const pascalCaseToSnakeCase = (\n    value: string,\n) => {\n    const snakeCase = value\n        .replace(/([A-Z][a-z])/g,' $1')\n        .trim()\n        .split(' ')\n        .join('_');\n\n    return snakeCase;\n}\n\n\n/**\n * Given `Pascal_Case_Value` it returns `PascalCaseValue`.\n *\n * @param value\n * @returns\n */\nexport const snakeCaseToPascalCase = (\n    value: string,\n) => {\n    const pascalCase = value.toLowerCase()\n        .split('_')\n        .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n        .join('');\n\n    return pascalCase;\n}\n\n\n\n/**\n * Converts `Camel Case Value` to `camelCaseValue`.\n *\n * @param text\n */\nexport const toCamelCase = (\n    value: string\n) => {\n    return value\n        .toLowerCase()\n        .replace(\n            /[^a-zA-Z0-9]+(.)/g,\n            (_, character) => character.toUpperCase(),\n        );\n}\n\n\n/**\n * Shuffles the characters of the `text`.\n *\n * @param text\n * @returns\n */\nexport const shuffle = (\n    text: string,\n): string => {\n    const shuffled = arraysShuffle(text.split(''));\n\n    return shuffled.join('');\n}\n\n\n/**\n * Removes the `character` at the start of the `value`.\n *\n * @param value\n * @param character\n * @param count default `1`\n * @returns\n */\n export const trimStart = (\n    value: string,\n    character: string,\n    count = 1,\n): string => {\n    if (count === 0) {\n        return value;\n    }\n\n    if (value[0] === character) {\n        return trimStart(\n            value.slice(1),\n            character,\n            count - 1,\n        );\n    }\n\n    return value;\n}\n\n\n/**\n * Removes the `character` at the end of the `value`.\n *\n * @param value\n * @param character\n * @param count default `1`\n * @returns\n */\nexport const trimEnd = (\n    value: string,\n    character: string,\n    count = 1,\n): string => {\n    if (count === 0) {\n        return value;\n    }\n\n    if (value[value.length - 1] === character) {\n        return trimEnd(\n            value.slice(0, value.length - 1),\n            character,\n            count - 1,\n        );\n    }\n\n    return value;\n}\n\n\n/**\n * Pluralizes a `text` based on a `value`.\n *\n * ``` typescript\n * pluralize(1, 'day'); // '1 day'\n * pluralize(2, 'day'); // '2 days'\n *\n * pluralize(1, 'bus', 'es'); // '1 bus'\n * pluralize(2, 'bus', 'es'); // '1 buses'\n *\n * pluralize(1, 'wolf', { replace: 'wolves' }); // '1 wolf'\n * pluralize(2, 'wolf', { replace: 'wolves' }); // '2 wolves'\n * ```\n *\n * @param value\n * @param text\n * @param overload `string | { replace: string }`\n * @returns\n */\nexport function pluralize(\n    value: number,\n    text: string,\n    end: string,\n): string;\nexport function pluralize(\n    value: number,\n    text: string,\n    options: {\n        replace: string;\n    },\n): string;\nexport function pluralize(\n    value: any,\n    text: any,\n    overload: any,\n) {\n    if (\n        typeof value !== 'number'\n        || typeof text !== 'string'\n    ) {\n        return '';\n    }\n\n    let end = 's';\n    let replace;\n    if (typeof overload === 'string') {\n        end = overload;\n    } else {\n        replace = overload.replace;\n    }\n\n    const space = ' ';\n\n    if (value === 1) {\n        return value + space + text;\n    }\n\n    if (replace) {\n        return value + space + replace;\n    }\n\n    return value + space + text + end;\n}\n// #endregion module\n","// #region module\nconst now = () => {\n    return Math.floor(\n        Date.now() / 1000,\n    );\n}\n\n\nconst stamp = () => {\n    const date = new Date();\n\n    return `${date.toLocaleTimeString()} - ${date.toLocaleDateString()}`;\n}\n\n\n/**\n * Delay the program flow for `value` time, in milliseconds.\n *\n * Default: `500`\n *\n * @param value\n */\nconst delay = async (\n    value: number = 500,\n) => {\n    await new Promise((resolve) => {\n        setTimeout(() => {\n            resolve(true);\n        }, value);\n    });\n}\n// #endregion module\n\n\n\n// #region exports\nexport {\n    now,\n    stamp,\n    delay,\n};\n// #endregion exports\n","// #region module\nexport const removeTrailingSlash = (\n    value: string,\n): string => {\n    if (!value) {\n        return '';\n    }\n\n    if (value.endsWith('/')) {\n        return removeTrailingSlash(\n            value.slice(0, value.length - 1)\n        );\n    }\n\n    return value;\n}\n// #endregion module\n"]}