{"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":["functions_exports","__export","addToArray","capitalize","chunkArray","compareTwoStrings","divideByZero","extractUrls","formatNumber","getAlphabet","getPercentage","getRandomSample","getRandomValue","groupBy","pluralize","shuffleArray","stripHTML","trimToLength","wrapInTryCatch","__toCommonJS","import_api","import_regexes","import_normalize","text","c","v","html","body","length","indexOfSpace","indexToTrim","urls","url","index","num","dp","count","singular","plural","array","func","acc","cur","key","a","item","getKey","getComparer","asc","existingIndex","el","den","population","n","indexes","indexesObject","random","idx","arr","size","chunks","i","fn","defaultValue","first","second","firstBigrams","bigram","intersectionSize"]}