UNPKG

itertools-ts

Version:

Extended itertools port for TypeScript and JavaScript. Provides a huge set of functions for working with iterable collections (including async ones)

236 lines (235 loc) 5.93 kB
import { ZipTuple } from "./types"; export declare enum MultipleIterationMode { SHORTEST = 0, LONGEST = 1, STRICT_EQUAL = 2 } /** * Creates iterable instance to iterate several iterables simultaneously. * * @param mode shortest, longest or strict equal * @param iterables * @param noValueFiller * @param iterables */ export declare function createMultipleIterator<T extends Array<Iterable<unknown> | Iterator<unknown>>, F>(mode: MultipleIterationMode, noValueFiller: F, ...iterables: T): Iterable<ZipTuple<T, F>>; /** * Creates async iterable instance to iterate several iterables simultaneously. * * @param mode shortest, longest or strict equal * @param iterables * @param noValueFiller * @param iterables */ export declare function createAsyncMultipleIterator<T extends Array<AsyncIterable<unknown> | AsyncIterator<unknown> | Iterable<unknown> | Iterator<unknown>>, F>(mode: MultipleIterationMode, noValueFiller: F, ...iterables: T): AsyncIterable<ZipTuple<T, F>>; /** * Internal class for counting unique values usage. */ export declare class UsageMap { private addedMap; private deletedMap; /** * Adds new usage of value by given owner. * * @param value * @param owner */ addUsage(value: unknown, owner: string): void; /** * Removes usage of value. * * @param value */ deleteUsage(value: unknown): void; /** * Returns owners count of given value. * * @param value */ getOwnersCount(value: unknown): number; /** * Returns usages count of given value. * * @param value * @param maxOwnersCount */ getUsagesCount(value: unknown, maxOwnersCount?: number): number; } /** * No value filler monad. */ export declare class NoValueMonad { } /** * Internal tool for duplicating another iterators using cache. */ export declare class TeeIterator<T> { private iterator; private related; private positions; private cache; private lastCacheIndex; private isValid; /** * TeeIterator constructor * * @param iterator * @param relatedCount */ constructor(iterator: Iterator<T>, relatedCount: number); /** * Returns current value of related iterable. * * @param relatedIterable */ current(relatedIterable: RelatedIterable<T>): T; /** * Moves related iterable to the next element. * * @param relatedIterable */ next(relatedIterable: RelatedIterable<T>): void; /** * Returns true if related iterable is not done. * * @param relatedIterable */ valid(relatedIterable: RelatedIterable<T>): boolean; /** * Returns related iterables list. */ getRelatedIterables(): Array<RelatedIterable<T>>; /** * Gets and caches the next element of parent iterator. * * @private */ private cacheNextValue; /** * Returns current position index of related iterable. * * @param related */ private getPosition; } /** * Duplicated iterable. */ export declare class RelatedIterable<T> implements IterableIterator<T> { private parent; private readonly id; /** * RelatedIterable constructor. * * @param parentIterable * @param id */ constructor(parentIterable: TeeIterator<T>, id: number); /** * Id getter. */ getId(): number; /** * Returns true if the iterator is valid. */ valid(): boolean; /** * Moves the iterator to the next element. */ next(): IteratorResult<T>; /** * Returns current value of the iterator. */ current(): T | undefined; /** * Aggregated iterator. */ [Symbol.iterator](): IterableIterator<T>; } /** * Internal tool for duplicating another async iterators using cache. */ export declare class AsyncTeeIterator<T> { private iterator; private related; private positions; private cache; private lastCacheIndex; private isValid; private isFirstIteration; /** * AsyncTeeIterator constructor * * @param iterator * @param relatedCount */ constructor(iterator: AsyncIterator<T>, relatedCount: number); /** * Returns current value of related iterable. * * @param relatedIterable */ current(relatedIterable: AsyncRelatedIterable<T>): Promise<T>; /** * Moves related iterable to the next element. * * @param relatedIterable */ next(relatedIterable: AsyncRelatedIterable<T>): Promise<void>; /** * Returns true if related iterable is not done. * * @param relatedIterable */ valid(relatedIterable: AsyncRelatedIterable<T>): Promise<boolean>; /** * Returns related iterables list. */ getRelatedIterables(): Array<AsyncRelatedIterable<T>>; /** * Gets and caches the next element of parent iterator. * * @private */ private cacheNextValue; /** * Returns current position index of related iterable. * * @param related */ private getPosition; } /** * Duplicated async iterable. */ export declare class AsyncRelatedIterable<T> implements AsyncIterableIterator<T> { private parent; private readonly id; /** * AsyncRelatedIterable constructor. * * @param parentIterable * @param id */ constructor(parentIterable: AsyncTeeIterator<T>, id: number); /** * Id getter. */ getId(): number; /** * Returns true if the iterator is valid. */ valid(): Promise<boolean>; /** * Moves the iterator to the next element. */ next(): Promise<IteratorResult<T>>; /** * Returns current value of the iterator. */ current(): Promise<T | undefined>; /** * Aggregated iterator. */ [Symbol.asyncIterator](): AsyncIterableIterator<T>; }