import { Flu } from "../flu"; import { Voidable } from "../maybe"; import { Option } from "../option"; import { AnyPair, Pair, PairKey, PairValue } from "../types"; import { SeqLinq } from "./linq"; export * from './ops'; export declare function seq(iter: Iterable): Seq; export declare class Seq implements Iterable { readonly iter: () => Iterable; constructor(iter: () => Iterable); [Symbol.iterator](): Iterator; /** Create empty seq */ static empty(): Seq; static by(iter: () => Iterable): Seq; static of(...iter: T[]): Seq; /** Create a Seq from a range starting from 0 */ static to(to: number, step?: number): Seq; /** Create a Seq from a range */ static range(from: number, to: number, step?: number): Seq; static repeat(v: T, n: number): Seq; linq(): SeqLinq; flu(): Flu; toFlu(): T extends infer R | Promise ? Flu : never; collect(): T[]; join(separator?: string): string; count(): number; isEmpty(): boolean; first(): Voidable; firstO(): Option; last(): Voidable; lastO(): Option; nth(n: number): Voidable; nthO(n: number): Option; stepBy(step: number): Seq; chain(other: Iterable, ...more: Iterable[]): Seq; zip(other: Iterable): Seq<[T, U]>; unzip(): [ (T extends [infer A, any] | readonly [infer A, any] | (infer A)[] ? A : unknown)[], (T extends [any, infer B] | readonly [any, infer B] | (infer B)[] ? B : unknown)[] ]; map(f: (v: T) => R): Seq; fill(v: R): Seq; forEach(f: (v: T) => unknown): void; run(): void; filter(f: (v: T) => v is S): Seq; filter(f: (v: T) => unknown): Seq; enumerate(): Seq<[T, number]>; indexed(): Seq<[number, T]>; skip(n: number): Seq; take(n: number): Seq; slice(from: number, to: number): Seq; sub(from: number, count: number): Seq; scan(init: R, f: (acc: R, val: T) => R): Seq; flatMap(f: (v: T) => Iterable): Seq; flatten(): T extends Iterable ? Seq : never; also(f: (v: T) => void): Seq; fold(init: R, f: (acc: R, val: T) => R): R; reduce(f: (acc: T, val: T) => T): T; all(f: (v: T) => v is S): this is Seq; all(f: (v: T) => unknown): boolean; any(f: (v: T) => unknown): boolean; find(f: (v: T) => unknown): Voidable; findO(f: (v: T) => unknown): Option; position(f: (v: T) => unknown): number; indexOf(v: T): number; includes(v: T): boolean; max(): Voidable; maxO(): Option; min(): Voidable; minO(): Option; sum(defv: T): T extends number | bigint | string ? T : never; sum(): T extends number | bigint | string ? Voidable : never; avg(defv: T): T extends number | bigint ? T : never; avg(): T extends number | bigint ? Voidable : never; push(...items: T[]): Seq; unshift(...items: T[]): Seq; as(): Seq; toArray(): T[]; toSet(): Set; toMap(): T extends AnyPair ? Map : never; groupBy(keyf: (v: T) => K): Seq<[K, T[]]>; groupBy(keyf: (v: T) => K, valf: (v: T) => V): Seq<[K, V[]]>; relate(inner: Iterable, outerKey: (a: T) => K, innerKey: (b: I) => K): Seq<[T, I]>; relateMap(inner: Iterable, outerKey: (a: T) => K, innerKey: (b: I) => K, selector: (a: T, b: I) => R): Seq; get arr(): T[]; mapKey(f: (key: PairKey) => R): T extends AnyPair ? Seq> : never; mapValue(f: (key: PairValue) => R): T extends AnyPair ? Seq> : never; }