npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@fimastgdx/mtutils

v1.0.1

Published

Small TypeScript utilities: simple console input, random helpers, double rounding and colored console output.

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 build

mtutils/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