import type { IChipsItem } from '../../../types'; /* eslint-disable no-control-regex -- используется как намеренный временный плейсхолдер при конвертации slug */ /** Утилиты для преобразования строк: slug, snake_case, kebab-case, chips, capitalize. */ export const convertString = () => { /** Преобразует строку в URL-slug: пробелы → дефисы, _ → ~, исходные дефисы сохраняются. */ const toSlug = (input: string): string => { return input .toLowerCase() .replace(/_/g, '~') .replace(/-/g, '\u0000') .replace(/\s+/g, '-') .replace(/\u0000/g, '_'); }; /** Восстанавливает исходную строку из slug. */ const fromSlug = (slug: string): string => { return slug .replace(/_/g, '\u0000') // временно убираем "_" (разделители) .replace(/-/g, ' ') // "-" → пробел .replace(/\u0000/g, '-') // возвращаем старые "-" .replace(/~/g, '_'); // в конце восстанавливаем "_" }; /** Преобразует строку в snake_case. */ const toSnakeCase = (slug: string): string => { return slug .replace(/([a-z])([A-Z])/g, '$1_$2') .replace(/\s+/g, '_') .replace(/-/g, '_') .toLowerCase(); }; /** Преобразует строку в kebab-case. */ const toKebabCase = (str: string): string => { return str .replace(/([a-z])([A-Z])/g, '$1-$2') .replace(/\s+/g, '-') .replace(/_/g, '-') .replace(/-+/g, '-') .toLowerCase(); }; /** Создаёт объект IChipsItem из строки и префикса. */ const toChips = (string: string, prefix: string): IChipsItem => { return { title: string, value: string, prefix: prefix, }; }; /** Делает первую букву каждого слова заглавной. */ const toCapitalize = (string: string): string => { return string.split(' ').map(i => i.charAt(0).toUpperCase() + i.slice(1)).join(' '); }; return { toChips, toSlug, toSnakeCase, fromSlug, toKebabCase, toCapitalize, }; };