@rogolev/value 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/.prettierignore +4 -0
  2. package/CHANGELOG.md +56 -0
  3. package/LICENSE +41 -0
  4. package/README.md +91 -0
  5. package/babel.config.json +20 -0
  6. package/docs/helpers/array.md +80 -0
  7. package/docs/helpers/empty.md +77 -0
  8. package/docs/helpers/gettype.md +69 -0
  9. package/docs/helpers/is_array.md +105 -0
  10. package/docs/helpers/is_assoc.md +59 -0
  11. package/docs/helpers/is_bigint.md +57 -0
  12. package/docs/helpers/is_bool.md +50 -0
  13. package/docs/helpers/is_boolean.md +50 -0
  14. package/docs/helpers/is_class.md +73 -0
  15. package/docs/helpers/is_float.md +71 -0
  16. package/docs/helpers/is_function.md +62 -0
  17. package/docs/helpers/is_infinity.md +61 -0
  18. package/docs/helpers/is_int.md +81 -0
  19. package/docs/helpers/is_integer.md +82 -0
  20. package/docs/helpers/is_list.md +51 -0
  21. package/docs/helpers/is_nan.md +59 -0
  22. package/docs/helpers/is_null.md +49 -0
  23. package/docs/helpers/is_number.md +67 -0
  24. package/docs/helpers/is_numeric.md +76 -0
  25. package/docs/helpers/is_object.md +69 -0
  26. package/docs/helpers/is_scalar.md +60 -0
  27. package/docs/helpers/is_string.md +58 -0
  28. package/docs/helpers/is_symbol.md +58 -0
  29. package/docs/helpers/is_undefined.md +56 -0
  30. package/docs/helpers/print.md +187 -0
  31. package/docs/helpers/print_type.md +225 -0
  32. package/docs/helpers/settype.md +78 -0
  33. package/docs/helpers/to_array.md +106 -0
  34. package/docs/helpers/to_assoc.md +91 -0
  35. package/docs/helpers/to_bool.md +76 -0
  36. package/docs/helpers/to_boolean.md +77 -0
  37. package/docs/helpers/to_float.md +70 -0
  38. package/docs/helpers/to_int.md +87 -0
  39. package/docs/helpers/to_integer.md +87 -0
  40. package/docs/helpers/to_list.md +47 -0
  41. package/docs/helpers/to_object.md +76 -0
  42. package/docs/helpers/to_string.md +134 -0
  43. package/docs/helpers.md +51 -0
  44. package/docs/types/NaN.md +30 -0
  45. package/docs/types/array.md +252 -0
  46. package/docs/types/bigint.md +34 -0
  47. package/docs/types/boolean.md +47 -0
  48. package/docs/types/class.md +36 -0
  49. package/docs/types/float.md +35 -0
  50. package/docs/types/function.md +121 -0
  51. package/docs/types/infinity.md +32 -0
  52. package/docs/types/integer.md +35 -0
  53. package/docs/types/null.md +23 -0
  54. package/docs/types/object.md +62 -0
  55. package/docs/types/string.md +33 -0
  56. package/docs/types/symbol.md +29 -0
  57. package/docs/types/undefined.md +25 -0
  58. package/docs/types.md +44 -0
  59. package/eslint.config.mjs +1664 -0
  60. package/index.mjs +37 -0
  61. package/jest.config.mjs +31 -0
  62. package/package.json +47 -0
  63. package/prettier.config.mjs +224 -0
  64. package/src/helpers/array.mjs +107 -0
  65. package/src/helpers/empty.mjs +70 -0
  66. package/src/helpers/gettype.mjs +133 -0
  67. package/src/helpers/is_array.mjs +128 -0
  68. package/src/helpers/is_assoc.mjs +51 -0
  69. package/src/helpers/is_bigint.mjs +47 -0
  70. package/src/helpers/is_bool.mjs +43 -0
  71. package/src/helpers/is_boolean.mjs +43 -0
  72. package/src/helpers/is_class.mjs +87 -0
  73. package/src/helpers/is_float.mjs +67 -0
  74. package/src/helpers/is_function.mjs +74 -0
  75. package/src/helpers/is_infinity.mjs +52 -0
  76. package/src/helpers/is_int.mjs +57 -0
  77. package/src/helpers/is_integer.mjs +74 -0
  78. package/src/helpers/is_list.mjs +43 -0
  79. package/src/helpers/is_nan.mjs +51 -0
  80. package/src/helpers/is_null.mjs +37 -0
  81. package/src/helpers/is_number.mjs +49 -0
  82. package/src/helpers/is_numeric.mjs +64 -0
  83. package/src/helpers/is_object.mjs +72 -0
  84. package/src/helpers/is_scalar.mjs +45 -0
  85. package/src/helpers/is_string.mjs +46 -0
  86. package/src/helpers/is_symbol.mjs +46 -0
  87. package/src/helpers/is_undefined.mjs +44 -0
  88. package/src/helpers/print.mjs +245 -0
  89. package/src/helpers/print_type.mjs +261 -0
  90. package/src/helpers/settype.mjs +101 -0
  91. package/src/helpers/to_array.mjs +118 -0
  92. package/src/helpers/to_assoc.mjs +98 -0
  93. package/src/helpers/to_bool.mjs +68 -0
  94. package/src/helpers/to_boolean.mjs +64 -0
  95. package/src/helpers/to_float.mjs +72 -0
  96. package/src/helpers/to_int.mjs +93 -0
  97. package/src/helpers/to_integer.mjs +81 -0
  98. package/src/helpers/to_list.mjs +56 -0
  99. package/src/helpers/to_object.mjs +94 -0
  100. package/src/helpers/to_string.mjs +157 -0
  101. package/tests/helpers/array.test.mjs +58 -0
  102. package/tests/helpers/empty.test.mjs +22 -0
  103. package/tests/helpers/gettype.test.mjs +74 -0
  104. package/tests/helpers/is_array.test.mjs +404 -0
  105. package/tests/helpers/is_assoc.test.mjs +42 -0
  106. package/tests/helpers/is_bigint.test.mjs +51 -0
  107. package/tests/helpers/is_bool.test.mjs +43 -0
  108. package/tests/helpers/is_boolean.test.mjs +43 -0
  109. package/tests/helpers/is_class.test.mjs +84 -0
  110. package/tests/helpers/is_float.test.mjs +87 -0
  111. package/tests/helpers/is_function.test.mjs +83 -0
  112. package/tests/helpers/is_infinity.test.mjs +46 -0
  113. package/tests/helpers/is_int.test.mjs +45 -0
  114. package/tests/helpers/is_integer.test.mjs +64 -0
  115. package/tests/helpers/is_list.test.mjs +42 -0
  116. package/tests/helpers/is_nan.test.mjs +43 -0
  117. package/tests/helpers/is_null.test.mjs +17 -0
  118. package/tests/helpers/is_number.test.mjs +25 -0
  119. package/tests/helpers/is_numeric.test.mjs +30 -0
  120. package/tests/helpers/is_object.test.mjs +52 -0
  121. package/tests/helpers/is_scalar.test.mjs +21 -0
  122. package/tests/helpers/is_string.test.mjs +20 -0
  123. package/tests/helpers/is_symbol.test.mjs +20 -0
  124. package/tests/helpers/is_undefined.test.mjs +18 -0
  125. package/tests/helpers/print.test.mjs +62 -0
  126. package/tests/helpers/print_type.test.mjs +62 -0
  127. package/tests/helpers/settype.test.mjs +34 -0
  128. package/tests/helpers/to_array.test.mjs +38 -0
  129. package/tests/helpers/to_assoc.test.mjs +33 -0
  130. package/tests/helpers/to_bool.test.mjs +51 -0
  131. package/tests/helpers/to_boolean.test.mjs +51 -0
  132. package/tests/helpers/to_float.test.mjs +26 -0
  133. package/tests/helpers/to_int.test.mjs +48 -0
  134. package/tests/helpers/to_integer.test.mjs +48 -0
  135. package/tests/helpers/to_list.test.mjs +32 -0
  136. package/tests/helpers/to_object.test.mjs +36 -0
  137. package/tests/helpers/to_string.test.mjs +71 -0
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Проверяет, является ли переданное значение массивом или ассоциативным массивом (объектом с ключами и значениями).
3
+ *
4
+ * ### Описание
5
+ *
6
+ * В JavaScript массивы и объекты имеют разные структуры и предназначения:
7
+ *
8
+ * - Массивы (Array) являются упорядоченными коллекциями элементов, которые могут быть индексированы.
9
+ * - Объекты (Object) содержат пары "ключ-значение", которые могут быть неупорядоченными.
10
+ *
11
+ * Эта функция проверяет, является ли переданное значение обычным массивом (например, `[1, 2, 3]`),
12
+ * либо ассоциативным массивом (объектом с парами "ключ-значение", например, `{foo: 'bar'}`).
13
+ *
14
+ * ### Алгоритм работы функции
15
+ *
16
+ * 1. Сначала проверяется, является ли переданное значение обычным массивом с помощью встроенного метода `Array.isArray(value)`. Если это массив, функция сразу возвращает `true`.
17
+ *
18
+ * 2. Если переменная не является массивом, то выполняются дополнительные проверки:
19
+ *
20
+ * - Проверяется, что значение не равно `null` (так как `null` в JavaScript также является объектом, но не является ни массивом, ни объектом с парами "ключ-значение").
21
+ * - Проверяется, что значение является объектом JavaScript (с помощью `typeof value === 'object'`).
22
+ * - Проверяется, что прототип объекта совпадает с `Object.prototype` (это объект, от которого наследуются все объекты в JavaScript) или является `null` (это означает, что объект был создан с помощью `Object.create(null)` и не имеет прототипа).
23
+ * - Исключаются массивоподобные объекты (например, `arguments`, `NodeList`), путем проверки, что свойство `length` не является собственным свойством объекта.
24
+ * - Дополнительно проверяется, что объект является простым (его конструктор равен `Object`), а также исключаются встроенные объекты (`Math`, `JSON`, `Reflect`, `Intl`), для которых функция возвращает `true`.
25
+ *
26
+ * ### Параметры
27
+ *
28
+ * - `value` (any)
29
+ * Проверяемая переменная.
30
+ *
31
+ * ### Возвращаемое значение
32
+ *
33
+ * Возвращает `true`, если переменная является обычным массивом (`Array`), ассоциативным массивом (объектом с парами "ключ-значение"), ассоциативным массивом, созданным с помощью `Object.create(null)`. В остальных случаях функция возвращает `false`.
34
+ *
35
+ * ### Примеры использования
36
+ *
37
+ * 1. Простые массивы:
38
+ *
39
+ * ```js
40
+ * is_array([1, 2, 3]); // true
41
+ * is_array([]); // true
42
+ * ```
43
+ *
44
+ * 2. Ассоциативные массивы (объекты с ключами и значениями):
45
+ *
46
+ * ```js
47
+ * is_array({ foo: 'bar', baz: 42 }); // true
48
+ * is_array({ '0': 'a', '1': 'b' }); // true
49
+ * ```
50
+ *
51
+ * 3. Объекты, созданные без прототипа:
52
+ *
53
+ * ```js
54
+ * const noProtoObject = Object.create(null);
55
+ * noProtoObject.foo = 'bar';
56
+ * is_array(noProtoObject); // true
57
+ * ```
58
+ *
59
+ * 4. Примитивы и невалидные значения:
60
+ *
61
+ * ```js
62
+ * is_array(null); // false
63
+ * is_array(undefined); // false
64
+ * is_array(42); // false
65
+ * is_array('hello'); // false
66
+ * ```
67
+ *
68
+ * 5. Специальные объекты:
69
+ *
70
+ * ```js
71
+ * is_array(new Map()); // false
72
+ * is_array(new Set()); // false
73
+ * is_array(() => {}); // false
74
+ * ```
75
+ *
76
+ * 6. Классы и их экземпляры:
77
+ *
78
+ * ```js
79
+ * class MyClass {}
80
+ * const instance = new MyClass();
81
+ * is_array(instance); // false
82
+ * ```
83
+ *
84
+ * @param {any} value Проверяемая переменная.
85
+ * @returns {boolean} Возвращает `true`, если значение является массивом или ассоциативным массивом, иначе `false`.
86
+ */
87
+ export default function is_array(value) {
88
+ // Для массивов (Array) возвращаем `true` по умолчанию.
89
+ if (Array.isArray(value)) {
90
+ return true;
91
+ }
92
+
93
+ // Далее работаем только с объектами.
94
+ if (!value || typeof value !== 'object') {
95
+ return false;
96
+ }
97
+
98
+ // Если у переданного объекта отсутствует прототип, то это означает,
99
+ // что объект является контейнером пар ключ-значение без встроенных методов,
100
+ // наследуемых от прототипа Object.prototype.
101
+ // Такой контейнер можно создать с помощью конструкции `Object.create(null)`
102
+ // или с помощью функции `array({})`.
103
+ if (Object.getPrototypeOf(value) === null) {
104
+ return true;
105
+ }
106
+
107
+ // Исключаем встроенные объекты Math, JSON, Reflect, Intl, для которых
108
+ // функция возвращает `true`.
109
+ if ([Math, JSON, Reflect, Intl].includes(value)) {
110
+ return false;
111
+ }
112
+
113
+ // Если у объекта присутствует свойство `length`, то это означает, что
114
+ // передан массивоподобный объект, например `arguments`.
115
+ // С точки зрения данной функции, данные объекты считать
116
+ // ассоциативными массивами нельзя.
117
+ if (Object.hasOwn(value, 'length')) {
118
+ return false;
119
+ }
120
+
121
+ // Если прототип переданного объекта - `Object.prototype`, то передан
122
+ // обычный объект.
123
+ if (Object.getPrototypeOf(value) === Object.prototype) {
124
+ return true;
125
+ }
126
+
127
+ return false;
128
+ }
@@ -0,0 +1,51 @@
1
+ import is_array from './is_array.mjs';
2
+
3
+ /**
4
+ * Проверяет, является ли значение ассоциативным массивом.
5
+ *
6
+ * ### Параметры
7
+ *
8
+ * - `value` (any)
9
+ * Значение, которое необходимо проверить.
10
+ *
11
+ * ### Описание
12
+ *
13
+ * Функция `is_assoc` проверяет, является ли переданное значение ассоциативным массивом.
14
+ *
15
+ * Она использует метод `is_array` для проверки значения и убеждается, что значение не является обычным массивом.
16
+ *
17
+ * ### Возвращаемое значение
18
+ *
19
+ * Возвращает `true`, если значение является ассоциативным массивом, и `false` в противном случае.
20
+ *
21
+ * ### Примеры использования
22
+ *
23
+ * #### Пример 1: Проверка ассоциативных массивов
24
+ *
25
+ * ```js
26
+ * is_assoc({ foo: 'bar' }); // true
27
+ * is_assoc({}); // true
28
+ * ```
29
+ *
30
+ * #### Пример 2: Проверка обычных массивов
31
+ *
32
+ * ```js
33
+ * is_assoc([]); // false
34
+ * is_assoc([1, 2, 3]); // false
35
+ * ```
36
+ *
37
+ * #### Пример 3: Проверка значений других типов
38
+ *
39
+ * ```js
40
+ * is_assoc('string'); // false (строка)
41
+ * is_assoc(42); // false (число)
42
+ * is_assoc(null); // false
43
+ * is_assoc(undefined); // false
44
+ * ```
45
+ *
46
+ * @param {any} value Значение, которое необходимо проверить.
47
+ * @returns {boolean} Возвращает `true`, если значение является ассоциативным массивом, и `false` в противном случае.
48
+ */
49
+ export default function is_assoc(value) {
50
+ return is_array(value) && !Array.isArray(value);
51
+ }
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Проверяет, является ли значение типом `bigint`.
3
+ *
4
+ * ### Параметры
5
+ *
6
+ * - `value` (any)
7
+ * Значение, которое необходимо проверить.
8
+ *
9
+ * ### Описание
10
+ *
11
+ * Функция `is_bigint` проверяет, является ли переданное значение типом `bigint`.
12
+ *
13
+ * 1. Проверяется, что значение имеет тип `bigint`.
14
+ *
15
+ * Функция возвращает `false` для значений других типов, таких как числа, строки, объекты или массивы.
16
+ *
17
+ * ### Возвращаемое значение
18
+ *
19
+ * Возвращает `true`, если значение является типом `bigint`, и `false` в противном случае.
20
+ *
21
+ * ### Примеры использования
22
+ *
23
+ * #### Пример 1: Проверка значений типа bigint
24
+ *
25
+ * ```js
26
+ * is_bigint(BigInt(123456)); // true
27
+ * is_bigint(BigInt(-123456)); // true
28
+ * ```
29
+ *
30
+ * #### Пример 2: Проверка значений других типов
31
+ *
32
+ * ```js
33
+ * is_bigint(42); // false (число)
34
+ * is_bigint('42'); // false (строка)
35
+ * is_bigint(true); // false (логическое значение)
36
+ * is_bigint(null); // false
37
+ * is_bigint(undefined); // false
38
+ * is_bigint({}); // false (объект)
39
+ * is_bigint([]); // false (массив)
40
+ * ```
41
+ *
42
+ * @param {any} value Значение, которое необходимо проверить.
43
+ * @returns {boolean} Возвращает `true`, если значение является типом bigint, и `false` в противном случае.
44
+ */
45
+ export default function is_bigint(value) {
46
+ return typeof value === 'bigint';
47
+ }
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Проверяет, является ли переданное значение логическим типом (`boolean`).
3
+ *
4
+ * ### Описание
5
+ *
6
+ * В JavaScript логическое значение может быть только двумя состояниями: `true` или `false`.
7
+ * Функция проверяет тип переданного значения с использованием оператора `typeof`.
8
+ * Если значение является примитивом типа `boolean`, функция возвращает `true`.
9
+ * Для всех других типов (включая объекты, строки, числа, `null`, `undefined` и другие) функция вернёт `false`.
10
+ *
11
+ * #### Примечание
12
+ *
13
+ * - Функция возвращает `false` для объектов типа `Boolean`, созданных с помощью конструктора `new Boolean()`.
14
+ * - Возвращает `false` для массивов, объектов и других типов данных, отличных от `boolean`.
15
+ *
16
+ * ### Параметры
17
+ *
18
+ * - `value` (any):
19
+ * Проверяемая переменная.
20
+ *
21
+ * ### Возвращаемое значение
22
+ *
23
+ * Возвращает `true`, если значение `value` является логическим (`boolean`), иначе `false`.
24
+ *
25
+ * ### Примеры использования
26
+ *
27
+ * ```js
28
+ * is_bool(true); // Возвращает: true
29
+ * is_bool(false); // Возвращает: true
30
+ * is_bool(0); // Возвращает: false
31
+ * is_bool('true'); // Возвращает: false
32
+ * is_bool(null); // Возвращает: false
33
+ * is_bool([]); // Возвращает: false
34
+ * is_bool({}); // Возвращает: false
35
+ * is_bool(new Boolean(true)); // Возвращает: false
36
+ * ```
37
+ *
38
+ * @param {any} value Проверяемая переменная.
39
+ * @returns {boolean} Возвращает `true`, если значение является логическим, иначе `false`.
40
+ */
41
+ export default function is_bool(value) {
42
+ return typeof value === 'boolean';
43
+ }
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Проверяет, является ли переданное значение логическим типом (`boolean`).
3
+ *
4
+ * ### Описание
5
+ *
6
+ * В JavaScript логическое значение может быть только двумя состояниями: `true` или `false`.
7
+ * Функция проверяет тип переданного значения с использованием оператора `typeof`.
8
+ * Если значение является примитивом типа `boolean`, функция возвращает `true`.
9
+ * Для всех других типов (включая объекты, строки, числа, `null`, `undefined` и другие) функция вернёт `false`.
10
+ *
11
+ * #### Примечание
12
+ *
13
+ * - Функция возвращает `false` для объектов типа `Boolean`, созданных с помощью конструктора `new Boolean()`.
14
+ * - Возвращает `false` для массивов, объектов и других типов данных, отличных от `boolean`.
15
+ *
16
+ * ### Параметры
17
+ *
18
+ * - `value` (any):
19
+ * Проверяемая переменная.
20
+ *
21
+ * ### Возвращаемое значение
22
+ *
23
+ * Возвращает `true`, если значение `value` является логическим (`boolean`), иначе `false`.
24
+ *
25
+ * ### Примеры использования
26
+ *
27
+ * ```js
28
+ * is_boolean(true); // Возвращает: true
29
+ * is_boolean(false); // Возвращает: true
30
+ * is_boolean(0); // Возвращает: false
31
+ * is_boolean('true'); // Возвращает: false
32
+ * is_boolean(null); // Возвращает: false
33
+ * is_boolean([]); // Возвращает: false
34
+ * is_boolean({}); // Возвращает: false
35
+ * is_boolean(new Boolean(true)); // Возвращает: false
36
+ * ```
37
+ *
38
+ * @param {any} value Проверяемая переменная.
39
+ * @returns {boolean} Возвращает `true`, если значение является логическим, иначе `false`.
40
+ */
41
+ export default function is_boolean(value) {
42
+ return typeof value === 'boolean';
43
+ }
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Проверяет, является ли переданная переменная классом.
3
+ *
4
+ * ### Параметры
5
+ *
6
+ * - `value` (any)
7
+ * Проверяемая переменная.
8
+ *
9
+ * ### Описание
10
+ *
11
+ * В JavaScript классы являются функциями, но с уникальным поведением.
12
+ *
13
+ * Для определения класса функция проверяет:
14
+ *
15
+ * 1. Что переданная переменная является функцией.
16
+ * 2. Что строковое представление функции начинается с `class `.
17
+ *
18
+ * #### Примечание
19
+ *
20
+ * Конструкторы функций, созданные с помощью `function`, не будут распознаны как классы.
21
+ *
22
+ * Для примера:
23
+ *
24
+ * ```js
25
+ * function Foo() {}
26
+ * is_class(Foo); // Возвращает: false
27
+ * ```
28
+ *
29
+ * В отличие от классов, которые выглядят так:
30
+ *
31
+ * ```js
32
+ * class MyClass {}
33
+ * is_class(MyClass); // Возвращает: true
34
+ * ```
35
+ *
36
+ * ### Возвращаемое значение
37
+ *
38
+ * Возвращает `true`, если значение является классом, иначе `false`.
39
+ *
40
+ * ### Примеры использования
41
+ *
42
+ * 1. Классы:
43
+ *
44
+ * ```js
45
+ * class MyClass {}
46
+ * is_class(MyClass); // true
47
+ * ```
48
+ *
49
+ * 2. Функции-конструкторы:
50
+ *
51
+ * ```js
52
+ * function MyFunction() {}
53
+ * is_class(MyFunction); // false
54
+ * ```
55
+ *
56
+ * 3. Объекты и примитивы:
57
+ *
58
+ * ```js
59
+ * is_class({}); // false
60
+ * is_class([]); // false
61
+ * is_class(null); // false
62
+ * is_class(42); // false
63
+ * ```
64
+ *
65
+ * @param {any} value Проверяемая переменная.
66
+ * @returns {boolean} Возвращает `true`, если значение является классом, иначе `false`.
67
+ */
68
+ export default function is_class(value) {
69
+ // Проверяем, является ли значение функцией
70
+ if (typeof value !== 'function') {
71
+ return false;
72
+ }
73
+
74
+ // Проверяем, не является ли значение классом, используя строковое представление функции
75
+ if (typeof value.toString === 'function') {
76
+ return /^class\s/.test(value.toString());
77
+ }
78
+
79
+ // Если у функции нет прототипа, значит это стрелочная функция или метод
80
+ if (!value.prototype) {
81
+ return false;
82
+ }
83
+
84
+ // Строковое представление может быть изменено в разных средах выполнения
85
+ // или при минификации кода, поэтому проводим дополнительную проверку.
86
+ return !Object.getOwnPropertyDescriptor(value, 'prototype')?.writable;
87
+ }
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Проверяет, является ли значение числом с плавающей точкой.
3
+ *
4
+ * ### Параметры
5
+ *
6
+ * - `value` (any)
7
+ * Значение для проверки.
8
+ *
9
+ * ### Описание
10
+ *
11
+ * Функция `is_float` проверяет, является ли переданное значение числом с дробной частью, которое отличается от целого числа.
12
+ *
13
+ * Она работает следующим образом:
14
+ *
15
+ * 1. Проверяет, что значение имеет тип `number`.
16
+ * 2. Исключает значения `NaN`, которые также относятся к типу `number`, но не считаются числовыми значениями.
17
+ * 3. Проверяет, что у числа есть дробная часть, проверяя остаток от деления на `1` (`value % 1 !== 0`).
18
+ *
19
+ * Значения, которые не являются числами или числа без дробной части, не считаются числами с плавающей точкой.
20
+ *
21
+ * ### Возвращаемое значение
22
+ *
23
+ * Возвращает `true`, если значение является числом с плавающей точкой, иначе `false`.
24
+ *
25
+ * ### Примеры использования
26
+ *
27
+ * #### Числа с плавающей точкой
28
+ *
29
+ * ```js
30
+ * is_float(3.14); // true
31
+ * is_float(-0.5); // true
32
+ * is_float(0.1 + 0.2); // true
33
+ * ```
34
+ *
35
+ * #### Целые числа
36
+ *
37
+ * ```js
38
+ * is_float(0); // false
39
+ * is_float(42); // false
40
+ * is_float(-100); // false
41
+ * ```
42
+ *
43
+ * #### Нечисловые значения
44
+ *
45
+ * ```js
46
+ * is_float('3.14'); // false
47
+ * is_float(NaN); // false
48
+ * is_float(null); // false
49
+ * is_float(undefined); // false
50
+ * is_float(true); // false
51
+ * is_float({}); // false
52
+ * is_float([]); // false
53
+ * ```
54
+ *
55
+ * #### Специальные значения
56
+ *
57
+ * ```js
58
+ * is_float(Infinity); // false
59
+ * is_float(-Infinity); // false
60
+ * ```
61
+ *
62
+ * @param {any} value Значение для проверки.
63
+ * @returns {boolean} Возвращает `true`, если значение является числом с плавающей точкой, иначе `false`.
64
+ */
65
+ export default function is_float(value) {
66
+ return typeof value === 'number' && Number.isFinite(value) && value % 1 !== 0;
67
+ }
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Проверяет, что значение является функцией, исключая классы.
3
+ *
4
+ * ### Параметры
5
+ *
6
+ * - `value` (any):
7
+ * Проверяемое значение. Может быть любым типом данных.
8
+ *
9
+ * ### Описание
10
+ *
11
+ * Функция проверяет, является ли переданное значение функцией, исключая классы.
12
+ * В JavaScript функции и классы оба являются типом `function`, но классы имеют особый синтаксис и поведение.
13
+ * Функция `is_function` различает их, проверяя, не начинается ли строковое представление функции с `class`, что указывает на то, что это класс, а не обычная функция.
14
+ * Если значение является функцией (но не классом), функция возвращает `true`.
15
+ * Для всех остальных типов данных (включая классы, объекты, примитивы) функция возвращает `false`.
16
+ *
17
+ * ### Возвращаемое значение
18
+ *
19
+ * Возвращает `true`, если переданное значение является функцией (но не классом).
20
+ * Возвращает `false`, если переданное значение является классом или любым другим типом данных.
21
+ *
22
+ * ### Примеры использования
23
+ *
24
+ * Пример 1: обычная функция
25
+ *
26
+ * ```js
27
+ * function test() {}
28
+ * is_function(test); // Возвращает: true
29
+ * ```
30
+ *
31
+ * Пример 2: класс
32
+ *
33
+ * ```js
34
+ * class MyClass {}
35
+ * is_function(MyClass); // Возвращает: false
36
+ * ```
37
+ *
38
+ * Пример 3: объект
39
+ *
40
+ * ```js
41
+ * const obj = {};
42
+ * is_function(obj); // Возвращает: false
43
+ * ```
44
+ *
45
+ * Пример 4: примитив
46
+ *
47
+ * ```js
48
+ * is_function(42); // Возвращает: false
49
+ * is_function('hello'); // Возвращает: false
50
+ * ```
51
+ *
52
+ * @param {any} value - Проверяемое значение.
53
+ * @returns {boolean} Возвращает `true`, если значение является функцией, иначе `false`.
54
+ */
55
+ export default function is_function(value) {
56
+ // Проверяем, является ли значение функцией
57
+ if (typeof value !== 'function') {
58
+ return false;
59
+ }
60
+
61
+ // Проверяем, не является ли значение классом, используя строковое представление функции
62
+ if (typeof value.toString === 'function') {
63
+ return !/^class\s/.test(value.toString());
64
+ }
65
+
66
+ // Если у функции нет прототипа, значит это стрелочная функция или метод
67
+ if (!value.prototype) {
68
+ return true;
69
+ }
70
+
71
+ // Строковое представление может быть изменено в разных средах выполнения
72
+ // или при минификации кода, поэтому проводим дополнительную проверку.
73
+ return Boolean(Object.getOwnPropertyDescriptor(value, 'prototype')?.writable);
74
+ }
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Проверяет, является ли значение бесконечностью (Infinity или -Infinity).
3
+ *
4
+ * ### Параметры
5
+ *
6
+ * - `value` (any)
7
+ * Значение, которое необходимо проверить.
8
+ *
9
+ * ### Описание
10
+ *
11
+ * Функция `is_infinity` проверяет, является ли переданное значение бесконечностью (Infinity или -Infinity).
12
+ *
13
+ * Она проверяет, равно ли значение `Number.POSITIVE_INFINITY` или `Number.NEGATIVE_INFINITY`.
14
+ *
15
+ * ### Возвращаемое значение
16
+ *
17
+ * Возвращает `true`, если значение является бесконечностью, и `false` в противном случае.
18
+ *
19
+ * ### Примеры использования
20
+ *
21
+ * #### Пример 1: Проверка значения Infinity
22
+ *
23
+ * ```js
24
+ * is_infinity(Infinity); // true
25
+ * is_infinity(-Infinity); // true
26
+ * ```
27
+ *
28
+ * #### Пример 2: Проверка числовых значений
29
+ *
30
+ * ```js
31
+ * is_infinity(42); // false
32
+ * is_infinity(3.14); // false
33
+ * is_infinity(NaN); // false
34
+ * ```
35
+ *
36
+ * #### Пример 3: Проверка значений других типов
37
+ *
38
+ * ```js
39
+ * is_infinity('Infinity'); // false (строка)
40
+ * is_infinity(true); // false (логическое значение)
41
+ * is_infinity(null); // false
42
+ * is_infinity(undefined); // false
43
+ * is_infinity({}); // false (объект)
44
+ * is_infinity([]); // false (массив)
45
+ * ```
46
+ *
47
+ * @param {any} value Значение, которое необходимо проверить.
48
+ * @returns {boolean} Возвращает `true`, если значение является бесконечностью, и `false` в противном случае.
49
+ */
50
+ export default function is_infinity(value) {
51
+ return value === Number.POSITIVE_INFINITY || value === Number.NEGATIVE_INFINITY;
52
+ }
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Проверяет, является ли значение целым числом.
3
+ *
4
+ * ### Параметры
5
+ *
6
+ * - `value` (any)
7
+ * Значение, которое нужно проверить.
8
+ *
9
+ * ### Описание
10
+ *
11
+ * Функция `is_int` определяет, является ли переданное значение целым числом.
12
+ *
13
+ * Она выполняет следующие проверки:
14
+ *
15
+ * 1. **Тип значения**: Убеждается, что `value` имеет тип `number`.
16
+ * 2. **Конечность числа**: Проверяет, что значение не является `Infinity` или `NaN` с помощью `Number.isFinite(value)`.
17
+ * 3. **Целочисленность**: Убедится, что остаток от деления числа на 1 равен нулю (`value % 1 === 0`).
18
+ *
19
+ * Если значение соответствует всем этим условиям, оно считается целым числом.
20
+ *
21
+ * ### Возвращаемое значение
22
+ *
23
+ * Возвращает `true`, если значение является целым числом, иначе `false`.
24
+ *
25
+ * ### Примеры использования
26
+ *
27
+ * ```js
28
+ * // Проверка целых чисел
29
+ * is_int(42); // true
30
+ * is_int(0); // true
31
+ * is_int(-123); // true
32
+ *
33
+ * // Проверка дробных чисел
34
+ * is_int(3.14); // false
35
+ * is_int(-0.001); // false
36
+ *
37
+ * // Некорректные типы данных
38
+ * is_int('42'); // false (строка)
39
+ * is_int(true); // false (логическое значение)
40
+ * is_int(null); // false (null)
41
+ * is_int(undefined);// false (undefined)
42
+ *
43
+ * // Бесконечные и некорректные числовые значения
44
+ * is_int(Infinity); // false (бесконечность)
45
+ * is_int(-Infinity);// false (отрицательная бесконечность)
46
+ * is_int(NaN); // false (не число)
47
+ *
48
+ * // Проверка типа bigint
49
+ * is_int(BigInt(123456)); // false
50
+ * ```
51
+ *
52
+ * @param {any} value Значение для проверки.
53
+ * @returns {boolean} Возвращает `true`, если значение является целым числом, иначе `false`.
54
+ */
55
+ export default function is_int(value) {
56
+ return typeof value === 'number' && Number.isFinite(value) && value % 1 === 0;
57
+ }