@prleasing/utility
v5.2.1
Published
Вспомогательные функции: форматтеры, числа, объекты, случайность
Readme
Utility
Вспомогательные функции prosto: форматтеры под русскую локаль, работа с числами, объектами и случайностью.
Ни Vue, ни DOM — обычные функции. Единственное исключение — copy, которому нужен navigator.clipboard.
Всё доступно из корня; каждый модуль есть и подпутём (@prleasing/utility/formatter, /number, /id, …). Пакет помечен sideEffects: false. dayjs вшит в сборку, снаружи остаётся только libphonenumber-js.
Установка
npm i @prleasing/utility
yarn add @prleasing/utility
pnpm install @prleasing/utilityFormatter
Обёртки над Intl.NumberFormat с локалью ru. Вторым аргументом принимают либо число (это maximumFractionDigits), либо объект опций Intl.
import { Formatter } from '@prleasing/utility';
Formatter.number(1234.5); // '1 235' — по умолчанию 0 знаков, Intl округляет
Formatter.number(1234.5, 2); // '1 234,5'
Formatter.currency(1234); // '1 234 ₽'
Formatter.percent(12.5, 1); // '12,5 %'
Formatter.bytes(1536); // '1.5 КБ'
Formatter.date('2026-07-29'); // '29.07.2026'
Formatter.date(value, 'DD MMMM YYYY'); // формат dayjs, локаль по умолчанию — en
Formatter.term(14); // '1 год 2 месяца'
Formatter.term(14, true); // '1 год 2 мес.'
Formatter.phone('+79991234567'); // объект libphonenumber-jsРазделитель разрядов у Intl — неразрывный пробел, а не обычный. При сравнении строк в тестах это важно.
Числа
import { clamp, decOfNum } from '@prleasing/utility';
clamp(0, 15, 10); // 10
decOfNum(5, ['год', 'года', 'лет']); // 'лет'clamp бросает RangeError, если min > max.
Объекты
import { omit, pick } from '@prleasing/utility';
omit({ a: 1, b: 2 }, 'b'); // { a: 1 }
pick({ a: 1, b: 2 }, 'a'); // { a: 1 }pick без ключей возвращает исходный объект по ссылке, а не копию. omit копирует всегда.
Случайность
import { Random } from '@prleasing/utility';
Random.int(1, 6);
Random.array(['а', 'б', 'в']);
Random.shuffle([1, 2, 3]);Random.int бросает RangeError, если min > max. Из этого следует, что Random.array([]) тоже бросит исключение, а не вернёт undefined. Random.shuffle перемешивает массив на месте — сортировкой со случайным компаратором, так что распределение не равномерное; для криптографии не годится.
Прочее
import { copy, delay, generateId } from '@prleasing/utility';
generateId('modal'); // 'modal-1f4e9a2b'
await delay(300);
copy('текст в буфер обмена');