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