@rogolev/value 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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
package/index.mjs ADDED
@@ -0,0 +1,37 @@
1
+ export { default as is_array } from './src/helpers/is_array.mjs';
2
+ export { default as is_bool } from './src/helpers/is_bool.mjs';
3
+ export { default as is_boolean } from './src/helpers/is_boolean.mjs';
4
+ export { default as is_function } from './src/helpers/is_function.mjs';
5
+ export { default as is_class } from './src/helpers/is_class.mjs';
6
+ export { default as is_float } from './src/helpers/is_float.mjs';
7
+ export { default as is_int } from './src/helpers/is_int.mjs';
8
+ export { default as is_integer } from './src/helpers/is_integer.mjs';
9
+ export { default as is_bigint } from './src/helpers/is_bigint.mjs';
10
+ export { default as is_null } from './src/helpers/is_null.mjs';
11
+ export { default as is_number } from './src/helpers/is_number.mjs';
12
+ export { default as is_numeric } from './src/helpers/is_numeric.mjs';
13
+ export { default as is_object } from './src/helpers/is_object.mjs';
14
+ export { default as is_string } from './src/helpers/is_string.mjs';
15
+ export { default as is_symbol } from './src/helpers/is_symbol.mjs';
16
+ export { default as is_undefined } from './src/helpers/is_undefined.mjs';
17
+ export { default as is_nan } from './src/helpers/is_nan.mjs';
18
+ export { default as is_infinity } from './src/helpers/is_infinity.mjs';
19
+ export { default as gettype } from './src/helpers/gettype.mjs';
20
+ export { default as is_scalar } from './src/helpers/is_scalar.mjs';
21
+ export { default as array } from './src/helpers/array.mjs';
22
+ export { default as is_list } from './src/helpers/is_list.mjs';
23
+ export { default as is_assoc } from './src/helpers/is_assoc.mjs';
24
+ export { default as to_array } from './src/helpers/to_array.mjs';
25
+ export { default as to_bool } from './src/helpers/to_bool.mjs';
26
+ export { default as to_boolean } from './src/helpers/to_boolean.mjs';
27
+ export { default as to_float } from './src/helpers/to_float.mjs';
28
+ export { default as to_int } from './src/helpers/to_int.mjs';
29
+ export { default as to_integer } from './src/helpers/to_integer.mjs';
30
+ export { default as to_string } from './src/helpers/to_string.mjs';
31
+ export { default as to_object } from './src/helpers/to_object.mjs';
32
+ export { default as to_list } from './src/helpers/to_list.mjs';
33
+ export { default as to_assoc } from './src/helpers/to_assoc.mjs';
34
+ export { default as empty } from './src/helpers/empty.mjs';
35
+ export { default as settype } from './src/helpers/settype.mjs';
36
+ export { default as print } from './src/helpers/print.mjs';
37
+ export { default as print_type } from './src/helpers/print_type.mjs';
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Для получения подробного объяснения каждого свойства конфигурации, посетите:
3
+ * https://jestjs.io/docs/configuration
4
+ */
5
+
6
+ /** @type {import('jest').Config} */
7
+ export default {
8
+ // Автоматически очищать вызовы mock, экземпляры, контексты и результаты перед каждым тестом
9
+ clearMocks: true,
10
+
11
+ // Среда тестирования, которая будет использоваться для тестирования
12
+ testEnvironment: 'jsdom',
13
+
14
+ // Глобальные переменные, которые должны быть доступны во всех тестовых средах
15
+ globals: {
16
+ 'ts-jest': {
17
+ tsconfig: 'tsconfig.json',
18
+ },
19
+ },
20
+
21
+ // Паттерны glob, которые Jest использует для обнаружения тестовых файлов
22
+ testMatch: ['**/__tests__/**/*.[jt]s?(x)', '**/?(*.)+(spec|test).?(m)[tj]s?(x)'],
23
+
24
+ // Карта от регулярных выражений до путей к трансформерам
25
+ transform: {
26
+ '\\.m?[jt]sx?$': 'babel-jest',
27
+ },
28
+
29
+ // Указывает, следует ли сообщать о каждом отдельном тесте во время выполнения.
30
+ verbose: true,
31
+ };
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "@rogolev/value",
3
+ "version": "0.0.1",
4
+ "description": "Библиотека, переосмысливающая типы данных и работу с ними.",
5
+ "type": "module",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/dmitry-rogolev/value.js.git"
9
+ },
10
+ "keywords": [
11
+ "rogolev",
12
+ "dmitry-rogolev",
13
+ "dmitryrogolev",
14
+ "dmitry",
15
+ "javascript",
16
+ "variables",
17
+ "data types",
18
+ "value",
19
+ "type"
20
+ ],
21
+ "author": {
22
+ "name": "Дмитрий Роголев",
23
+ "email": "drogolev@internet.ru",
24
+ "url": "https://github.com/dmitry-rogolev"
25
+ },
26
+ "license": "MIT",
27
+ "homepage": "https://github.com/dmitry-rogolev/value.js#readme",
28
+ "main": "index.mjs",
29
+ "devDependencies": {
30
+ "@babel/cli": "^7.26.4",
31
+ "@babel/core": "^7.26.0",
32
+ "@babel/preset-env": "^7.26.0",
33
+ "@eslint/js": "^9.18.0",
34
+ "core-js": "^3.40.0",
35
+ "eslint": "^9.18.0",
36
+ "eslint-config-prettier": "^9.1.0",
37
+ "eslint-plugin-prettier": "^5.2.1",
38
+ "jest": "^29.7.0",
39
+ "jest-environment-jsdom": "^29.7.0",
40
+ "prettier": "3.4.2"
41
+ },
42
+ "scripts": {
43
+ "prettier": "prettier . --write",
44
+ "eslint": "eslint",
45
+ "test": "jest"
46
+ }
47
+ }
@@ -0,0 +1,224 @@
1
+ /**
2
+ * @see https://prettier.io/docs/en/configuration.html
3
+ * @type {import("prettier").Config}
4
+ */
5
+ export default {
6
+ /**
7
+ * Добавлять точку с запятой в конце операторов.
8
+ * @default true
9
+ *
10
+ * Допустимые варианты:
11
+ *
12
+ * - `true` - Добавлять точку с запятой в конце каждого оператора.
13
+ * - `false` - Добавлять точки с запятой только в начале строк,
14
+ * которые могут привести к сбоям ASI.
15
+ */
16
+ semi: true,
17
+
18
+ /**
19
+ * Использовать одинарные кавычки вместо двойных.
20
+ * @default false
21
+ *
22
+ * Допустимые варианты:
23
+ *
24
+ * - `true` - Использовать одинарные кавычки.
25
+ * - `false` - Использовать двойные кавычки.
26
+ */
27
+ singleQuote: true,
28
+
29
+ /**
30
+ * Использовать одинарные кавычки в JSX.
31
+ * @default false
32
+ *
33
+ * Допустимые варианты:
34
+ *
35
+ * - `true` - Использовать одинарные кавычки в JSX.
36
+ * - `false` - Использовать двойные кавычки в JSX.
37
+ */
38
+ jsxSingleQuote: false,
39
+
40
+ /**
41
+ * Добавлять запятые в конце везде, где это возможно.
42
+ * @default "all"
43
+ *
44
+ * Допустимые варианты:
45
+ *
46
+ * - `none` - Без запятых в конце.
47
+ * - `es5` - Запятые в конце там, где это допустимо в ES5.
48
+ * - `all` - Запятые в конце везде, где это возможно.
49
+ */
50
+ trailingComma: 'all',
51
+
52
+ /**
53
+ * Печатать пробелы между скобками в литералах объектов.
54
+ * @default true
55
+ *
56
+ * Допустимые варианты:
57
+ *
58
+ * - `true` - Пример: { foo: bar }
59
+ * - `false` - Пример: {foo: bar}
60
+ */
61
+ bracketSpacing: true,
62
+
63
+ /**
64
+ * Разместить `>` многострочного HTML (HTML, JSX, Vue, Angular) элемента в конце последней строки, а не на отдельной строке.
65
+ * @default false
66
+ *
67
+ * Допустимые варианты:
68
+ *
69
+ * - `true` - Пример:
70
+ * <div>
71
+ * <span>Text</span></div>
72
+ * - `false` - Пример:
73
+ * <div>
74
+ * <span>Text</span>
75
+ * </div>
76
+ */
77
+ bracketSameLine: false,
78
+
79
+ /**
80
+ * Форматировать только сегмент файла.
81
+ * @default 0
82
+ */
83
+ rangeStart: 0,
84
+
85
+ /**
86
+ * Форматировать только сегмент файла.
87
+ * @default Number.POSITIVE_INFINITY
88
+ */
89
+ rangeEnd: Number.POSITIVE_INFINITY,
90
+
91
+ /**
92
+ * Ограничить форматирование только файлами с прологом.
93
+ * @default false
94
+ */
95
+ requirePragma: false,
96
+
97
+ /**
98
+ * Вставить пролог в отформатированные файлы.
99
+ * @default false
100
+ */
101
+ insertPragma: false,
102
+
103
+ /**
104
+ * Заворачивать текст в Markdown файлах.
105
+ * @default "preserve"
106
+ *
107
+ * Допустимые варианты:
108
+ *
109
+ * - `always` - Оборачивать текст, если он превышает ширину печати.
110
+ * - `never` - Разворачивать каждый блок текста в одну строку.
111
+ * - `preserve` - Ничего не делать, оставлять текст как есть.
112
+ */
113
+ proseWrap: 'always',
114
+
115
+ /**
116
+ * Включить скобки вокруг единственного параметра стрелочной функции.
117
+ * @default "always"
118
+ *
119
+ * Допустимые варианты:
120
+ *
121
+ * - `avoid` - Исключать скобки, когда это возможно.
122
+ * - `always` - Всегда включать скобки.
123
+ */
124
+ arrowParens: 'always',
125
+
126
+ /**
127
+ * Чувствительность к пробелам в HTML.
128
+ * @default "css"
129
+ *
130
+ * Допустимые варианты:
131
+ *
132
+ * - `css` - Учитывать значение по умолчанию свойства CSS display.
133
+ * - `strict` - Пробелы (или их отсутствие) вокруг всех тегов считаются значимыми.
134
+ * - `ignore` - Пробелы (или их отсутствие) вокруг всех тегов считаются незначимыми.
135
+ */
136
+ htmlWhitespaceSensitivity: 'strict',
137
+
138
+ /**
139
+ * Использовать символы конца строки.
140
+ * @default "lf"
141
+ *
142
+ * Допустимые варианты:
143
+ *
144
+ * - `auto` - Сохранять существующие окончания строк.
145
+ * - `lf` - Только Line Feed (\n).
146
+ * - `crlf` - Символы Carriage Return + Line Feed (\r\n).
147
+ * - `cr` - Только символ Carriage Return (\r).
148
+ */
149
+ endOfLine: 'crlf',
150
+
151
+ /**
152
+ * Изменить, когда свойства в объектах заключаются в кавычки.
153
+ * @default "as-needed"
154
+ *
155
+ * Допустимые варианты:
156
+ *
157
+ * - `as-needed` - Добавлять кавычки вокруг свойств объектов только там, где это необходимо.
158
+ * - `consistent` - Если хотя бы одно свойство в объекте требует кавычек, заключать в кавычки все свойства.
159
+ * - `preserve` - Сохранять использование кавычек в свойствах объектов, как в исходном коде.
160
+ */
161
+ quoteProps: 'as-needed',
162
+
163
+ /**
164
+ * Отступы для тегов script и style в файлах Vue.
165
+ * @default false
166
+ *
167
+ * Допустимые варианты:
168
+ *
169
+ * - `true` - Делать отступы для тегов script и style в файлах Vue.
170
+ * - `false` - Не делать отступы для тегов script и style в файлах Vue.
171
+ */
172
+ vueIndentScriptAndStyle: true,
173
+
174
+ /**
175
+ * Форматирование встроенного языка.
176
+ * @default "auto"
177
+ *
178
+ * Допустимые варианты:
179
+ *
180
+ * - `auto` - Форматировать встроенный код, если Prettier может автоматически его определить.
181
+ * - `off` - Никогда не форматировать встроенный код автоматически.
182
+ */
183
+ embeddedLanguageFormatting: 'auto',
184
+
185
+ /**
186
+ * Один атрибут на строку в HTML, Vue и JSX.
187
+ * @default false
188
+ *
189
+ * Допустимые варианты:
190
+ *
191
+ * - `true` - Принуждать использовать один атрибут на строку.
192
+ * - `false` - Не принуждать использовать один атрибут на строку.
193
+ */
194
+ singleAttributePerLine: true,
195
+
196
+ /**
197
+ * Экспериментальные тернарные операторы.
198
+ * @default false
199
+ *
200
+ * Допустимые варианты:
201
+ *
202
+ * - `true` - Использовать любопытные тернарные операторы, с вопросительным знаком после условия.
203
+ * - `false` - Сохранить поведение тернарных операторов по умолчанию.
204
+ */
205
+ experimentalTernaries: true,
206
+
207
+ /**
208
+ * Максимальная длина строки.
209
+ * @default 80
210
+ */
211
+ printWidth: 100,
212
+
213
+ /**
214
+ * Ширина табуляции в пробелах.
215
+ * @default 2
216
+ */
217
+ tabWidth: 4,
218
+
219
+ /**
220
+ * Использовать пробелы вместо табуляции.
221
+ * @default false
222
+ */
223
+ useTabs: false,
224
+ };
@@ -0,0 +1,107 @@
1
+ import is_array from './is_array.mjs';
2
+ import is_assoc from './is_assoc.mjs';
3
+
4
+ /**
5
+ * Создаёт массив из переданных значений, обрабатывая ассоциативные массивы (объекты с ключами).
6
+ *
7
+ * ### Параметры
8
+ *
9
+ * - `values` {...any}
10
+ *
11
+ * Один или несколько элементов, которые могут быть массивами, объектами или другими значениями.
12
+ *
13
+ * ### Описание
14
+ *
15
+ * Функция принимает произвольное количество аргументов и возвращает массив, содержащий переданные значения.
16
+ * Если среди переданных значений есть ассоциативные массивы (объекты, не являющиеся массивами и с ненулевым прототипом),
17
+ * они преобразуются:
18
+ *
19
+ * - Создаётся новый объект без прототипа.
20
+ * - Добавляются все свойства исходного объекта.
21
+ * - Добавляется итератор, позволяющий использовать объект в цикле `for-of` для получения пар `[ключ, значение]`.
22
+ *
23
+ * Если передано только одно значение, и это массив, функция возвращает его напрямую.
24
+ *
25
+ * ### Возвращаемое значение
26
+ *
27
+ * Массив, содержащий переданные значения, с преобразованием ассоциативных массивов.
28
+ * Если передано одно значение и это массив, возвращается он сам.
29
+ *
30
+ * ### Примеры использования
31
+ *
32
+ * 1. Простые массивы:
33
+ *
34
+ * ```js
35
+ * const result = array([1, 2, 3]);
36
+ * console.log(result); // [1, 2, 3]
37
+ * ```
38
+ *
39
+ * 2. Ассоциативные массивы (объекты с ключами и значениями):
40
+ *
41
+ * ```js
42
+ * const result = array({ foo: 'bar', baz: 42 });
43
+ * for (const [key, value] of result[0]) {
44
+ * console.log(key, value);
45
+ * }
46
+ * // Вывод:
47
+ * // foo bar
48
+ * // baz 42
49
+ * ```
50
+ *
51
+ * 3. Смешанные значения:
52
+ *
53
+ * ```js
54
+ * const result = array([1, 2, 3], { foo: 'bar' }, 'hello');
55
+ * console.log(result);
56
+ * // Вывод: [[1, 2, 3], { foo: 'bar' }, 'hello']
57
+ * ```
58
+ *
59
+ * 4. Объекты, созданные без прототипа:
60
+ *
61
+ * ```js
62
+ * const noProtoObject = Object.create(null);
63
+ * noProtoObject.foo = 'bar';
64
+ * const result = array(noProtoObject);
65
+ * for (const [key, value] of result[0]) {
66
+ * console.log(key, value);
67
+ * }
68
+ * // Вывод:
69
+ * // foo bar
70
+ * ```
71
+ *
72
+ * @param {...any} values - Один или несколько элементов, которые могут быть массивами, объектами или другими значениями.
73
+ * @returns {Array|Object} Массив, содержащий переданные значения, с преобразованием ассоциативных массивов.
74
+ * Если передано одно значение и это массив, возвращается он сам.
75
+ */
76
+ export default function array(...values) {
77
+ const result = [];
78
+
79
+ for (const value of values) {
80
+ if (is_assoc(value)) {
81
+ const assoc = Object.create(null);
82
+
83
+ Object.assign(assoc, value);
84
+
85
+ Object.defineProperty(assoc, Symbol.iterator, {
86
+ enumerable: false,
87
+ writable: true,
88
+ configurable: true,
89
+ *value() {
90
+ for (const key in this) {
91
+ yield [key, this[key]];
92
+ }
93
+ },
94
+ });
95
+
96
+ result.push(assoc);
97
+ } else {
98
+ result.push(value);
99
+ }
100
+ }
101
+
102
+ if (result.length === 1 && is_array(result[0])) {
103
+ return result[0];
104
+ }
105
+
106
+ return result;
107
+ }
@@ -0,0 +1,70 @@
1
+ import to_bool from './to_bool.mjs';
2
+
3
+ /**
4
+ * Проверяет, является ли переменная пустой.
5
+ *
6
+ * ### Описание
7
+ *
8
+ * Функция `empty` используется для проверки, является ли переменная пустой. Пустыми считаются значения `null`, `undefined`, пустая строка, `0`, `false`, пустой массив и пустой объект.
9
+ *
10
+ * ### Параметры
11
+ *
12
+ * - `value` (any)
13
+ * Переменная, которую необходимо проверить на пустоту.
14
+ *
15
+ * ### Возвращаемое значение
16
+ *
17
+ * Возвращает `true`, если переменная пустая, и `false` в противном случае.
18
+ *
19
+ * ### Примеры использования
20
+ *
21
+ * 1. Проверка пустых значений:
22
+ *
23
+ * ```js
24
+ * const result1 = empty(null);
25
+ * // Результат: true
26
+ *
27
+ * const result2 = empty(undefined);
28
+ * // Результат: true
29
+ *
30
+ * const result3 = empty('');
31
+ * // Результат: true
32
+ *
33
+ * const result4 = empty(0);
34
+ * // Результат: true
35
+ *
36
+ * const result5 = empty(false);
37
+ * // Результат: true
38
+ *
39
+ * const result6 = empty([]);
40
+ * // Результат: true
41
+ *
42
+ * const result7 = empty({});
43
+ * // Результат: true
44
+ * ```
45
+ *
46
+ * 2. Проверка непустых значений:
47
+ *
48
+ * ```js
49
+ * const result1 = empty('example');
50
+ * // Результат: false
51
+ *
52
+ * const result2 = empty(123);
53
+ * // Результат: false
54
+ *
55
+ * const result3 = empty(true);
56
+ * // Результат: false
57
+ *
58
+ * const result4 = empty([1, 2, 3]);
59
+ * // Результат: false
60
+ *
61
+ * const result5 = empty({ key: 'value' });
62
+ * // Результат: false
63
+ * ```
64
+ *
65
+ * @param {any} value Переменная, которую необходимо проверить на пустоту.
66
+ * @returns {boolean} Возвращает `true`, если переменная пустая, и `false` в противном случае.
67
+ */
68
+ export default function empty(value) {
69
+ return !to_bool(value);
70
+ }
@@ -0,0 +1,133 @@
1
+ import is_array from './is_array.mjs';
2
+ import is_class from './is_class.mjs';
3
+ import is_float from './is_float.mjs';
4
+ import is_infinity from './is_infinity.mjs';
5
+ import is_int from './is_int.mjs';
6
+ import is_nan from './is_nan.mjs';
7
+ import is_null from './is_null.mjs';
8
+ import is_object from './is_object.mjs';
9
+ import is_bigint from './is_bigint.mjs';
10
+ import is_undefined from './is_undefined.mjs';
11
+ import is_bool from './is_bool.mjs';
12
+ import is_string from './is_string.mjs';
13
+ import is_symbol from './is_symbol.mjs';
14
+ import is_function from './is_function.mjs';
15
+
16
+ /**
17
+ * Определяет тип переданного значения.
18
+ *
19
+ * ### Параметры
20
+ *
21
+ * - `value` (any)
22
+ * Значение, тип которого необходимо определить.
23
+ *
24
+ * ### Описание
25
+ *
26
+ * Функция `gettype` определяет тип переданного значения, используя различные проверки.
27
+ *
28
+ * Она выполняет следующие проверки:
29
+ *
30
+ * 1. **Null**: Проверяет, является ли значение `null`.
31
+ * 2. **NaN**: Проверяет, является ли значение `NaN`.
32
+ * 3. **Undefined**: Проверяет, является ли значение `undefined`.
33
+ * 4. **Infinity**: Проверяет, является ли значение бесконечностью.
34
+ * 5. **Boolean**: Проверяет, является ли значение логическим.
35
+ * 6. **Integer**: Проверяет, является ли значение целым числом.
36
+ * 7. **BigInt**: Проверяет, является ли значение типом BigInt.
37
+ * 8. **Float**: Проверяет, является ли значение числом с плавающей точкой.
38
+ * 9. **String**: Проверяет, является ли значение строкой.
39
+ * 10. **Symbol**: Проверяет, является ли значение символом.
40
+ * 11. **Class**: Проверяет, является ли значение классом.
41
+ * 12. **Function**: Проверяет, является ли значение функцией.
42
+ * 13. **Array**: Проверяет, является ли значение массивом.
43
+ * 14. **Object**: Проверяет, является ли значение объектом.
44
+ *
45
+ * Если значение не соответствует ни одному из этих типов, функция возвращает результат `typeof value`.
46
+ *
47
+ * ### Возвращаемое значение
48
+ *
49
+ * Возвращает строку, представляющую тип значения.
50
+ *
51
+ * ### Примеры использования
52
+ *
53
+ * ```js
54
+ * class MyClass {}
55
+ *
56
+ * gettype(null); // "null"
57
+ * gettype(NaN); // "NaN"
58
+ * gettype(undefined); // "undefined"
59
+ * gettype(Infinity); // "infinity"
60
+ * gettype(true); // "boolean"
61
+ * gettype(42); // "integer"
62
+ * gettype(BigInt(123456)); // "bigint"
63
+ * gettype(3.14); // "float"
64
+ * gettype('hello'); // "string"
65
+ * gettype(Symbol('symbol')); // "symbol"
66
+ * gettype(MyClass); // "class"
67
+ * gettype(() => {}); // "function"
68
+ * gettype([]); // "array"
69
+ * gettype(new MyClass()); // "object"
70
+ * ```
71
+ *
72
+ * @param {any} value Значение, тип которого необходимо определить.
73
+ * @returns {string} Возвращает строку, представляющую тип значения.
74
+ */
75
+ export default function gettype(value) {
76
+ if (is_null(value)) {
77
+ return 'null';
78
+ }
79
+
80
+ if (is_nan(value)) {
81
+ return 'NaN';
82
+ }
83
+
84
+ if (is_undefined(value)) {
85
+ return 'undefined';
86
+ }
87
+
88
+ if (is_infinity(value)) {
89
+ return 'infinity';
90
+ }
91
+
92
+ if (is_bool(value)) {
93
+ return 'boolean';
94
+ }
95
+
96
+ if (is_int(value)) {
97
+ return 'integer';
98
+ }
99
+
100
+ if (is_bigint(value)) {
101
+ return 'bigint';
102
+ }
103
+
104
+ if (is_float(value)) {
105
+ return 'float';
106
+ }
107
+
108
+ if (is_string(value)) {
109
+ return 'string';
110
+ }
111
+
112
+ if (is_symbol(value)) {
113
+ return 'symbol';
114
+ }
115
+
116
+ if (is_class(value)) {
117
+ return 'class';
118
+ }
119
+
120
+ if (is_function(value)) {
121
+ return 'function';
122
+ }
123
+
124
+ if (is_array(value)) {
125
+ return 'array';
126
+ }
127
+
128
+ if (is_object(value)) {
129
+ return 'object';
130
+ }
131
+
132
+ return typeof value;
133
+ }