@dayme/alien-utils 0.1.0
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.
- package/README.md +98 -0
- package/dist/bimap/bimap.d.ts +44 -0
- package/dist/bimap/bimap.d.ts.map +1 -0
- package/dist/bimap/index.d.ts +4 -0
- package/dist/bimap/index.d.ts.map +1 -0
- package/dist/dispatch/dispatch.d.ts +17 -0
- package/dist/dispatch/dispatch.d.ts.map +1 -0
- package/dist/dispatch/index.d.ts +2 -0
- package/dist/dispatch/index.d.ts.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1068 -0
- package/dist/iterator/index.d.ts +2 -0
- package/dist/iterator/index.d.ts.map +1 -0
- package/dist/iterator/iterator.d.ts +821 -0
- package/dist/iterator/iterator.d.ts.map +1 -0
- package/dist/match/index.d.ts +2 -0
- package/dist/match/index.d.ts.map +1 -0
- package/dist/match/match.d.ts +17 -0
- package/dist/match/match.d.ts.map +1 -0
- package/dist/option/index.d.ts +3 -0
- package/dist/option/index.d.ts.map +1 -0
- package/dist/option/option.d.ts +274 -0
- package/dist/option/option.d.ts.map +1 -0
- package/dist/queue/index.d.ts +2 -0
- package/dist/queue/index.d.ts.map +1 -0
- package/dist/queue/queue.d.ts +18 -0
- package/dist/queue/queue.d.ts.map +1 -0
- package/dist/result/index.d.ts +3 -0
- package/dist/result/index.d.ts.map +1 -0
- package/dist/result/result.d.ts +343 -0
- package/dist/result/result.d.ts.map +1 -0
- package/dist/stack/index.d.ts +2 -0
- package/dist/stack/index.d.ts.map +1 -0
- package/dist/stack/stack.d.ts +13 -0
- package/dist/stack/stack.d.ts.map +1 -0
- package/package.json +70 -0
|
@@ -0,0 +1,821 @@
|
|
|
1
|
+
import { Option } from '../option/option';
|
|
2
|
+
/**
|
|
3
|
+
* Типы операций в pipeline
|
|
4
|
+
*/
|
|
5
|
+
type OpType = "map" | "filter" | "flatMap" | "flatten" | "take" | "takeWhile" | "skip" | "skipWhile" | "enumerate" | "zip" | "chain" | "stepBy" | "inspect" | "unique" | "uniqueBy";
|
|
6
|
+
/**
|
|
7
|
+
* Операция в pipeline
|
|
8
|
+
*/
|
|
9
|
+
interface Op {
|
|
10
|
+
type: OpType;
|
|
11
|
+
fn: Function;
|
|
12
|
+
param?: unknown;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Lazy iterator в стиле Rust с оптимизированным pipeline-based подходом.
|
|
16
|
+
* Все промежуточные операции (map, filter, take и т.д.) не создают промежуточных массивов,
|
|
17
|
+
* а формируют цепочку трансформаций, которая применяется при финальном потреблении.
|
|
18
|
+
*
|
|
19
|
+
* Оптимизации:
|
|
20
|
+
* - Pipeline-based архитектура вместо вложенных итераторов
|
|
21
|
+
* - Единый цикл выполнения для всех операций
|
|
22
|
+
* - Fast paths для частых случаев
|
|
23
|
+
* - Минимизация создания closures и объектов
|
|
24
|
+
* - Оптимизация для массивов с прямым доступом
|
|
25
|
+
*
|
|
26
|
+
* @template T - Тип элементов в итераторе
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```ts
|
|
30
|
+
* const result = Iter.from([1, 2, 3, 4, 5])
|
|
31
|
+
* .map(x => x * 2)
|
|
32
|
+
* .filter(x => x > 5)
|
|
33
|
+
* .take(2)
|
|
34
|
+
* .collect();
|
|
35
|
+
* // [6, 8] - выполняется один проход, нет промежуточных массивов
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export declare class Iter<T> implements Iterable<T> {
|
|
39
|
+
/**
|
|
40
|
+
* Исходный итерируемый объект
|
|
41
|
+
*/
|
|
42
|
+
private readonly source;
|
|
43
|
+
/**
|
|
44
|
+
* Массив операций pipeline
|
|
45
|
+
*/
|
|
46
|
+
private readonly ops;
|
|
47
|
+
/**
|
|
48
|
+
* Битовая маска операций для оптимизации
|
|
49
|
+
*/
|
|
50
|
+
private readonly opsMask;
|
|
51
|
+
/**
|
|
52
|
+
* Создаёт новый Iter из итерируемого объекта.
|
|
53
|
+
*
|
|
54
|
+
* @param source - Исходный итерируемый объект
|
|
55
|
+
* @param ops - Массив операций pipeline (внутреннее использование)
|
|
56
|
+
*/
|
|
57
|
+
constructor(source: Iterable<T>, ops?: Op[], opsMask?: number);
|
|
58
|
+
/**
|
|
59
|
+
* Проверяет, является ли итерируемый объект массивом (для оптимизаций).
|
|
60
|
+
*/
|
|
61
|
+
private get isArray();
|
|
62
|
+
/**
|
|
63
|
+
* Проверяет, является ли источник typed array для SIMD-оптимизаций.
|
|
64
|
+
*/
|
|
65
|
+
private get isTypedArray();
|
|
66
|
+
/**
|
|
67
|
+
* Создаёт Iter из итерируемого объекта.
|
|
68
|
+
*
|
|
69
|
+
* @template T - Тип элементов
|
|
70
|
+
* @param iterable - Итерируемый объект
|
|
71
|
+
* @returns Новый Iter
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```ts
|
|
75
|
+
* const iter = Iter.from([1, 2, 3]);
|
|
76
|
+
* const iter2 = Iter.from(new Set([1, 2, 3]));
|
|
77
|
+
* const iter3 = Iter.from("abc"); // ['a', 'b', 'c']
|
|
78
|
+
* ```
|
|
79
|
+
*/
|
|
80
|
+
static from<T>(iterable: Iterable<T>): Iter<T>;
|
|
81
|
+
/**
|
|
82
|
+
* Создаёт Iter из диапазона чисел [start, end).
|
|
83
|
+
*
|
|
84
|
+
* @param start - Начальное значение (включительно)
|
|
85
|
+
* @param end - Конечное значение (не включительно)
|
|
86
|
+
* @param step - Шаг (по умолчанию 1)
|
|
87
|
+
* @returns Новый Iter с числами
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```ts
|
|
91
|
+
* Iter.range(0, 5).collect(); // [0, 1, 2, 3, 4]
|
|
92
|
+
* Iter.range(0, 10, 2).collect(); // [0, 2, 4, 6, 8]
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
static range(start: number, end: number, step?: number): Iter<number>;
|
|
96
|
+
/**
|
|
97
|
+
* Создаёт бесконечный Iter, который повторяет значение.
|
|
98
|
+
*
|
|
99
|
+
* @template T - Тип значения
|
|
100
|
+
* @param value - Значение для повторения
|
|
101
|
+
* @returns Бесконечный Iter
|
|
102
|
+
*
|
|
103
|
+
* @example
|
|
104
|
+
* ```ts
|
|
105
|
+
* Iter.repeat(42).take(3).collect(); // [42, 42, 42]
|
|
106
|
+
* ```
|
|
107
|
+
*/
|
|
108
|
+
static repeat<T>(value: T): Iter<T>;
|
|
109
|
+
/**
|
|
110
|
+
* Создаёт бесконечный Iter, генерируя значения функцией.
|
|
111
|
+
*
|
|
112
|
+
* @template T - Тип значений
|
|
113
|
+
* @param fn - Функция генерации значений
|
|
114
|
+
* @returns Бесконечный Iter
|
|
115
|
+
*
|
|
116
|
+
* @example
|
|
117
|
+
* ```ts
|
|
118
|
+
* let n = 0;
|
|
119
|
+
* Iter.generate(() => n++).take(5).collect(); // [0, 1, 2, 3, 4]
|
|
120
|
+
* ```
|
|
121
|
+
*/
|
|
122
|
+
static generate<T>(fn: () => T): Iter<T>;
|
|
123
|
+
/**
|
|
124
|
+
* Создаёт пустой Iter.
|
|
125
|
+
*
|
|
126
|
+
* @template T - Тип элементов
|
|
127
|
+
* @returns Пустой Iter
|
|
128
|
+
*
|
|
129
|
+
* @example
|
|
130
|
+
* ```ts
|
|
131
|
+
* Iter.empty<number>().collect(); // []
|
|
132
|
+
* ```
|
|
133
|
+
*/
|
|
134
|
+
static empty<T>(): Iter<T>;
|
|
135
|
+
/**
|
|
136
|
+
* Создаёт Iter из одного элемента.
|
|
137
|
+
*
|
|
138
|
+
* @template T - Тип элемента
|
|
139
|
+
* @param value - Значение
|
|
140
|
+
* @returns Iter с одним элементом
|
|
141
|
+
*
|
|
142
|
+
* @example
|
|
143
|
+
* ```ts
|
|
144
|
+
* Iter.once(42).collect(); // [42]
|
|
145
|
+
* ```
|
|
146
|
+
*/
|
|
147
|
+
static once<T>(value: T): Iter<T>;
|
|
148
|
+
/**
|
|
149
|
+
* Реализация Symbol.iterator для поддержки for..of и других итераций.
|
|
150
|
+
* Выполняет все операции pipeline в едином цикле.
|
|
151
|
+
*
|
|
152
|
+
* @returns Iterator
|
|
153
|
+
*/
|
|
154
|
+
[Symbol.iterator](): Iterator<T>;
|
|
155
|
+
/**
|
|
156
|
+
* Выполняет все операции pipeline в едином цикле.
|
|
157
|
+
* Это ключевая оптимизация - все операции выполняются за один проход.
|
|
158
|
+
*
|
|
159
|
+
* Оптимизации на основе битовой маски операций:
|
|
160
|
+
* - Отсутствие Filter: пропускаем проверки фильтрации
|
|
161
|
+
* - Fast path для Map-only: без фильтрации и сложных операций
|
|
162
|
+
* - Уменьшение количества ветвлений в горячем коде
|
|
163
|
+
*/
|
|
164
|
+
private executePipeline;
|
|
165
|
+
/**
|
|
166
|
+
* Fast path для pipeline с только Map операциями.
|
|
167
|
+
* Это самый частый сценарий в реальном коде.
|
|
168
|
+
* Оптимизация: никаких проверок фильтрации, только трансформация.
|
|
169
|
+
*/
|
|
170
|
+
private executeMapOnlyPipeline;
|
|
171
|
+
/**
|
|
172
|
+
* Применяет функцию к каждому элементу (ленивая операция).
|
|
173
|
+
*
|
|
174
|
+
* @template U - Тип результата
|
|
175
|
+
* @param fn - Функция трансформации
|
|
176
|
+
* @returns Новый Iter с трансформированными элементами
|
|
177
|
+
*
|
|
178
|
+
* @example
|
|
179
|
+
* ```ts
|
|
180
|
+
* Iter.from([1, 2, 3])
|
|
181
|
+
* .map(x => x * 2)
|
|
182
|
+
* .collect(); // [2, 4, 6]
|
|
183
|
+
* ```
|
|
184
|
+
*/
|
|
185
|
+
map<U>(fn: (value: T, index: number) => U): Iter<U>;
|
|
186
|
+
/**
|
|
187
|
+
* Фильтрует элементы по предикату (ленивая операция).
|
|
188
|
+
*
|
|
189
|
+
* @param predicate - Функция-предикат
|
|
190
|
+
* @returns Новый Iter только с элементами, прошедшими фильтр
|
|
191
|
+
*
|
|
192
|
+
* @example
|
|
193
|
+
* ```ts
|
|
194
|
+
* Iter.from([1, 2, 3, 4])
|
|
195
|
+
* .filter(x => x % 2 === 0)
|
|
196
|
+
* .collect(); // [2, 4]
|
|
197
|
+
* ```
|
|
198
|
+
*/
|
|
199
|
+
filter(predicate: (value: T, index: number) => boolean): Iter<T>;
|
|
200
|
+
/**
|
|
201
|
+
* Применяет функцию и разворачивает результат (ленивая операция).
|
|
202
|
+
* Аналог flatMap в JS или flat_map в Rust.
|
|
203
|
+
*
|
|
204
|
+
* @template U - Тип элементов результата
|
|
205
|
+
* @param fn - Функция, возвращающая итерируемый объект
|
|
206
|
+
* @returns Новый Iter с развёрнутыми элементами
|
|
207
|
+
*
|
|
208
|
+
* @example
|
|
209
|
+
* ```ts
|
|
210
|
+
* Iter.from([1, 2, 3])
|
|
211
|
+
* .flatMap(x => [x, x * 10])
|
|
212
|
+
* .collect(); // [1, 10, 2, 20, 3, 30]
|
|
213
|
+
* ```
|
|
214
|
+
*/
|
|
215
|
+
flatMap<U>(fn: (value: T, index: number) => Iterable<U>): Iter<U>;
|
|
216
|
+
/**
|
|
217
|
+
* Развёртывает вложенные итераторы на один уровень (ленивая операция).
|
|
218
|
+
*
|
|
219
|
+
* @template U - Тип элементов внутри T
|
|
220
|
+
* @returns Новый Iter с развёрнутыми элементами
|
|
221
|
+
*
|
|
222
|
+
* @example
|
|
223
|
+
* ```ts
|
|
224
|
+
* Iter.from([[1, 2], [3, 4]])
|
|
225
|
+
* .flatten()
|
|
226
|
+
* .collect(); // [1, 2, 3, 4]
|
|
227
|
+
* ```
|
|
228
|
+
*/
|
|
229
|
+
flatten<U>(this: Iter<Iterable<U>>): Iter<U>;
|
|
230
|
+
/**
|
|
231
|
+
* Берёт первые n элементов (ленивая операция).
|
|
232
|
+
*
|
|
233
|
+
* @param n - Количество элементов
|
|
234
|
+
* @returns Новый Iter с первыми n элементами
|
|
235
|
+
*
|
|
236
|
+
* @example
|
|
237
|
+
* ```ts
|
|
238
|
+
* Iter.from([1, 2, 3, 4, 5])
|
|
239
|
+
* .take(3)
|
|
240
|
+
* .collect(); // [1, 2, 3]
|
|
241
|
+
* ```
|
|
242
|
+
*/
|
|
243
|
+
take(n: number): Iter<T>;
|
|
244
|
+
/**
|
|
245
|
+
* Берёт элементы пока предикат возвращает true (ленивая операция).
|
|
246
|
+
*
|
|
247
|
+
* @param predicate - Функция-предикат
|
|
248
|
+
* @returns Новый Iter с элементами до первого false
|
|
249
|
+
*
|
|
250
|
+
* @example
|
|
251
|
+
* ```ts
|
|
252
|
+
* Iter.from([1, 2, 3, 4, 1, 2])
|
|
253
|
+
* .takeWhile(x => x < 4)
|
|
254
|
+
* .collect(); // [1, 2, 3]
|
|
255
|
+
* ```
|
|
256
|
+
*/
|
|
257
|
+
takeWhile(predicate: (value: T, index: number) => boolean): Iter<T>;
|
|
258
|
+
/**
|
|
259
|
+
* Пропускает первые n элементов (ленивая операция).
|
|
260
|
+
*
|
|
261
|
+
* @param n - Количество элементов для пропуска
|
|
262
|
+
* @returns Новый Iter без первых n элементов
|
|
263
|
+
*
|
|
264
|
+
* @example
|
|
265
|
+
* ```ts
|
|
266
|
+
* Iter.from([1, 2, 3, 4, 5])
|
|
267
|
+
* .skip(2)
|
|
268
|
+
* .collect(); // [3, 4, 5]
|
|
269
|
+
* ```
|
|
270
|
+
*/
|
|
271
|
+
skip(n: number): Iter<T>;
|
|
272
|
+
/**
|
|
273
|
+
* Пропускает элементы пока предикат возвращает true (ленивая операция).
|
|
274
|
+
*
|
|
275
|
+
* @param predicate - Функция-предикат
|
|
276
|
+
* @returns Новый Iter без элементов до первого false
|
|
277
|
+
*
|
|
278
|
+
* @example
|
|
279
|
+
* ```ts
|
|
280
|
+
* Iter.from([1, 2, 3, 4, 1, 2])
|
|
281
|
+
* .skipWhile(x => x < 3)
|
|
282
|
+
* .collect(); // [3, 4, 1, 2]
|
|
283
|
+
* ```
|
|
284
|
+
*/
|
|
285
|
+
skipWhile(predicate: (value: T, index: number) => boolean): Iter<T>;
|
|
286
|
+
/**
|
|
287
|
+
* Добавляет индекс к каждому элементу (ленивая операция).
|
|
288
|
+
*
|
|
289
|
+
* @returns Новый Iter с кортежами [индекс, значение]
|
|
290
|
+
*
|
|
291
|
+
* @example
|
|
292
|
+
* ```ts
|
|
293
|
+
* Iter.from(['a', 'b', 'c'])
|
|
294
|
+
* .enumerate()
|
|
295
|
+
* .collect(); // [[0, 'a'], [1, 'b'], [2, 'c']]
|
|
296
|
+
* ```
|
|
297
|
+
*/
|
|
298
|
+
enumerate(): Iter<[number, T]>;
|
|
299
|
+
/**
|
|
300
|
+
* Объединяет два итератора в пары (ленивая операция).
|
|
301
|
+
* Останавливается когда любой из итераторов заканчивается.
|
|
302
|
+
*
|
|
303
|
+
* @template U - Тип элементов второго итератора
|
|
304
|
+
* @param other - Второй итератор
|
|
305
|
+
* @returns Новый Iter с кортежами
|
|
306
|
+
*
|
|
307
|
+
* @example
|
|
308
|
+
* ```ts
|
|
309
|
+
* Iter.from([1, 2, 3])
|
|
310
|
+
* .zip(['a', 'b', 'c'])
|
|
311
|
+
* .collect(); // [[1, 'a'], [2, 'b'], [3, 'c']]
|
|
312
|
+
* ```
|
|
313
|
+
*/
|
|
314
|
+
zip<U>(other: Iterable<U>): Iter<[T, U]>;
|
|
315
|
+
/**
|
|
316
|
+
* Соединяет этот итератор с другим (ленивая операция).
|
|
317
|
+
*
|
|
318
|
+
* @param other - Второй итератор
|
|
319
|
+
* @returns Новый Iter с элементами обоих итераторов
|
|
320
|
+
*
|
|
321
|
+
* @example
|
|
322
|
+
* ```ts
|
|
323
|
+
* Iter.from([1, 2])
|
|
324
|
+
* .chain([3, 4])
|
|
325
|
+
* .collect(); // [1, 2, 3, 4]
|
|
326
|
+
* ```
|
|
327
|
+
*/
|
|
328
|
+
chain(other: Iterable<T>): Iter<T>;
|
|
329
|
+
/**
|
|
330
|
+
* Берёт каждый n-ный элемент (ленивая операция).
|
|
331
|
+
*
|
|
332
|
+
* @param step - Шаг
|
|
333
|
+
* @returns Новый Iter с каждым n-ным элементом
|
|
334
|
+
*
|
|
335
|
+
* @example
|
|
336
|
+
* ```ts
|
|
337
|
+
* Iter.from([1, 2, 3, 4, 5, 6])
|
|
338
|
+
* .stepBy(2)
|
|
339
|
+
* .collect(); // [1, 3, 5]
|
|
340
|
+
* ```
|
|
341
|
+
*/
|
|
342
|
+
stepBy(step: number): Iter<T>;
|
|
343
|
+
/**
|
|
344
|
+
* Выполняет действие для каждого элемента без изменения (ленивая операция).
|
|
345
|
+
* Полезно для отладки или побочных эффектов.
|
|
346
|
+
*
|
|
347
|
+
* @param fn - Функция для выполнения
|
|
348
|
+
* @returns Тот же Iter
|
|
349
|
+
*
|
|
350
|
+
* @example
|
|
351
|
+
* ```ts
|
|
352
|
+
* Iter.from([1, 2, 3])
|
|
353
|
+
* .inspect(x => console.log('processing:', x))
|
|
354
|
+
* .map(x => x * 2)
|
|
355
|
+
* .collect();
|
|
356
|
+
* ```
|
|
357
|
+
*/
|
|
358
|
+
inspect(fn: (value: T, index: number) => void): Iter<T>;
|
|
359
|
+
/**
|
|
360
|
+
* Удаляет дубликаты (ленивая операция).
|
|
361
|
+
* Использует Set для отслеживания уникальности.
|
|
362
|
+
*
|
|
363
|
+
* @returns Новый Iter без дубликатов
|
|
364
|
+
*
|
|
365
|
+
* @example
|
|
366
|
+
* ```ts
|
|
367
|
+
* Iter.from([1, 2, 2, 3, 1, 4])
|
|
368
|
+
* .unique()
|
|
369
|
+
* .collect(); // [1, 2, 3, 4]
|
|
370
|
+
* ```
|
|
371
|
+
*/
|
|
372
|
+
unique(): Iter<T>;
|
|
373
|
+
/**
|
|
374
|
+
* Удаляет дубликаты по ключу (ленивая операция).
|
|
375
|
+
*
|
|
376
|
+
* @template K - Тип ключа
|
|
377
|
+
* @param keyFn - Функция получения ключа
|
|
378
|
+
* @returns Новый Iter без дубликатов по ключу
|
|
379
|
+
*
|
|
380
|
+
* @example
|
|
381
|
+
* ```ts
|
|
382
|
+
* Iter.from([{id: 1, name: 'A'}, {id: 1, name: 'B'}, {id: 2, name: 'C'}])
|
|
383
|
+
* .uniqueBy(obj => obj.id)
|
|
384
|
+
* .collect(); // [{id: 1, name: 'A'}, {id: 2, name: 'C'}]
|
|
385
|
+
* ```
|
|
386
|
+
*/
|
|
387
|
+
uniqueBy<K>(keyFn: (value: T) => K): Iter<T>;
|
|
388
|
+
/**
|
|
389
|
+
* Собирает все элементы в массив (потребляющая операция).
|
|
390
|
+
*
|
|
391
|
+
* @returns Массив со всеми элементами
|
|
392
|
+
*
|
|
393
|
+
* @example
|
|
394
|
+
* ```ts
|
|
395
|
+
* const arr = Iter.from([1, 2, 3]).collect();
|
|
396
|
+
* ```
|
|
397
|
+
*/
|
|
398
|
+
collect(): T[];
|
|
399
|
+
/**
|
|
400
|
+
* Fast path для typed array с только map операциями.
|
|
401
|
+
* Прямой доступ без iterator overhead.
|
|
402
|
+
*/
|
|
403
|
+
private collectTypedArrayMapOnly;
|
|
404
|
+
/**
|
|
405
|
+
* Свёртывает итератор в одно значение слева направо (потребляющая операция).
|
|
406
|
+
* Аналог reduce в JS или fold в Rust.
|
|
407
|
+
*
|
|
408
|
+
* @template U - Тип аккумулятора
|
|
409
|
+
* @param initial - Начальное значение аккумулятора
|
|
410
|
+
* @param fn - Функция свёртки
|
|
411
|
+
* @returns Финальное значение аккумулятора
|
|
412
|
+
*
|
|
413
|
+
* @example
|
|
414
|
+
* ```ts
|
|
415
|
+
* const sum = Iter.from([1, 2, 3, 4])
|
|
416
|
+
* .fold(0, (acc, x) => acc + x); // 10
|
|
417
|
+
* ```
|
|
418
|
+
*/
|
|
419
|
+
fold<U>(initial: U, fn: (acc: U, value: T, index: number) => U): U;
|
|
420
|
+
/**
|
|
421
|
+
* Свёртывает итератор справа налево (потребляющая операция).
|
|
422
|
+
* Требует полной материализации в память.
|
|
423
|
+
*
|
|
424
|
+
* @template U - Тип аккумулятора
|
|
425
|
+
* @param initial - Начальное значение аккумулятора
|
|
426
|
+
* @param fn - Функция свёртки
|
|
427
|
+
* @returns Финальное значение аккумулятора
|
|
428
|
+
*
|
|
429
|
+
* @example
|
|
430
|
+
* ```ts
|
|
431
|
+
* const result = Iter.from(['a', 'b', 'c'])
|
|
432
|
+
* .foldRight('', (acc, x) => acc + x); // "cba"
|
|
433
|
+
* ```
|
|
434
|
+
*/
|
|
435
|
+
foldRight<U>(initial: U, fn: (acc: U, value: T, index: number) => U): U;
|
|
436
|
+
/**
|
|
437
|
+
* Свёртывает непустой итератор, используя первый элемент как начальное значение.
|
|
438
|
+
* Возвращает None если итератор пустой.
|
|
439
|
+
*
|
|
440
|
+
* @param fn - Функция свёртки
|
|
441
|
+
* @returns Option со значением или None
|
|
442
|
+
*
|
|
443
|
+
* @example
|
|
444
|
+
* ```ts
|
|
445
|
+
* Iter.from([1, 2, 3, 4])
|
|
446
|
+
* .reduce((acc, x) => acc + x); // Some(10)
|
|
447
|
+
* Iter.empty<number>()
|
|
448
|
+
* .reduce((acc, x) => acc + x); // None
|
|
449
|
+
* ```
|
|
450
|
+
*/
|
|
451
|
+
reduce(fn: (acc: T, value: T, index: number) => T): Option<T>;
|
|
452
|
+
/**
|
|
453
|
+
* Выполняет функцию для каждого элемента (потребляющая операция).
|
|
454
|
+
*
|
|
455
|
+
* @param fn - Функция для выполнения
|
|
456
|
+
*
|
|
457
|
+
* @example
|
|
458
|
+
* ```ts
|
|
459
|
+
* Iter.from([1, 2, 3]).forEach(x => console.log(x));
|
|
460
|
+
* ```
|
|
461
|
+
*/
|
|
462
|
+
forEach(fn: (value: T, index: number) => void): void;
|
|
463
|
+
/**
|
|
464
|
+
* Считает количество элементов (потребляющая операция).
|
|
465
|
+
*
|
|
466
|
+
* @returns Количество элементов
|
|
467
|
+
*
|
|
468
|
+
* @example
|
|
469
|
+
* ```ts
|
|
470
|
+
* Iter.from([1, 2, 3]).count(); // 3
|
|
471
|
+
* ```
|
|
472
|
+
*/
|
|
473
|
+
count(): number;
|
|
474
|
+
/**
|
|
475
|
+
* Находит первый элемент, удовлетворяющий предикату (потребляющая операция).
|
|
476
|
+
*
|
|
477
|
+
* @param predicate - Функция-предикат
|
|
478
|
+
* @returns Option с найденным элементом или None
|
|
479
|
+
*
|
|
480
|
+
* @example
|
|
481
|
+
* ```ts
|
|
482
|
+
* Iter.from([1, 2, 3, 4])
|
|
483
|
+
* .find(x => x > 2); // Some(3)
|
|
484
|
+
* ```
|
|
485
|
+
*/
|
|
486
|
+
find(predicate: (value: T, index: number) => boolean): Option<T>;
|
|
487
|
+
/**
|
|
488
|
+
* Находит первый элемент, удовлетворяющий предикату (потребляющая операция).
|
|
489
|
+
* Аналог find в JS массивах.
|
|
490
|
+
*
|
|
491
|
+
* @param predicate - Функция-предикат
|
|
492
|
+
* @returns Найденный элемент или undefined если не найден
|
|
493
|
+
*
|
|
494
|
+
* @example
|
|
495
|
+
* ```ts
|
|
496
|
+
* Iter.from([1, 2, 3, 4]).findJS(x => x > 2); // 3
|
|
497
|
+
* Iter.from([1, 2, 3, 4]).findJS(x => x > 10); // undefined
|
|
498
|
+
* ```
|
|
499
|
+
*/
|
|
500
|
+
findJS(predicate: (value: T, index: number) => boolean): T | undefined;
|
|
501
|
+
/**
|
|
502
|
+
* Находит позицию первого элемента, удовлетворяющего предикату (потребляющая операция).
|
|
503
|
+
*
|
|
504
|
+
* @param predicate - Функция-предикат
|
|
505
|
+
* @returns Option с индексом или None
|
|
506
|
+
*
|
|
507
|
+
* @example
|
|
508
|
+
* ```ts
|
|
509
|
+
* Iter.from(['a', 'b', 'c'])
|
|
510
|
+
* .position(x => x === 'b'); // Some(1)
|
|
511
|
+
* ```
|
|
512
|
+
*/
|
|
513
|
+
position(predicate: (value: T, index: number) => boolean): Option<number>;
|
|
514
|
+
/**
|
|
515
|
+
* Находит индекс первого элемента, удовлетворяющего предикату (потребляющая операция).
|
|
516
|
+
* Аналог findIndex в JS массивах.
|
|
517
|
+
*
|
|
518
|
+
* @param predicate - Функция-предикат
|
|
519
|
+
* @returns Индекс найденного элемента или -1 если не найден
|
|
520
|
+
*
|
|
521
|
+
* @example
|
|
522
|
+
* ```ts
|
|
523
|
+
* Iter.from(['a', 'b', 'c']).findIndex(x => x === 'b'); // 1
|
|
524
|
+
* Iter.from(['a', 'b', 'c']).findIndex(x => x === 'd'); // -1
|
|
525
|
+
* ```
|
|
526
|
+
*/
|
|
527
|
+
findIndex(predicate: (value: T, index: number) => boolean): number;
|
|
528
|
+
/**
|
|
529
|
+
* Проверяет, что все элементы удовлетворяют предикату (потребляющая операция).
|
|
530
|
+
*
|
|
531
|
+
* @param predicate - Функция-предикат
|
|
532
|
+
* @returns true если все элементы удовлетворяют предикату
|
|
533
|
+
*
|
|
534
|
+
* @example
|
|
535
|
+
* ```ts
|
|
536
|
+
* Iter.from([2, 4, 6]).all(x => x % 2 === 0); // true
|
|
537
|
+
* Iter.from([2, 3, 6]).all(x => x % 2 === 0); // false
|
|
538
|
+
* ```
|
|
539
|
+
*/
|
|
540
|
+
all(predicate: (value: T, index: number) => boolean): boolean;
|
|
541
|
+
/**
|
|
542
|
+
* Проверяет, что все элементы удовлетворяют предикату (потребляющая операция).
|
|
543
|
+
* Аналог every в JS массивах.
|
|
544
|
+
*
|
|
545
|
+
* @param predicate - Функция-предикат
|
|
546
|
+
* @returns true если все элементы удовлетворяют предикату
|
|
547
|
+
*
|
|
548
|
+
* @example
|
|
549
|
+
* ```ts
|
|
550
|
+
* Iter.from([2, 4, 6]).everyJS(x => x % 2 === 0); // true
|
|
551
|
+
* Iter.from([2, 3, 6]).everyJS(x => x % 2 === 0); // false
|
|
552
|
+
* ```
|
|
553
|
+
*/
|
|
554
|
+
everyJS(predicate: (value: T, index: number) => boolean): boolean;
|
|
555
|
+
/**
|
|
556
|
+
* Проверяет, что хотя бы один элемент удовлетворяет предикату (потребляющая операция).
|
|
557
|
+
*
|
|
558
|
+
* @param predicate - Функция-предикат
|
|
559
|
+
* @returns true если хотя бы один элемент удовлетворяет предикату
|
|
560
|
+
*
|
|
561
|
+
* @example
|
|
562
|
+
* ```ts
|
|
563
|
+
* Iter.from([1, 2, 3]).any(x => x > 2); // true
|
|
564
|
+
* Iter.from([1, 2, 3]).any(x => x > 5); // false
|
|
565
|
+
* ```
|
|
566
|
+
*/
|
|
567
|
+
any(predicate: (value: T, index: number) => boolean): boolean;
|
|
568
|
+
/**
|
|
569
|
+
* Проверяет, что хотя бы один элемент удовлетворяет предикату (потребляющая операция).
|
|
570
|
+
* Аналог some в JS массивах.
|
|
571
|
+
*
|
|
572
|
+
* @param predicate - Функция-предикат
|
|
573
|
+
* @returns true если хотя бы один элемент удовлетворяет предикату
|
|
574
|
+
*
|
|
575
|
+
* @example
|
|
576
|
+
* ```ts
|
|
577
|
+
* Iter.from([1, 2, 3]).someJS(x => x > 2); // true
|
|
578
|
+
* Iter.from([1, 2, 3]).someJS(x => x > 5); // false
|
|
579
|
+
* ```
|
|
580
|
+
*/
|
|
581
|
+
someJS(predicate: (value: T, index: number) => boolean): boolean;
|
|
582
|
+
/**
|
|
583
|
+
* Разделяет итератор на две группы по предикату (потребляющая операция).
|
|
584
|
+
*
|
|
585
|
+
* @param predicate - Функция-предикат
|
|
586
|
+
* @returns Кортеж [элементы true, элементы false]
|
|
587
|
+
*
|
|
588
|
+
* @example
|
|
589
|
+
* ```ts
|
|
590
|
+
* const [evens, odds] = Iter.from([1, 2, 3, 4])
|
|
591
|
+
* .partition(x => x % 2 === 0);
|
|
592
|
+
* // evens: [2, 4], odds: [1, 3]
|
|
593
|
+
* ```
|
|
594
|
+
*/
|
|
595
|
+
partition(predicate: (value: T, index: number) => boolean): [T[], T[]];
|
|
596
|
+
/**
|
|
597
|
+
* Находит первый элемент (потребляющая операция).
|
|
598
|
+
*
|
|
599
|
+
* @returns Option с первым элементом или None
|
|
600
|
+
*
|
|
601
|
+
* @example
|
|
602
|
+
* ```ts
|
|
603
|
+
* Iter.from([1, 2, 3]).first(); // Some(1)
|
|
604
|
+
* Iter.empty<number>().first(); // None
|
|
605
|
+
* ```
|
|
606
|
+
*/
|
|
607
|
+
first(): Option<T>;
|
|
608
|
+
/**
|
|
609
|
+
* Находит последний элемент (потребляющая операция).
|
|
610
|
+
*
|
|
611
|
+
* @returns Option с последним элементом или None
|
|
612
|
+
*
|
|
613
|
+
* @example
|
|
614
|
+
* ```ts
|
|
615
|
+
* Iter.from([1, 2, 3]).last(); // Some(3)
|
|
616
|
+
* Iter.empty<number>().last(); // None
|
|
617
|
+
* ```
|
|
618
|
+
*/
|
|
619
|
+
last(): Option<T>;
|
|
620
|
+
/**
|
|
621
|
+
* Находит n-ный элемент (потребляющая операция).
|
|
622
|
+
*
|
|
623
|
+
* @param n - Индекс элемента
|
|
624
|
+
* @returns Option с n-ным элементом или None
|
|
625
|
+
*
|
|
626
|
+
* @example
|
|
627
|
+
* ```ts
|
|
628
|
+
* Iter.from(['a', 'b', 'c']).nth(1); // Some('b')
|
|
629
|
+
* Iter.from(['a', 'b']).nth(5); // None
|
|
630
|
+
* ```
|
|
631
|
+
*/
|
|
632
|
+
nth(n: number): Option<T>;
|
|
633
|
+
/**
|
|
634
|
+
* Проверяет, содержит ли итератор указанный элемент (потребляющая операция).
|
|
635
|
+
* Аналог includes в JS массивах.
|
|
636
|
+
*
|
|
637
|
+
* @param searchElement - Искомый элемент
|
|
638
|
+
* @param fromIndex - Индекс начала поиска (опционально)
|
|
639
|
+
* @returns true если элемент найден, иначе false
|
|
640
|
+
*
|
|
641
|
+
* @example
|
|
642
|
+
* ```ts
|
|
643
|
+
* Iter.from([1, 2, 3]).includes(2); // true
|
|
644
|
+
* Iter.from([1, 2, 3]).includes(4); // false
|
|
645
|
+
* ```
|
|
646
|
+
*/
|
|
647
|
+
includes(searchElement: T, fromIndex?: number): boolean;
|
|
648
|
+
/**
|
|
649
|
+
* Находит максимальный элемент (потребляющая операция).
|
|
650
|
+
*
|
|
651
|
+
* @returns Option с максимальным элементом или None
|
|
652
|
+
*
|
|
653
|
+
* @example
|
|
654
|
+
* ```ts
|
|
655
|
+
* Iter.from([3, 1, 4, 1, 5]).max(); // Some(5)
|
|
656
|
+
* Iter.empty<number>().max(); // None
|
|
657
|
+
* ```
|
|
658
|
+
*/
|
|
659
|
+
max(): Option<T>;
|
|
660
|
+
/**
|
|
661
|
+
* Находит минимальный элемент (потребляющая операция).
|
|
662
|
+
*
|
|
663
|
+
* @returns Option с минимальным элементом или None
|
|
664
|
+
*
|
|
665
|
+
* @example
|
|
666
|
+
* ```ts
|
|
667
|
+
* Iter.from([3, 1, 4, 1, 5]).min(); // Some(1)
|
|
668
|
+
* Iter.empty<number>().min(); // None
|
|
669
|
+
* ```
|
|
670
|
+
*/
|
|
671
|
+
min(): Option<T>;
|
|
672
|
+
/**
|
|
673
|
+
* Находит максимальный элемент по ключу (потребляющая операция).
|
|
674
|
+
*
|
|
675
|
+
* @template K - Тип ключа для сравнения
|
|
676
|
+
* @param keyFn - Функция получения ключа
|
|
677
|
+
* @returns Option с элементом, имеющим максимальный ключ, или None
|
|
678
|
+
*
|
|
679
|
+
* @example
|
|
680
|
+
* ```ts
|
|
681
|
+
* Iter.from([{age: 20}, {age: 30}, {age: 25}])
|
|
682
|
+
* .maxBy(x => x.age); // Some({age: 30})
|
|
683
|
+
* ```
|
|
684
|
+
*/
|
|
685
|
+
maxBy<K>(keyFn: (value: T) => K): Option<T>;
|
|
686
|
+
/**
|
|
687
|
+
* Находит минимальный элемент по ключу (потребляющая операция).
|
|
688
|
+
*
|
|
689
|
+
* @template K - Тип ключа для сравнения
|
|
690
|
+
* @param keyFn - Функция получения ключа
|
|
691
|
+
* @returns Option с элементом, имеющим минимальный ключ, или None
|
|
692
|
+
*
|
|
693
|
+
* @example
|
|
694
|
+
* ```ts
|
|
695
|
+
* Iter.from([{age: 20}, {age: 30}, {age: 25}])
|
|
696
|
+
* .minBy(x => x.age); // Some({age: 20})
|
|
697
|
+
* ```
|
|
698
|
+
*/
|
|
699
|
+
minBy<K>(keyFn: (value: T) => K): Option<T>;
|
|
700
|
+
/**
|
|
701
|
+
* Суммирует числовые элементы (потребляющая операция).
|
|
702
|
+
*
|
|
703
|
+
* @returns Сумма всех элементов
|
|
704
|
+
*
|
|
705
|
+
* @example
|
|
706
|
+
* ```ts
|
|
707
|
+
* Iter.from([1, 2, 3, 4]).sum(); // 10
|
|
708
|
+
* ```
|
|
709
|
+
*/
|
|
710
|
+
sum(this: Iter<number>): number;
|
|
711
|
+
/**
|
|
712
|
+
* Перемножает числовые элементы (потребляющая операция).
|
|
713
|
+
*
|
|
714
|
+
* @returns Произведение всех элементов
|
|
715
|
+
*
|
|
716
|
+
* @example
|
|
717
|
+
* ```ts
|
|
718
|
+
* Iter.from([1, 2, 3, 4]).product(); // 24
|
|
719
|
+
* ```
|
|
720
|
+
*/
|
|
721
|
+
product(this: Iter<number>): number;
|
|
722
|
+
/**
|
|
723
|
+
* Объединяет строковые элементы в одну строку (потребляющая операция).
|
|
724
|
+
*
|
|
725
|
+
* @param separator - Разделитель (по умолчанию '')
|
|
726
|
+
* @returns Объединённая строка
|
|
727
|
+
*
|
|
728
|
+
* @example
|
|
729
|
+
* ```ts
|
|
730
|
+
* Iter.from(['a', 'b', 'c']).join('-'); // "a-b-c"
|
|
731
|
+
* ```
|
|
732
|
+
*/
|
|
733
|
+
join(this: Iter<string>, separator?: string): string;
|
|
734
|
+
/**
|
|
735
|
+
* Собирает элементы в Set (потребляющая операция).
|
|
736
|
+
*
|
|
737
|
+
* @returns Set со всеми элементами
|
|
738
|
+
*
|
|
739
|
+
* @example
|
|
740
|
+
* ```ts
|
|
741
|
+
* Iter.from([1, 2, 2, 3, 1]).toSet(); // Set {1, 2, 3}
|
|
742
|
+
* ```
|
|
743
|
+
*/
|
|
744
|
+
toSet(): Set<T>;
|
|
745
|
+
/**
|
|
746
|
+
* Собирает пары ключ-значение в Map (потребляющая операция).
|
|
747
|
+
*
|
|
748
|
+
* @template K - Тип ключа
|
|
749
|
+
* @template V - Тип значения
|
|
750
|
+
* @returns Map со всеми парами
|
|
751
|
+
*
|
|
752
|
+
* @example
|
|
753
|
+
* ```ts
|
|
754
|
+
* Iter.from([[1, 'a'], [2, 'b']]).toMap();
|
|
755
|
+
* // Map {1 => 'a', 2 => 'b'}
|
|
756
|
+
* ```
|
|
757
|
+
*/
|
|
758
|
+
toMap<K, V>(this: Iter<[K, V]>): Map<K, V>;
|
|
759
|
+
/**
|
|
760
|
+
* Группирует элементы по ключу (потребляющая операция).
|
|
761
|
+
*
|
|
762
|
+
* @template K - Тип ключа
|
|
763
|
+
* @param keyFn - Функция получения ключа
|
|
764
|
+
* @returns Map с группами элементов
|
|
765
|
+
*
|
|
766
|
+
* @example
|
|
767
|
+
* ```ts
|
|
768
|
+
* Iter.from([1, 2, 3, 4, 5, 6])
|
|
769
|
+
* .groupBy(x => x % 2 === 0 ? 'even' : 'odd');
|
|
770
|
+
* // Map {'odd' => [1, 3, 5], 'even' => [2, 4, 6]}
|
|
771
|
+
* ```
|
|
772
|
+
*/
|
|
773
|
+
groupBy<K>(keyFn: (value: T) => K): Map<K, T[]>;
|
|
774
|
+
/**
|
|
775
|
+
* Сортирует элементы (потребляющая операция).
|
|
776
|
+
* Требует полной материализации в память.
|
|
777
|
+
*
|
|
778
|
+
* @param compareFn - Функция сравнения (опциональная)
|
|
779
|
+
* @returns Новый Iter с отсортированными элементами
|
|
780
|
+
*
|
|
781
|
+
* @example
|
|
782
|
+
* ```ts
|
|
783
|
+
* Iter.from([3, 1, 4, 1, 5])
|
|
784
|
+
* .sort()
|
|
785
|
+
* .collect(); // [1, 1, 3, 4, 5]
|
|
786
|
+
* ```
|
|
787
|
+
*/
|
|
788
|
+
sort(compareFn?: (a: T, b: T) => number): Iter<T>;
|
|
789
|
+
/**
|
|
790
|
+
* Сортирует элементы по ключу (потребляющая операция).
|
|
791
|
+
* Требует полной материализации в память.
|
|
792
|
+
*
|
|
793
|
+
* @template K - Тип ключа для сортировки
|
|
794
|
+
* @param keyFn - Функция получения ключа
|
|
795
|
+
* @returns Новый Iter с отсортированными элементами
|
|
796
|
+
*
|
|
797
|
+
* @example
|
|
798
|
+
* ```ts
|
|
799
|
+
* Iter.from([{age: 30}, {age: 20}, {age: 25}])
|
|
800
|
+
* .sortBy(x => x.age)
|
|
801
|
+
* .collect(); // [{age: 20}, {age: 25}, {age: 30}]
|
|
802
|
+
* ```
|
|
803
|
+
*/
|
|
804
|
+
sortBy<K>(keyFn: (value: T) => K): Iter<T>;
|
|
805
|
+
/**
|
|
806
|
+
* Разворачивает порядок элементов (потребляющая операция).
|
|
807
|
+
* Требует полной материализации в память.
|
|
808
|
+
*
|
|
809
|
+
* @returns Новый Iter с элементами в обратном порядке
|
|
810
|
+
*
|
|
811
|
+
* @example
|
|
812
|
+
* ```ts
|
|
813
|
+
* Iter.from([1, 2, 3])
|
|
814
|
+
* .reverse()
|
|
815
|
+
* .collect(); // [3, 2, 1]
|
|
816
|
+
* ```
|
|
817
|
+
*/
|
|
818
|
+
reverse(): Iter<T>;
|
|
819
|
+
}
|
|
820
|
+
export {};
|
|
821
|
+
//# sourceMappingURL=iterator.d.ts.map
|