{"version":3,"sources":["../src/index.ts"],"sourcesContent":["// oxlint-disable no-async-promise-executor\nimport AsyncLock from \"async-lock\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport URL from \"url\";\nimport axios from \"axios\";\n\nexport const numberToI32Hex = (number: number) => number.toString(16).slice(-8).padStart(8, \"0\");\n\nexport type BatcherOptions = {\n    periodInMs: number;\n};\n\nexport function dashDateFormatter(\n    date: Date | string | null | undefined,\n    config: {\n        getDate?: boolean;\n        getTime?: boolean;\n        getMilliseconds?: boolean;\n        rtl?: boolean;\n        dateFormat?: \"mm-yyyy\" | \"yyyy-mm\" | \"yyyy-mm-dd\";\n    } = {\n        dateFormat: \"yyyy-mm-dd\",\n        getDate: true,\n        getMilliseconds: false,\n        getTime: true,\n        rtl: false,\n    }\n): string {\n    if (!date) {\n        return \"\";\n    }\n    let { dateFormat, getDate, getMilliseconds, getTime, rtl } = config;\n    if (config.dateFormat === undefined) {\n        dateFormat = \"yyyy-mm-dd\";\n    }\n\n    if (config.getDate === undefined) {\n        getDate = true;\n    }\n    if (config.getTime === undefined) {\n        getTime = true;\n    }\n    if (config.rtl === undefined) {\n        rtl = false;\n    }\n    if (config.getMilliseconds == undefined) {\n        getMilliseconds = false;\n    }\n\n    date = new Date(date);\n    const month = padDate(String(date.getMonth() + 1));\n    const dayOfMonth = padDate(String(date.getDate()));\n    const fullYear = date.getFullYear();\n    const hour = padDate(String(date.getHours()));\n    const minutes = padDate(String(date.getMinutes()));\n    const seconds = padDate(String(date.getSeconds()));\n    const milliseconds = padDate(String(date.getMilliseconds()), 3);\n    let timeString = `${hour}:${minutes}:${seconds}`;\n    if (getMilliseconds) {\n        timeString += \".\" + milliseconds;\n    }\n\n    let dateString: string;\n    if (dateFormat === \"mm-yyyy\") {\n        dateString = `${month}-${fullYear}`;\n    } else if (dateFormat === \"yyyy-mm\") {\n        dateString = `${fullYear}-${month}`;\n    } else {\n        dateString = `${fullYear}-${month}-${dayOfMonth}`;\n    }\n\n    if (getDate && getTime) {\n        return rtl ? `${timeString} ${dateString}` : `${dateString} ${timeString}`;\n    } else if (getDate && !getTime) {\n        return dateString;\n    } else {\n        return timeString;\n    }\n}\n\nexport const loadJson = (jsonPath: fs.PathOrFileDescriptor) => {\n    let json = fs.readFileSync(jsonPath, \"utf-8\");\n    json = json\n        .split(\"\\n\")\n        .filter((line) => {\n            return !line.match(/^\\s*?\\/\\//);\n        })\n        .join(\"\\n\");\n    json = json.replaceAll(/\\/\\*(.|\\n)*?\\*\\//g, \"\");\n    json = json.replaceAll(/,((\\s|\\n)*?(?:\\}|\\]))/g, \"$1\");\n    json = JSON.parse(json);\n    return json;\n};\n\nexport type BasicTypes = boolean | number | string | null | undefined;\nexport type RecursiveReadable =\n    | BasicTypes\n    | {\n          [key: string]: RecursiveReadable;\n      }\n    | RecursiveReadable[];\nexport type JSONObject = {\n    [key: string]: RecursiveReadable;\n};\n\nexport type Merge<T, U> = T & Omit<U, keyof T>;\n\nexport type OmitFunctions<T> = Pick<\n    T,\n    {\n        [K in keyof T]: T[K] extends Function ? never : K;\n    }[keyof T]\n>;\n\nexport type NestedType<EndType> = EndType | ListNestedType<EndType>;\ntype ListNestedType<EndType> = NestedType<EndType>[];\n\nexport type ShallowObject = {\n    [key: string]: BasicTypes | undefined;\n};\n\nexport const compareShallowRecord = (a: ShallowObject, b: ShallowObject) => {\n    const aEntries = Object.entries(a);\n    const bEntries = Object.entries(b);\n    if (aEntries.length != bEntries.length) {\n        return false;\n    }\n    for (let i = 0; i < aEntries.length; i++) {\n        const aEntry = aEntries[i];\n        const bEntry = bEntries[i];\n        if (aEntry[0] != bEntry[0] || aEntry[1] != bEntry[1]) {\n            return false;\n        }\n    }\n\n    return true;\n};\n\nexport const isBun = () => {\n    try {\n        // @ts-ignore\n        return !!Bun;\n    } catch {\n        return false;\n    }\n};\n\nexport const surfaceNestedType = <EndType>(nested: NestedType<EndType>[], _Root = true, _List: EndType[] = []) => {\n    if (_Root) {\n        _List = [];\n    }\n\n    for (const item of nested) {\n        if (Array.isArray(item)) {\n            surfaceNestedType(item, false, _List);\n        } else {\n            _List.push(item);\n        }\n    }\n\n    return _List;\n};\n\nexport const resolveTs = (path: string) => {\n    if (path.endsWith(\".ts\")) {\n        path = path.replace(/\\.ts$/, \".js\");\n    }\n    return path;\n};\n\nconst lock = new AsyncLock({ maxExecutionTime: 5e3 });\n\ntype ArgumentsExtract<T> = T extends (...args: infer R) => any ? R : never;\n\nexport type UnwrapPromise<P> = P extends Promise<infer R> ? R : P;\n\nexport const lockMethod = function <T extends (...args: any[]) => any>(\n    method: T,\n    {\n        lockName,\n        lockTimeout = 1e4,\n    }: {\n        lockName: string;\n        lockTimeout?: number;\n    }\n): (...args: ArgumentsExtract<T>) => Promise<UnwrapPromise<ReturnType<T>>> {\n    const originalMethod = method;\n    return async function (...args: any[]) {\n        return new Promise(async (resolve, reject) => {\n            try {\n                await lock.acquire(\n                    lockName,\n                    async () => {\n                        try {\n                            return resolve(await originalMethod(...args));\n                        } catch (error: any) {\n                            reject(error);\n                        }\n                    },\n                    {\n                        timeout: lockTimeout,\n                    }\n                );\n            } catch (error: any) {\n                reject(error);\n            }\n        });\n    };\n};\n\nexport function resolvePath(relativePath: string, baseUrl: string) {\n    return URL.fileURLToPath(new URL.URL(relativePath, baseUrl));\n}\n\nexport const relativeToAbsolutePath = resolvePath;\n\nexport async function downloadFile({\n    method,\n    outputPath,\n    url,\n    body,\n    query,\n}: {\n    url: string;\n    method: string;\n    outputPath: string;\n    query?: any;\n    body?: any;\n}): Promise<boolean> {\n    const writer = fs.createWriteStream(outputPath);\n    const ax = axios;\n    const response = await ax({\n        method: method,\n        url: url,\n        params: query,\n        data: body,\n        responseType: \"stream\",\n    });\n\n    return new Promise((resolve, reject): any => {\n        response.data.pipe(writer);\n        let error: any = null;\n        writer.on(\"error\", (err) => {\n            error = err;\n            writer.close();\n            reject(err);\n        });\n        writer.on(\"close\", () => {\n            if (!error) {\n                resolve(true);\n            }\n        });\n    });\n}\n\nexport function clip(text: string, maxLength: number): string {\n    if (maxLength < 3) {\n        throw new Error(\"maxLength cannot be less than 3\");\n    }\n    if (!text) {\n        return \"\";\n    }\n    if (text.length > maxLength) {\n        return `${text.slice(0, maxLength - 3)}...`;\n    } else {\n        return text;\n    }\n}\n\nexport function recursiveSelect(selector: string | Array<string>, obj: any): any {\n    if (typeof selector == \"string\") {\n        selector = selector.split(\".\").filter((s) => !!s);\n    }\n\n    if (!selector || !selector.length) {\n        return obj;\n    }\n    try {\n        return recursiveSelect(selector.slice(1), obj[selector[0]]);\n    } catch {\n        return undefined;\n    }\n}\n\nfunction padId(id: string | number): string {\n    return \"#\" + String(id).padStart(10, \"0\");\n}\nexport { padId };\n\nfunction fixed(value: string | number | null | undefined, n = 2) {\n    return Number(Number(value).toFixed(n));\n}\n\nconst math = {\n    fixed,\n    ceil: fixed,\n    min: (arr: Array<number>): number => Math.min(...arr.filter((el) => !Number.isNaN(Number(el)))),\n    max: (arr: Array<number>): number => Math.max(...arr.filter((el) => !Number.isNaN(Number(el)))),\n};\nexport { math };\n\nfunction cap(str: string) {\n    return str.replaceAll(/\\b\\w+\\b/gi, (match) => {\n        const string = match;\n        return string.charAt(0).toUpperCase() + string.slice(1);\n    });\n}\nexport { cap };\n\nexport type SearchBase = {\n    search?: string;\n    skip?: number;\n    take?: number;\n};\n\nexport type RemoveNull<T> = T extends null ? never : T;\n\nexport const notEmptyValues = <T extends { [key: symbol | number | string]: any }>(\n    target?: T | null\n): T extends { [key: string | symbol | number]: infer R } ? RemoveNull<R>[] : any[] => {\n    if (!target) {\n        return [] as any;\n    }\n    const values = Object.values(target).filter((i) => i !== undefined && i !== null);\n    return values as any;\n};\n\nexport const isNumber = function (num: any): num is number {\n    if (typeof num === \"number\") {\n        return num - num === 0;\n    }\n    if (typeof num === \"string\" && num.trim() !== \"\") {\n        return Number.isFinite ? Number.isFinite(+num) : isFinite(+num);\n    }\n    return false;\n};\n\nexport const readVolatileJSON = <T extends RecursiveReadable = any>(\n    fullPath: string,\n    options?:\n        | {\n              createIfNotExists: false;\n          }\n        | {\n              createIfNotExists: true;\n              defaultValue: T;\n          }\n): T | null => {\n    try {\n        if (!fs.existsSync(fullPath)) {\n            if (options?.createIfNotExists && options?.defaultValue) {\n                fs.mkdirSync(path.dirname(fullPath), { recursive: true });\n                fs.writeFileSync(fullPath, JSON.stringify(options.defaultValue, null, 4));\n                return options.defaultValue;\n            }\n            return null;\n        }\n        const stat = fs.statSync(fullPath);\n        if (stat.isDirectory()) {\n            return null;\n        }\n        return JSON.parse(fs.readFileSync(fullPath, \"utf-8\"));\n    } catch {\n        return null;\n    }\n};\n\nconst padStart = (string: string, targetLength: number, padString: string): string => {\n    targetLength = targetLength >> 0;\n    string = String(string);\n    padString = String(padString);\n\n    if (string.length > targetLength) {\n        return String(string);\n    }\n\n    targetLength = targetLength - string.length;\n\n    if (targetLength > padString.length) {\n        padString += padString.repeat(targetLength / padString.length);\n    }\n\n    return padString.slice(0, targetLength) + String(string);\n};\n\nconst padDate = (n: string, length = 2) => padStart(n, length, \"0\");\n\nexport async function sleep(time = 1000): Promise<void> {\n    return new Promise((resolve) => {\n        setTimeout(() => {\n            resolve();\n        }, time);\n    });\n}\nexport function selectRandom<T>(arr: T[]): T {\n    return arr[Math.floor(arr.length * Math.random())];\n}\n\nexport const trimSlashes = (path: string) =>\n    path == \"/\"\n        ? path\n        : path\n              .split(\"/\")\n              .filter((x) => x)\n              .join(\"/\");\n"],"mappings":"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","names":["fs","path","AsyncLock","URL","axios","fs","path"]}