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 🙏

© 2024 – Pkg Stats / Ryan Hefner

@terron/utils

v1.1.0

Published

Powerful utils for JavaScript by Terron

Downloads

1

Readme

Установка

После установки пакета (npm i @terron/utils) достаточно включить его в ваш главный файл, и он начнёт свою работу:

require('@terron/utils')
//Ваш код далее

Описание

Данный пакет добавляет уже существующим классам JavaScript (Number, String, Array, Boolean, Object, Date) дополнительные методы, отсутсвующие изначально (либо не раскрыты), а также упрощающие некоторый другой функционал.

Что было добавлено в обновлении?

  1. Необязательные аргументы указаны в квадратных скобках.
  2. Методы для process.
  3. Number: Number.prototype.isInteger().
  4. Date: Date.prototype.format(), Date.prototype.getQuater().
  5. Object: Object.prototype.isEmpty().
  6. Array: Array.prototype.isEmpty(), Array.prototype.middle(), Array.prototype.middleIndex().

Number

Number.random(min: integer, max: integer)

Возвращает случайное число между двумя указанными (включая их самих).

Number.random(0, 1) // 1
Number.random(20, 100) // 68

Number.randomFloat(min: integer, max: integer, [length]: integer)

Возвращает случайный флот (число с другим числом после точки) между двумя указанными (включая только минимальное), а также можно указать, сколько цифр после точки функция должна вернуть (изначально 3).

Number.randomFloat(1, 2) // 1.482
Number.randomFloat(1, 5, 2) // 4.85
Number.randomFloat(1, 50, 6) // 26.759242

Number.diff(num1: integer, num2: integer)

Сравнивает два указанных числа и возвращает их различие в числовом виде.

Number.diff(1, 2) // 1
Number.diff(2, 1) // 1
Number.diff(5, 9) // 4

Number.prototype.clamp(num1: integer, num2: integer)

Проверяет число между двумя аргументами. Если оно больше максимального, то функция вернёт второй аргумент, а если меньше минимального, то соответственно вернёт минимальное. В противном случае вернётся изначальное число.

let num = 25
num.clamp(1, 99) // 25, т.к число находится в радиусе двух указанных чисел
num.clamp(5, 20) // 20, т.к число больше второго аргумента
num.clamp(60, 80) // 60, т.к число меньше первого аргумента

Number.prototype.isOdd() / Number.prototype.isEven()

Первый метод возвращает булевое значение (true или false) в зависимости от того, является ли число нечётным. isEven() является обратной функцией.

let num = 10
let num2 = 17
num.isOdd() // false, т.к число чётное, а нужно, чтоб было нечётным
num.isEven() // true, т.к число чётное и соотвествует проверке в функции

num2.isOdd() // true, т.к число нечётное, что и нужно по условию функции

Number.prototype.roundTo(num: integer)

Округляет число (флот) до определённой цифры. Обратите внимание, что 0 в конце автоматически округляется и пропадает.

let num = 1.0245
num.roundTo(2) // 1.02
num.roundTo(1) // По идеи должно вернуть 1.0, но как я указал выше - ноль пропадает и вернётся просто 1
num.roundTo(9) // 1.0245 из-за условия выше, которое невозможно убрать из-за особенностей языка

Number.prototype.isPalindrome()

Проверяет, является ли число палиндромом (значение, которое в обратном порядке является таким же, что и изначальное). Не работает на слишком большие числа!

(123321).isPalindrome() // true, в обратную сторону читается также
(173).isPalindrome() // false, т.к не читается в обратную сторону также
(11).isPalindrome() // true, в обратную сторону читается также
(0).isPalindrome() // true, в обратную сторону читается также

Number.prototype.isHarshad()

Функция проверяет, делится ли число на сумму своих цифр без остатка, и возвращает соответствующий результат.

(18).isHarshad() // true, потому что 18 делится на 9 (1 + 8) без остатка
(19).isHarshad() // false, потому что 19 не делится на 10 (1 + 9) без остатка

Number.prototype.isBetween(num1: number, num2: number)

Функция проверяет, находится ли число в указаном разбросе двух чисел-аргументов.

let num = 25
num.isBetween(1, 30) // true, потому что 25 >= 1 и <= 30
num.isBetween(26, 30) // false, потому что 25 < 26

Number.prototype.isFloat()

Проверяет, является ли число флотом (число с цифрами после точки).

(13840).isFloat() // false, нет чисел после точки
(5.2).isFloat() // true, потому что есть 2 после точки

Number.prototype.isInteger()

Проверяет, является ли число интегером (число без цифр после точки).

(13840).isInteger() // true, нет чисел после точки
(5.2).isInteger() // false, потому что есть 2 после точки

Number.prototype.toOrdinal()

Возвращает порядковый номер числа (на английском языке).

(123).toOrdinal() // 123rd
(1).toOrdinal() // 1st
(56).toOrdinal() // 56th
(22).toOrdinal() // 22nd

Number.prototype.toRoman()

Возвращает число в римской системе счисления.

(5).toRoman() // V
(18).toRoman() // XVIII

Number.prototype.isPrime()

Проверяет, является ли число простым.

(3).isPrime() // true
(6).isPrime() // false
(17).isPrime() // true

Boolean

Boolean.random()

Возвращает случайное логическое значение.

Boolean.random() // true
Boolean.random() // true
Boolean.random() // false

Boolean.prototype.toNumber()

Возвращает логическое значение ввиде числа.

(true).toNumber() // 1
(false).toNumber() // 0

Boolean.prototype.or / Boolean.prototype.and(condition: boolean)

Логические операции, проверяющие условия двух булевых значений благодаря функциям (альтернатива || и &&).

let bool = 1 > 2
let bool2 = Infinity > 5

bool.or(bool2) // true, т.к bool2 является истиной
bool.and(bool2) // false, т.к bool является ложью

Date

Date.isLeapYear(year: integer)

Проверяет, является ли год високосным.

Date.isLeapYear(2024) // true
Date.isLeapYear(2022) // false

Date.prototype.isToday()

Проверяет, является ли дата сегодняшней.

let date = new Date();
date.isToday() // true

Date.prototype.addYears / Date.prototype.addMonths / Date.prototype.addWeeks / Date.prototype.addDays / Date.prototype.addHours / Date.prototype.addMinutes / Date.prototype.addSeconds(num: integer)

Добавляет к дате значение.

let date = new Date() // 10.02.2024 21:52:00
date.addYears(1) // 10.02.2025 21:52:00
date.addMonths(2) // 10.04.2024 21:52:00
date.addWeeks(1) // 17.04.2024 21:52:00
date.addDays(9) // 19.02.2024 21:52:00
date.addHours(2) // 10.02.2024 23:52:00
date.addMinutes(7) // 10.02.2024 21:59:00
date.addSeconds(57) // 10.02.2024 21:52:57

Date.prototype.daysInMonth()

Возвращает кол-во дней в месяце в текущей дате.

let date = new Date()
date.daysInMonth() // 29 (Февраль, високосный год)
date.addMonths(1).daysInMonth() // 31 (Март)

Date.prototype.format(format: string)

Возвращает дату в указанном формате.

YY - год
MM - месяц
DD - день
HH - часы
mm - минуты
SS - секунды

let date = new Date();
date.format('Год: YY, Месяц: MM') // Год: 2024, Месяц: 2
date.format(`HH:mm`) // 19:17

Date.prototype.getQuater()

Возвращает время года даты в числовом формате.

1 - зима
2 - весна
3 - лето
4 - осень

new Date().getQuater() // 1

Object

Object.prototype.random()

Возвращает случайную пару ключ-значение из объекта.

let obj = { a: 1, b: 2, c: 3 }
obj.random() // { b: 2 }
obj.random() // { c: 3 }

Object.prototype.find(condition: bool)

Адаптация функции из Array.

let obj = { a: 1, b: 2, c: 3 }
obj.find((key, value) => key == 'a') // { a: 1 }
obj.find((key, value) => value == 3) // { c: 3 }
obj.find((key, value) => value == 38) // undefined, потому что пары по заданным условиям не обнаружено

Object.prototype.filter(condition: bool)

Адаптация функции из Array.

let obj = { a: 1, b: 2, c: 3, d: 2 }
obj.filter((key, value) => value == 2) // { b: 2, d: 2 }
obj.filter((key, value) => key != 'c' && value == 1) // { a: 1 }
obj.filter((key, value) => key == 't') // {}, потому что пар по заданным условиям не обнаружено

Object.prototype.size()

Возвращает длину объекта.

let obj = { a: 1, b: 2, c: 3, d: 2 }
obj.size() // 4

Object.prototype.invert()

Инвертирует объект (меняет местами ключи и их значения).

let obj = { a: 1, b: 2 }
obj.invert() // { 1: 'a', 2: 'b' }

Object.prototype.copy()

Копирует объект (создаёт объект, независимый от текущего).

let obj = { a: 1, b: 3 }
let obj2 = obj
obj === obj2 // true

obj2 = obj.copy()
obj === obj2 // false

Object.prototype.pick(keys: array)

Удаляет все пары объекта, кроме тех, чьи ключи были указаны в аргументе.

let obj = { a: 1, b: 3, c: 8 }
obj.pick(['a', 'c']) // { a: 1, c: 8 }

Object.prototype.isEmpty()

Проверяет, является ли объект пустым.

{}.isEmpty() // true
{ a: 3 }.isEmpty() // false

String

String.random(length: integer, [cases]: array)

Генерирует случайные символы по заданым критериям.

String.random(5) // 5Gxju
String.random(3) // G9b

// Также у функции есть аргумент cases, в котором указываются все возможные случаи генерации.

String.random(5, cases = ['numbers', 'strings']) // 58a32
/* 
numbers - разрешает генерацию с цифрами
strings - разрешает генерацию с английскими буквами
specials - разрешает генерацию со специальными символами

По умолчанию установлены все случаи
*/

String.prototype.reverse()

"Переворачивает" строку.

'Hello'.reverse() // olleH

String.prototype.isPalindrome()

Альтернатива Number.prototype.isPalindrome(), только для строк.

'radar'.isPalindrome() // true, слово читается обраным случаем также 
'development'.isPalindrome() // false, слово не читается обраным случаем также

Array

globalThis.range / Array.range(length: integer, [start]: integer)

Создёт range (массив индексов).

Array.range(5) // [ 0, 1, 2, 3, 4 ]
range(3) // [ 0, 1, 2 ]
Array.range(3, 1) // [ 1, 2, 3 ]
Array.range(3, 2) // [ 2, 3, 4 ]

globalThis.list / Array.list(...values: any)

Создаёт массив с указанными значениями.

Array.list(1, 2, 3) // [1, 2, 3]
list(true, NaN, 'hello') // [true, NaN, 'hello']

Array.prototype.radius(from: integer, to: integer)

Возвращает массив, содержащий элементы в указанном радиусе (между индексами, включая их), не изменяя его.

let fruits = ['apple', 'orange', 'lemon', 'kiwi']

let radius = fruits.radius(0, 1) // ['apple', 'orange']
let radius2 = fruits.radius(2, 3) // ['lemon', 'kiwi']
fruits.length // 4

Array.prototype.random()

Возвращает случайный элемент из массива.

let list = [1, 2, 3]
list.random() // 2

Array.prototype.diff(arr: array)

Возвращает массив из элементов, которые отсутствуют в arr.

let numbers = [1, 2, 3, 4, 5]
let arr = [1, 2, 3]
numbers.diff(arr) // [4, 5]

// Обратите внимание, что эта операция не является обратнопропорциональной

arr.diff(numbers) // []

Array.prototype.inter(arr: array)

Возвращает массив из элементов, которые существуют в arr.

let numbers = [1, 2, 3, 4, 5]
let arr = [1, 2, 3]
numbers.inter(arr) // [1, 2, 3]

// Обратите внимание, что эта операция является обратнопропорциональной

arr.inter(numbers) // [1, 2, 3]

Array.prototype.without(elements: array | string)

Создаёт новый массив на основе предыдущего без указаных элементов.

let array = [1, 2, 3, 4, 5]
array.without(1) // [2, 3, 4, 5]
array.without([1, 2, 3]) // [4, 5]

Array.prototype.last / Array.prototype.first()

Возвращает первый и последний элементы массива.

let fruits = ['apple', 'orange', 'lemon', 'kiwi']
fruits.first() // apple
fruits.last() // kiwi

Array.prototype.copy()

Возвращает копию массива, которая не зависит от изначального.

let arr = [1, 2, 3]
arr.copy() // [1, 2, 3]

Array.prototype.shuffle()

"Перемешивает" элементы массива. Обратите внимание, что перемешанный массив заменяет изначальный. Рекомендую использовать Array.prototype.copy() для избежания неприятностей.

let array = [1, 2, 3, 4]
array.shuffle() // [3, 4, 1, 2]
array.last() // 2

Array.prototype.sum()

Возвращает сумму всех элементов числового массива.

let array = [1, 2, 3]
array.sum() // 6

Array.prototype.average()

Возвращает среднее значение суммы всех элементов числового массива.

let array = [1, 2, 3]
array.average() // 2

Array.prototype.unique()

Возвращает массив с уникальными значениями.

let array = [1, 2, 1, 3, 3, 1, 1, 2, 3]
array.unique() // [1, 2, 3]

Array.prototype.chunk(size: integer)

Разбивает массив на подмассивы с определённым кол-вом элементов.

let array = [1, 2, 3, 4, 5]
array.chunk(2) // [ [1, 2], [3, 4], [5] ]

Array.prototype.rotate(value: integer)

"Перемещает" массив по кругу, где положительное число - с конца в начало, а отрицательное - с начала в конец.

let array = [1, 2, 3, 4, 5]
array.rotate(1) // [5, 1, 2, 3, 4]
array.rotate(2) // [4, 5, 1, 2, 3]
array.rotate(-2) // [3, 4, 5, 1, 2]

Array.prototype.compact()

Удаляет все ложные значения с массива.

let array = [1, 2, null, 3, 0, false, NaN, undefined, 4, '', 5]
array.compact() // [1, 2, 3, 4, 5]

Array.prototype.flatten()

"выравнивает" вложенные массивы, превращая их в один плоский массив.

let array = [1, [2, 3, [4] ], [5]] // [1, 2, 3, 4, 5]

Array.prototype.zip(arr: array)

Объединяет элементы исходного массива с другим.

let array = [1, 2, 3]
let arr = ['a', 'b', 'c']
array.zip(arr) // [ [1, 'a'], [2, 'b'], [3, 'c'] ]

Array.prototype.mddile()

Возвращает средние элементы массива.

[1, 2, 3] // 2
[1, 2, 3, 4] // [2, 3]

Array.prototype.mddileIndex()

Возвращает индекы средних элементов массива.

['a', 'b', 'c'] // 1
[1, 2, 3, 4] // [1, 2]

Array.prototype.isEmpty()

Проверяет, является ли массив пустым.

[].isEmpty() // true
Array(5).isEmpty() // true
[1].isEmpty() // false

process

process.repeat(times: integer, execute: function)

Выполняет процесс определённое кол-во раз.

process.repeat(3, function () {
    console.log('Hello')
}) // Три раза выведет Hello в консоль

process.repeat(3, function (index) {
    console.log(index)
}) // Выведет индекс процесса по счёту (начиная с 0)

process.wait / proccess.sleep(ms: integer)

Заставляет "ждать" процесс определённое кол-во времени. (Не работает внутри process.repeat!)

// Выполняется сразу
await wait(5000)
// Выполнится спустя 5 секунд.

wait(60000).then(function () {
    // выполнится спустя минуту.
})

Мой Discord ID: 1097169235295350936