@backs/utils
Version:
A set of utils to help you with random tasks
1 lines • 12 kB
Source Map (JSON)
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { v4 } from \"uuid\";\r\nimport pluralize from \"pluralize\";\r\nimport crypto from \"crypto\";\r\nimport bytes from \"bytes\";\r\nimport moment from \"moment\";\r\nimport isEven from \"is-even\";\r\nimport isOdd from \"is-odd\";\r\nimport isNumber from \"is-number\";\r\n\r\nexport const isTypescript = Symbol.for(\"ts-node.register.instance\") in process;\r\n\r\nexport const sha256 = (data: any) => {\r\n return crypto.createHash(\"sha256\").update(stringify(data)).digest().toString(\"hex\");\r\n}\r\n\r\nexport const md5 = (data: any) => {\r\n return crypto.createHash(\"md5\").update(stringify(data)).digest().toString(\"hex\");\r\n}\r\n\r\nexport const hex = (data: any) => {\r\n return Buffer.from(stringify(data)).toString(\"hex\")\r\n}\r\n\r\nexport const base64 = (data: any) => {\r\n return Buffer.from(stringify(data)).toString(\"base64\")\r\n}\r\n\r\nexport const binary = (data: any) => {\r\n return Buffer.from(stringify(data)).toString(\"binary\")\r\n}\r\n\r\nexport const ascii = (data: any) => {\r\n return Buffer.from(stringify(data)).toString(\"ascii\")\r\n}\r\n\r\nexport const latin1 = (data: any) => {\r\n return Buffer.from(stringify(data)).toString(\"latin1\")\r\n}\r\n\r\nexport const decode = (data: Buffer | string, encoding: BufferEncoding) => {\r\n return Buffer.from(data.toString(), encoding).toString(\"utf-8\")\r\n}\r\n\r\nexport const plural = pluralize\r\n\r\nexport const capitalize = (str: string, eachword = false) => {\r\n if (!eachword) {\r\n const capitalletter = str.charAt(0).toUpperCase();\r\n return capitalletter + str.slice(1);\r\n } else {\r\n const words = str.split(/ +/g);\r\n const finalWords = [] as string[];\r\n\r\n for (const word of words) {\r\n const capitalletter = word.charAt(0).toUpperCase();\r\n finalWords.push(capitalletter + word.slice(1));\r\n }\r\n\r\n return finalWords.join(\" \");\r\n }\r\n}\r\n\r\nexport const crop = (str: string, charNumber: number) => {\r\n return `${str.substring(0, charNumber - 3)}${str.length > charNumber ? \"...\" : \"\"}`;\r\n}\r\n\r\nexport const remove = (str: string, ...toRemove: string[]) => {\r\n let final = str;\r\n for (const text of toRemove) final = str.replace(text, \"\");\r\n return final;\r\n}\r\n\r\nexport const escape = (str: string) => {\r\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n};\r\n\r\n\r\nexport const first = <T extends unknown>(array: T[], n = 1): T[] => {\r\n if (n === 1) return [array[0]];\r\n return array.filter((_: any, index: number) => index < n);\r\n}\r\n\r\nexport const last = <T extends unknown>(array: T[], n = 1): T[] => {\r\n if (n === 1) return [array.at(-1)!];\r\n return array.filter((_: any, index: number) => array.length - index <= n);\r\n}\r\n\r\nexport const random = <T extends unknown>(array: T[]) => {\r\n return array[Math.floor(Math.random() * array.length)];\r\n}\r\n\r\nexport const get = <T extends any>(array: any[], key: string): T[] => {\r\n return array.map((element: any) => element[key]);\r\n}\r\n\r\nexport const groupBy = <T extends unknown>(array: T[], key: string): Record<string, T[]> => {\r\n return array.reduce((group: any, element: any) => {\r\n const keyValue = element[key];\r\n return { ...group, [keyValue]: [...(group[keyValue] ?? []), element] };\r\n }, {});\r\n}\r\n\r\nexport const group = <T extends unknown>(array: T[], n: number) => {\r\n const g: T[][] = [];\r\n\r\n for (let i = 0, j = 0; i < array.length; i++) {\r\n if (i >= n && i % n === 0) j++;\r\n g[j] = g[j] || [];\r\n g[j].push(array[i]);\r\n }\r\n\r\n return g;\r\n}\r\n\r\nexport const stringify = (arg: any) => {\r\n if (arg instanceof Error) {\r\n let msg = `${arg.name}: ${arg.message}`\r\n if (arg.stack) msg += `\\n${arg.stack.replace(`${arg.toString()}\\n`, \"\")}`\r\n if (arg.cause) msg += `\\nCaused by: ${stringify(arg.cause)}`\r\n return msg;\r\n }\r\n\r\n if (typeof arg === \"object\") {\r\n return JSON.stringify(arg, null, 4);\r\n }\r\n\r\n if (Array.isArray(arg)) {\r\n return arg.map(a => stringify(a)).join(\", \");\r\n }\r\n\r\n return arg.toString();\r\n}\r\n\r\nexport const colors = {\r\n amethyst: 0x9966CC,\r\n aqua: 0x1abc9c,\r\n blue: 0x3498db,\r\n blurple: 0x5865f2,\r\n darkAqua: 0x11806a,\r\n darkBlue: 0x206694,\r\n darkButNotBlack: 0x2c2f33,\r\n darkGold: 0xc27c0e,\r\n darkGreen: 0x1f8b4c,\r\n darkGrey: 0x979c9f,\r\n darkNavy: 0x2c3e50,\r\n darkOrange: 0xa84300,\r\n darkPurple: 0x71368a,\r\n darkRed: 0x992d22,\r\n darkVividPink: 0xad1457,\r\n darkerGrey: 0x7f8c8d,\r\n default: 0x000000,\r\n fuchsia: 0xeb459e,\r\n gold: 0xf1c40f,\r\n green: 0x57f287,\r\n grey: 0x95a5a6,\r\n greyple: 0x99aab5,\r\n lightGrey: 0xbcc0c0,\r\n luminousVividPink: 0xe91e63,\r\n navy: 0x34495e,\r\n notQuiteBlack: 0x23272a,\r\n orange: 0xe67e22,\r\n purple: 0x9b59b6,\r\n red: 0xed4245,\r\n white: 0xffffff,\r\n yellow: 0xfee75c,\r\n} as const;\r\n\r\nexport const uuid = v4;\r\n\r\nexport const randomId = (length: number, mode: \"letters\" | \"lettersLowerCase\" | \"lettersUppercase\" | \"numbers\" | \"both\" | \"bothUpperCase\" | \"bothLowerCase\" | string = \"both\") => {\r\n const letters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\", numbers = \"0123456789\";\r\n let charset = \"\", out = \"\"\r\n\r\n switch (mode) {\r\n case \"letters\": charset = letters + letters.toLowerCase(); break;\r\n case \"lettersLowerCase\": charset = letters.toLowerCase(); break;\r\n case \"lettersUppercase\": charset = letters; break;\r\n case \"numbers\": charset = numbers; break;\r\n case \"both\": charset = letters + letters.toLowerCase() + numbers; break;\r\n case \"bothUpperCase\": charset = letters + numbers; break;\r\n case \"bothLowerCase\": charset = letters.toLowerCase() + numbers; break;\r\n default: charset = mode; break;\r\n }\r\n\r\n for (let i = 0; i < length; i++) out += charset.charAt(Math.floor(Math.random() * charset.length));\r\n\r\n return out;\r\n}\r\n\r\nexport const highlight = (str: string, color: ((text: string | number) => string)) => {\r\n for (const match of str.match(/(\\[[^[{}\\]]*\\]|\\([^()]*\\)|^[A-Z\\d\\s]+:|(?:https?:\\/\\/)[a-z0-9_\\-\\.]*[a-z0-9_\\-]{1,}\\.[a-z]{2,}(?:\\?(?:\\w+=\\w+&?)*)?|(?:[a-z-.+]+?:\\/\\/)(?:[^/:@?&\\\\](?::[^\\/:@?&\\\\])?@)?[^/:@?&\\\\]+\\.[a-z]{2,})(?:\\?(?:\\w+=\\w+&?)*)?/img) ?? [])\r\n str = str.replace(match, color(match));\r\n\r\n return str;\r\n}\r\n\r\nexport {\r\n bytes,\r\n moment,\r\n isEven,\r\n isOdd,\r\n isNumber\r\n};\r\n\r\nexport default {\r\n isTypescript,\r\n sha256,\r\n md5,\r\n hex,\r\n base64,\r\n binary,\r\n ascii,\r\n latin1,\r\n decode,\r\n plural,\r\n capitalize,\r\n crop,\r\n remove,\r\n escape,\r\n first,\r\n last,\r\n random,\r\n get,\r\n groupBy,\r\n group,\r\n stringify,\r\n colors,\r\n uuid,\r\n randomId,\r\n highlight\r\n}"],"mappings":"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","names":["v4","pluralize","crypto","bytes","moment","isEven","isOdd","isNumber","isTypescript","sha256","data","stringify","md5","hex","base64","binary","ascii","latin1","decode","encoding","plural","capitalize","str","eachword","words","finalWords","word","capitalletter","crop","charNumber","remove","toRemove","final","text","escape","first","array","n","_","index","last","random","get","key","element","groupBy","group","keyValue","g","i","j","arg","msg","a","colors","uuid","randomId","length","mode","letters","numbers","charset","out","highlight","color","match","index_default","isTypescript","sha256","md5","hex","base64","binary","ascii","latin1","decode","plural","capitalize","crop","remove","escape","first","last","random","get","groupBy","group","stringify","colors","uuid","randomId","highlight"]}