export const splitRangeWithinString = (string: string, start: number, end: number) => { const isStartOutOfBounds = start > string.length || start < 0 const isEndOutOfBounds = end > string.length || end < 0 const isInvalidRange = start > end if (isStartOutOfBounds || isEndOutOfBounds || isInvalidRange) { return [string] } else { return [string.slice(0, start), string.slice(start, end), string.slice(end)].filter((slice) => slice.length > 0) } } export const getIndexOfQueryInString = (string: string, query: string) => { const lowercasedTitle = string.toLowerCase() const lowercasedQuery = query.toLowerCase() return lowercasedTitle.indexOf(lowercasedQuery) } export const splitQueryInString = (string: string, query: string) => { const indexOfQueryInTitle = getIndexOfQueryInString(string, query) if (indexOfQueryInTitle < 0) { return [string] } return splitRangeWithinString(string, indexOfQueryInTitle, indexOfQueryInTitle + query.length) }