import type { Function, IsomorphicIterable, ReadOnlyArray, Unary, } from "@vangware/types"; import type { ReadOnlyAsyncIterable } from "./types/ReadOnlyAsyncIterable.js"; import type { ReadOnlyAsyncIterableIterator } from "./types/ReadOnlyAsyncIterableIterator.js"; import type { ReadOnlyIterableIterator } from "./types/ReadOnlyIterableIterator.js"; /** * Takes a generator for iterables, then a generator for async iterables and * last 2 iterables, using the proper generator automatically. * * @category Common * @example * ```typescript * const handle = handleCurriedIsomorphicIterable( * iterable2 => iterable1 => function* () { * yield* iterable2; * yield* iterable1; * } * )( * iterable2 => iterable1 => async function* () { * yield* iterable2; * yield* iterable1; * } * ); * * handle(nonAsyncIterable)(nonAsyncIterable); // IterableIterator * handle(asyncIterable)(nonAsyncIterable); // AsyncIterableIterator * ``` * @param iterator Function to be used with non async iterables. * @returns Curried function with iterator in context. */ export declare const handleCurriedIsomorphicIterable: < Iterable2Item = unknown, Iterable1Item = unknown, Output = unknown, >( iterator: Unary< Iterable, Unary< Iterable, Function, Generator> > >, ) => ( asyncIterator: Unary< IsomorphicIterable, Unary< IsomorphicIterable, Function, AsyncGenerator> > >, ) => >( iterable2: Iterable2, ) => >( iterable1: Iterable1, ) => Iterable2 extends { readonly [Symbol.asyncIterator]: () => AsyncIterator< Iterable2Item, any, undefined >; } ? { readonly [Symbol.asyncIterator]: () => AsyncIterableIterator; readonly next: ( ...args: [] | [undefined] ) => Promise>; readonly return?: | ((value?: any) => Promise>) | undefined; readonly throw?: | ((e?: any) => Promise>) | undefined; } : Iterable1 extends { readonly [Symbol.asyncIterator]: () => AsyncIterator< Iterable1Item, any, undefined >; } ? { readonly [Symbol.asyncIterator]: () => AsyncIterableIterator; readonly next: ( ...args: [] | [undefined] ) => Promise>; readonly return?: | ((value?: any) => Promise>) | undefined; readonly throw?: | ((e?: any) => Promise>) | undefined; } : { readonly [Symbol.iterator]: () => IterableIterator; readonly next: ( ...args: [] | [undefined] ) => IteratorResult; readonly return?: | ((value?: any) => IteratorResult) | undefined; readonly throw?: | ((e?: any) => IteratorResult) | undefined; };