@fimastgdx/mtutils
v1.0.1
Published
Small TypeScript utilities: simple console input, random helpers, double rounding and colored console output.
Maintainers
Readme
mtutils
Небольшой набор утилит на TypeScript: простой ввод с консоли, работа со случайными значениями, округление дробных чисел и цветной вывод в консоль.
Каждый модуль можно импортировать отдельно (@fimastgdx/mtutils/input,
@fimastgdx/mtutils/random, @fimastgdx/mtutils/double,
@fimastgdx/mtutils/color) или всё сразу из корня (@fimastgdx/mtutils).
Установка
npm install @fimastgdx/mtutilsСборка из исходников
npm install
npm run buildmtutils/input
Простейший синхронный ввод с консоли — await не нужен. Корректно читает
UTF-8 (в том числе кириллицу).
import { Input } from "@fimastgdx/mtutils/input";
const a: number = Input.ReadNumber("Введите число: ");
const b: string = Input.ReadString("Введите строку: ");
const c: string = Input.ReadChar("Введите символ: ");Input.ReadNumber(prompt?)— читает число. Принимает.и,как разделитель дробной части и переспрашивает, пока ввод не станет валидным.Input.ReadString(prompt?)— читает строку целиком (без перевода строки).Input.ReadChar(prompt?, options?)— читает один символ и сразу возвращается, без нажатия Enter.
Ввод одного символа без Enter
ReadChar по умолчанию переключает терминал в raw-режим, поэтому возвращает
управление сразу после первой нажатой клавиши. Символ печатается в консоль
вручную (в raw-режиме нет автоматического эха), затем режим терминала
восстанавливается.
const ch: string = Input.ReadChar("Введите символ: "); // вернётся сразуОсобенности:
- Работает только в интерактивном терминале. Если ввод передан через pipe
(
echo x | node app.js), автоматически используется чтение строки. Ctrl+Cв raw-режиме не генерирует сигнал, поэтому обрабатывается вручную: режим восстанавливается и процесс завершается с кодом 130.- Если Enter нажат без ввода символа, вернётся пустая строка.
- Нужно старое поведение (ждать Enter и брать первый символ)? Передай опцию:
const ch: string = Input.ReadChar("Символ: ", { instant: false });Кодировка консоли (важно для Windows)
Консоль Windows отдаёт введённые байты в активной кодовой странице
(для русской локали это обычно cp866), а не в UTF-8. Если декодировать их как
UTF-8, вместо привет получится мусор вида �ਢ��.
Библиотека определяет кодовую страницу автоматически (через chcp) и
декодирует ввод правильно — ничего настраивать не нужно. При необходимости
определение можно переопределить:
Input.setConsoleEncoding("windows-1251"); // принудительно
console.log(Input.getConsoleEncoding()); // текущая кодировка, напр. "ibm866"Либо через переменную окружения:
set MTUTILS_ENCODING=utf-8Поддерживается любая метка, известная TextDecoder: utf-8, ibm866,
windows-1251, koi8-r и другие. Кодовые страницы DOS без такой метки
(например 437 и 850) откатываются на latin1 — ASCII при этом читается
корректно.
mtutils/random и mtutils/double
import { Random } from "@fimastgdx/mtutils/random";
import { setDoubleSize } from "@fimastgdx/mtutils/double";
const randomint: number = Random.Int(1, 10); // целое [1, 10], включительно
const randomdouble: number = Random.Double(1, 10); // дробное в диапазоне [1, 10)
// округление до нужного числа знаков после точки (с корректным округлением)
const randomDoubleFixed: number = setDoubleSize(Random.Double(1, 10), 4);
// либо сразу с точностью третьим аргументом:
const d: number = Random.Double(1, 10, 4);
// генерация случайной строки заданной длины;
// в массиве — либо диапазон "a-z"/"A-Z"/"0-9", либо отдельные символы
const randomString: string = Random.String(10, ["a-z", "0-9", "A-Z", "$"]);Random.Int(min, max)— целое число, оба конца включительно.Random.Double(min, max, fixed?)— дробное число;fixedзадаёт число знаков после точки.Random.String(length, sets)— случайная строка. Каждый элементsets— это либо диапазон вида"a-z", либо набор литеральных символов ("$","!?#").setDoubleSize(value, size)— округляетvalueдоsizeзнаков после точки. Использует сдвиг через экспоненциальную запись, поэтомуsetDoubleSize(1.005, 2)даёт1.01, а не1.00.
mtutils/color
Цветной вывод через ANSI-коды. Объект c содержит готовые управляющие
последовательности, вложенные группы c.bright.* и c.bg.*.
import { c, to256 } from "@fimastgdx/mtutils/color";
console.log(`${c.bright.red}${c.bold}Светло-красный жирный текст${c.reset}`);
console.log(`${c.bg.blue}${c.white}Белый на синем${c.reset}`);
// поддержка 256-цветов через конвертацию HEX в ближайший цвет палитры
console.log(to256("оранжевый текст", "#ff8800"));Доступно:
- Стили:
c.reset,c.bold,c.dim,c.italic,c.underline,c.inverse,c.hidden,c.strikethrough. - Цвета текста:
c.black,c.red,c.green,c.yellow,c.blue,c.magenta,c.cyan,c.white,c.gray. - Яркие цвета:
c.bright.red,c.bright.green, … - Фон:
c.bg.red, …, и яркий фонc.bg.bright.red, … to256(text, hex)— оборачивает текст в ближайший из 256 цветов терминала.hexToAnsi256(hex)— возвращает индекс (0–255) ближайшего цвета, если нужен только код.
Не забывайте закрывать окраску через
${c.reset}.
Импорт всего сразу
import { Input, Random, Double, setDoubleSize, c, to256 } from "@fimastgdx/mtutils";Лицензия
MIT
