{"version":3,"sources":["../../../../src/utils/functions/index.ts"],"sourcesContent":["import { v } from '../../api'\nimport { urlRegex } from '../regexes'\nimport { normalizeUrl } from './urls/normalize'\n\nexport const capitalize = (text: string) => {\n\tif (text === null || text === undefined) return text\n\ttext = text.toString()\n\tconst c = (v: string) => (v[0]?.toUpperCase() ?? '') + v.slice(1)\n\treturn text.trim().split(' ').map(c).join(' ')\n}\n\nexport const stripHTML = (html: string) => {\n\tif (html === null || html === undefined) return html\n\treturn (\n\t\thtml\n\t\t\t?.toString()\n\t\t\t?.trim()\n\t\t\t.replace(/<[^>]+>/g, '') ?? ''\n\t)\n}\n\nexport const trimToLength = (body: string, length: number) => {\n\tif (body === null || body === undefined) return body\n\n\tbody = body.toString()\n\tif (body.length <= length) return body\n\n\tconst indexOfSpace = body.indexOf(' ', length)\n\tconst indexToTrim = indexOfSpace === -1 ? length : indexOfSpace\n\treturn `${body.slice(0, indexToTrim)}...`\n}\n\nexport const extractUrls = (text: string) => {\n\tconst urls = text.match(urlRegex) || ([] as string[])\n\treturn urls\n\t\t.filter((url, index) => urls.indexOf(url) === index)\n\t\t.map((url) => {\n\t\t\turl = url.trim()\n\t\t\treturn {\n\t\t\t\toriginal: url,\n\t\t\t\tnormalized: normalizeUrl(url.replace(/\\.+$/, '')),\n\t\t\t}\n\t\t})\n}\n\nexport const formatNumber = (num: number, dp?: number) =>\n\tIntl.NumberFormat('en', { notation: 'compact', ...(dp ? { maximumFractionDigits: dp } : {}) }).format(\n\t\tv.validate(v.number(), num).valid ? num : 0,\n\t)\n\nexport const pluralize = (count: number, singular: string, plural: string) => (Math.round(count) === 1 ? singular : plural)\n\nexport const getRandomValue = () => Date.now().toString(36) + Math.random().toString(36).slice(2)\n\nexport const groupBy = <Type, Unique extends string | number>(array: Array<Type>, func: (item: Type) => Unique) =>\n\tarray.reduce(\n\t\t(acc, cur) => {\n\t\t\tconst key = func(cur)\n\t\t\tconst index = acc.findIndex((a) => a.key === key)\n\t\t\tif (index === -1) acc.push({ key, values: [cur] })\n\t\t\telse acc[index].values.push(cur)\n\t\t\treturn acc\n\t\t},\n\t\t[] as { key: Unique; values: Type[] }[],\n\t) as { key: Unique; values: Type[] }[]\n\nexport const getAlphabet = (num: number) => 'abcdefghijklmnopqrstuv'.split('')[num] ?? 'a'\n\nexport const addToArray = <T>(array: T[], item: T, getKey: (a: T) => any, getComparer: (a: T) => number | string, asc = false) => {\n\tconst existingIndex = array.findIndex((el) => getKey(el) === getKey(item))\n\tconst index = array.findIndex((el) => (asc ? getComparer(el) >= getComparer(item) : getComparer(el) <= getComparer(item)))\n\tif (existingIndex !== -1 && existingIndex === index) {\n\t\tarray.splice(existingIndex, 1, item)\n\t\treturn array\n\t}\n\tif (existingIndex !== -1 && existingIndex !== index) array.splice(existingIndex, 1)\n\tif (index !== -1) array.splice(index, 0, item)\n\telse if (array.length === 0) array.push(item)\n\telse {\n\t\tconst existingIsGreater = getComparer(array[0]) >= getComparer(item)\n\t\tif (existingIsGreater) asc ? array.unshift(item) : array.push(item)\n\t\telse asc ? array.push(item) : array.unshift(item)\n\t}\n\treturn array\n}\n\nexport const divideByZero = (num: number, den: number) => (den === 0 ? 0 : num / den)\n\nexport const getPercentage = (num: number, den: number) => 100 * (divideByZero(num, den) > 1 ? 1 : divideByZero(num, den))\n\nexport const getRandomSample = <Type>(population: Array<Type>, n: number) => {\n\tconst indexes = [] as number[]\n\tconst indexesObject = {} as Record<number, boolean>\n\n\twhile (indexes.length < n && indexes.length < population.length) {\n\t\tconst random = Math.floor(Math.random() * population.length)\n\t\tif (random in indexesObject) continue\n\t\tindexesObject[random] = true\n\t\tindexes.push(random)\n\t}\n\n\treturn indexes.map((idx) => population[idx])\n}\n\nexport const shuffleArray = <Type>(array: Array<Type>) => [...array].sort(() => Math.random() - 0.5)\n\nexport const chunkArray = <T>(arr: T[], size: number) => {\n\tconst chunks: T[][] = []\n\tfor (let i = 0; i < arr.length; i += size) chunks.push(arr.slice(i, i + size))\n\treturn chunks\n}\n\nexport const wrapInTryCatch = <T>(fn: () => T, defaultValue?: T) => {\n\ttry {\n\t\treturn fn()\n\t} catch {\n\t\treturn defaultValue\n\t}\n}\n\nexport const compareTwoStrings = (first: string, second: string) => {\n\tfirst = first.replace(/\\s+/g, '')\n\tsecond = second.replace(/\\s+/g, '')\n\n\tif (first === second) return 1\n\tif (first.length < 2 || second.length < 2) return 0\n\n\tconst firstBigrams = new Map()\n\tfor (let i = 0; i < first.length - 1; i++) {\n\t\tconst bigram = first.substring(i, i + 2)\n\t\tconst count = firstBigrams.has(bigram) ? firstBigrams.get(bigram) + 1 : 1\n\t\tfirstBigrams.set(bigram, count)\n\t}\n\n\tlet intersectionSize = 0\n\tfor (let i = 0; i < second.length - 1; i++) {\n\t\tconst bigram = second.substring(i, i + 2)\n\t\tconst count = firstBigrams.has(bigram) ? firstBigrams.get(bigram) : 0\n\n\t\tif (count > 0) {\n\t\t\tfirstBigrams.set(bigram, count - 1)\n\t\t\tintersectionSize++\n\t\t}\n\t}\n\n\treturn (2.0 * intersectionSize) / (first.length + second.length - 2)\n}\n"],"mappings":"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","names":["v"]}