Библиотека полезных утилит для фронтенд-разработки.
yarn add @front-cmdt/utils
# или
npm install @front-cmdt/utilsОбработка ошибок из ответов API. Возвращает текст ошибки из переданной мапы сообщений или из самой ошибки.
Сигнатура:
errorCatch(error: any, options?: ErrorCatchOptions): string | string[]ErrorCatchOptions:
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
errorTextMap |
Record<string, string> |
— | Мапа «ключ из ответа → читаемый текст» |
mode |
'first' | 'all' |
'first' |
Вернуть первое сообщение (string) или все (string[]) |
Поддерживает ошибки с вложенной структурой error.response.data.message (в т.ч. когда message — массив строк).
Примеры:
import { errorCatch } from '@front-cmdt/utils/error-catch'
const ERROR_MAP = {
'learning must be an object': 'Обучение должно быть объектом',
}
// Первое сообщение с маппингом
try {
// ...
} catch (error: any) {
console.log(errorCatch(error, { errorTextMap: ERROR_MAP }))
// 'Обучение должно быть объектом'
}
// Все сообщения
try {
// ...
} catch (error: any) {
console.log(errorCatch(error, { mode: 'all' }))
// ['learning must be an object', 'name must be a string']
}
// Без опций — вернёт первое сообщение из ответа или error.message
try {
// ...
} catch (error: any) {
console.log(errorCatch(error))
// 'Unauthorized access'
}Набор функций для разбора, валидации и форматирования ФИО. Входные данные: объект { firstName, lastName, middleName }, строка «Фамилия Имя Отчество» или массив строк.
Форматирование числа с пробелами в качестве разделителя тысяч. Поддерживает целые числа и числа с дробной частью.
Примеры:
numberSeparator(1000)→'1 000'numberSeparator(1000000)→'1 000 000'numberSeparator(-1000000)→'-1 000 000'
Форматирование российского телефонного номера по одному из заданных шаблонов.
Параметры: phone — строка или число (цифры номера), variant — желаемый формат.
Варианты формата:
| variant | Пример результата |
|---|---|
'+79999999999' |
+79155555555 |
'79999999999' |
79155555555 |
'+7(999)999-99-99' |
+7(915)555-55-55 |
'89999999999' |
89155555555 |
'+7 999 999 99-99' |
+7 915 555 55-55 |
Номер нормализуется: остаются только цифры, код страны 7/8 при необходимости убирается. Ожидается не менее 10 цифр; иначе возвращается undefined.
Преобразование строки с длительностью в миллисекунды. Принимает строку вида «число + единица времени» и возвращает число миллисекунд.
Параметры: str — строка (например, '2 days', '1h', '30s').
Поддерживаемые единицы: ms (миллисекунды), s (секунды), m (минуты), h (часы), d (дни), w (недели), mo (месяцы), y (годы). Допускаются полные названия и сокращения (seconds, secs, day, days и т.д.).
Примеры:
ms('2 days')→172800000ms('1h')→3600000ms('30s')→30000ms('1.5 min')→90000
При невалидной строке или неизвестной единице возвращается NaN. Пустая строка, строка длиннее 100 символов или нестрока приводят к выбросу ошибки.
Функция для красивого логирования в консоль с цветовым оформлением и эмодзи. Предназначена для логирования HTTP-запросов, ответов и ошибок.
Параметры:
name— название лога (строка)data— данные для логирования (любой тип)type— тип лога:'request'(запрос),'response'(ответ),'catch'(ошибка)payload?— дополнительные данные (опционально)isServer?— флаг серверного логирования, убирает декоративные элементы (опционально)isDisabled?— отключает логирование полностью, еслиtrue(опционально)
Особенности:
- Использует стилизованный вывод в консоль с цветами и эмодзи
- Если
dataне передан (undefined/null), логирование не выполняется - Для клиентского логирования (
isServerне установлен) добавляет декоративные разделители - Каждый тип лога имеет свой цвет: request (cyan), response (green), catch (red)
Примеры:
// Логирование запроса
log({
name: 'GET /api/users',
data: { userId: 123 },
type: 'request',
payload: { headers: { Authorization: 'Bearer token' } }
})
// Логирование ответа
log({
name: 'GET /api/users',
data: { users: [...] },
type: 'response'
})
// Логирование ошибки
log({
name: 'GET /api/users',
data: error,
type: 'catch'
})
// Серверное логирование (без декоративных элементов)
log({
name: 'Server log',
data: { message: 'Server started' },
type: 'response',
isServer: true
})