npm package: @pawika/utils
Description: Разные утилиты которые мне нужны в той или иной степени
Author: pawka
Latest version: 1.4.3

# @pawika/utils

Разные утилиты которые мне нужны в той или иной степени

## Методы

chunk compact sum uniq randomBigInt randomUID factory inspectFmt jsonFmt shieldingSymbols clone Timestamp isNaN isNil isNumber isObject toString isDate isRegExp

## chunk(array: `Array<T>`, size: `number`): `Array<Array<T>>`

Создает массив элементов, разбитых на группы длиной `size`.
Если массив не может быть разделен равномерно, последним фрагментом будут оставшиеся элементы.

**Source**: https://github.com/lodash/lodash/blob/4.17.15/lodash.js#L6839  
**Source**: https://github.com/DustFoundation/utils/blob/main/src/functions/chunk.ts

| Param | Type       |
| ----- | ---------- |
| array | `Array<T>` |
| size  | `number`   |

**Example**

```js
chunk(["a", "b", "c", "d"], 2);
// [['a', 'b'], ['c', 'd']]

chunk(["a", "b", "c", "d"], 3);
// [['a', 'b', 'c'], ['d']]
```

## uniq(array: `Array<T>`, iteratee: `function`): `Array<T>`

Создает версию массива без дубликатов, используя === для проверки равенства объектов.
В частности, сохраняется только первое вхождение каждого значения.
Если вы хотите вычислить уникальные элементы на основе преобразования, передайте итерируемую функцию.

**Source**: https://github.com/lodash/lodash/blob/4.17.15/lodash.js#L8417  
**Source**: https://github.com/jashkenas/underscore/blob/master/modules/uniq.js

| Param    | Type       |
| -------- | ---------- |
| array    | `Array<T>` |
| iteratee | `function` |

## compact(array: `Array<T>`): `Array<T>`

Возвращает копию списка с удаленными всеми ложными значениями.
В JavaScript значения `false`, `null`, `0`, `""`, `undefined` и `NaN` являются ложными.

**Source**: https://github.com/lodash/lodash/blob/4.17.15/lodash.js#L6874  
**Source**: https://github.com/jashkenas/underscore/blob/master/modules/compact.js

| Param | Type       |
| ----- | ---------- |
| array | `Array<T>` |

**Example**

```js
compact([0, 1, false, 2, "", 3]);
// [1, 2, 3]
```

## sum(array: `Array<number>`): `number`

Вычисляет сумму значений в массиве.

| Param | Type            |
| ----- | --------------- |
| array | `Array<number>` |

**Example**

```js
sum([4, 2, 8, 6]);
// 20
```

## randomBigInt(bits: `number`): `bigint`

Возвращает случайное целое число в формате `BigInt`

| Param | Type     | Default |
| ----- | -------- | ------- |
| bits  | `number` | `64`    |

**Example**

```js
randomBigInt(64);
// 9409313759732697550n

randomBigInt(128);
// 40800982229429306396968830979296370940n

randomBigInt(8);
// 1
```

## randomUID(size: `number`): `string`

Генерация рандомной строки с символаи (`A-Za-z0-9_-`)

**Source**: https://github.com/ai/nanoid/blob/main/index.js

| Param | Type     | Default |
| ----- | -------- | ------- |
| size  | `number` | `21`    |

**Example**

```js
randomUID(100);
// iFA27Jf8Jtn7WpqN-S2mw1nrBt9j8cbtxkb1q672C5RZOGcI5UrlSJUmlswiuqYzZfC6TxVkonf0YwiOX-bMLTJXRTg0zokfhR_2

randomUID();
// Qt8kPUze4vD3akfa4NNHX
```

## inspectFmt(data: `unknown`, compact?: `boolean`): `string`

Форматирует в строку через `inspect` из `node:util` данные принимаемые в `data`

| Param     | Type      | Default | Description                                                                                                                       |
| --------- | --------- | ------- | --------------------------------------------------------------------------------------------------------------------------------- |
| data      | `unknown` |         | Любое значение                                                                                                                    |
| [compact] | `boolean` | `false` | Если установить для этого параметра значение «false», каждый ключ объекта будет отображаться в новой строке. По умолчанию `false` |

**Example**

```js
inspectFmt({ name: "ivan", age: 11 });
// {
//   name: 'ivan',
//   age: 11
// }
```

## jsonFmt(data: `unknown`, space?: `number`): `string`

Форматирует в строку через `JSON.stringify` данные принимаемые в `data`

| Param   | Type      | Description                                                                                                                                  |
| ------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| data    | `unknown` | Любое значение                                                                                                                               |
| [space] | `number`  | Добавляет отступы, пробелы и символы разрыва строки в текст JSON возвращаемого значения, чтобы его было легче читать. По умолчанию равен `2` |

**Example**

```js
jsonFmt({ name: "ivan", age: 11 });
// {
//   "name": "ivan",
//   "age": 11
// }
```

## shieldingSymbols(val?: `string`): `string` | `undefined`

Экранирование символов в строке для mongodb

**Returns**: `string` \| `null` - Строка с экранированными символами

| Param | Type     | Description     |
| ----- | -------- | --------------- |
| [val] | `string` | Исходная строка |

**Example**

```js
shieldingSymbols("-[]{}()*+?.,\\^$|#");
// \-\[\]\{\}\(\)\*\+\?\.\,\\\^\$\|\#
```

## toString(val: `unknown`): `string`

Преобразует любое примитивное значение в строку

| Param | Type      |
| ----- | --------- |
| val   | `unknown` |

**Example**

```js
toString(new ObjectId("638ed3299f694dd457ed54ad"));
// 638ed3299f694dd457ed54ad
```

## clone<`T`>(obj: `T`): `T`

Создайте глубокую копию предоставленного простого объекта.
Любые вложенные объекты или массивы будут дублироваться, а не скопированы по ссылке.

**Source**: https://github.com/lodash/lodash/blob/4.17.15/lodash.js#L11087  
**Source**: https://github.com/jashkenas/underscore/blob/master/modules/clone.js  
**Source**: https://github.com/ramda/ramda/blob/v0.28.0/source/internal/_clone.js

| Param | Type |
| ----- | ---- |
| obj   | `T`  |

## isObject(value: `any`): `boolean`

Возвращает true, если `value` является типом `Object`.

**Source**: https://github.com/lodash/lodash/blob/4.17.15/lodash.js#L11743  
**Source**: https://github.com/jashkenas/underscore/blob/master/modules/isObject.js

| Param | Type  |
| ----- | ----- |
| value | `any` |

**Example**

```js
isObject({});
// true

isObject([1, 2, 3]);
// true

isObject(null);
// false
```

## isNil(value: `any`): `boolean`

Проверка `value` на `null` и `undefined`

**Source**: https://github.com/lodash/lodash/blob/4.17.15/lodash.js#L11973

| Param | Type  |
| ----- | ----- |
| value | `any` |

**Example**

```js
isNil(null);
// true

isNil(void 0);
// true

isNil(NaN);
// false
```

## isNaN(value: `any`): `boolean`

Возвращает true, если `value` является значением `NaN`.

**Source**: https://github.com/lodash/lodash/blob/4.17.15/lodash.js#L11892  
**Source**: https://github.com/jashkenas/underscore/blob/master/modules/isNaN.js

| Param | Type  |
| ----- | ----- |
| value | `any` |

**Example**

```js
isNaN(NaN);
// true

isNaN(new Number(NaN));
// true

isNaN(undefined);
// true

isNaN(undefined);
// false
```

## isNumber(value: `any`): `boolean`

Возвращает true, если `value` является числом (включая NaN).

**Source**: https://github.com/lodash/lodash/blob/4.17.15/lodash.js#L12003  
**Source**: https://github.com/jashkenas/underscore/blob/master/modules/isNumber.js

| Param | Type  |
| ----- | ----- |
| value | `any` |

**Example**

```js
isNumber(3);
// true

isNumber(Number.MIN_VALUE);
// true

isNumber(Infinity);
// true

isNumber("3");
// false
```

## isDate(value: `any`): `boolean`

Возвращает true, если `value` является датой (Date).

| Param | Type  |
| ----- | ----- |
| value | `any` |

**Example**

```js
isDate(new Date());
// true

isDate(new Date(Number.MIN_VALUE));
// true

isDate(new Date(Number.MAX_VALUE));
// false

isDate(new Date(""));
// false
```

## isRegExp(value: `any`): `boolean`

Возвращает true, если `value` является регуляркой (RegExp).

| Param | Type  |
| ----- | ----- |
| value | `any` |

**Example**

```js
isRegExp(new RegExp(/aboba/gi));
// true

isRegExp(1);
// false
```

## Timestamp

Класс для работы со временем

- [Timestamp](#Timestamp)
  - [.unixtime](#Timestamp.unixtime): `number`
  - [.milliseconds](#Timestamp.milliseconds): `number`
  - [.date](#Timestamp.date): `Date`

### Timestamp.unixtime: `number`

Отдает время в unixtime

**Example**

```js
Timestamp.unixtime;
// 1668283743
```

### Timestamp.milliseconds: `number`

Отдает unixtime в миллисекундах

**Example**

```js
Timestamp.milliseconds;
// 1668283704485
```

### Timestamp.date: `Date`

Отдает время UTC

**Example**

```js
Timestamp.date;
// 2022-11-12T20:08:47.676Z
```