@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.
@@ -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