import type { Function, IsomorphicIterable, ReadOnlyArray, Unary, } from "@vangware/types"; /** * Takes a generator for iterables, then a generator for async iterables and * last an iterable, using the proper generator automatically. * * @category Common * @example * ```typescript * const handle = handleIsomorphicIterable( * iterable => function* () { * yield* iterable; * } * )( * iterable => async function* () { * yield* iterable; * } * ); * * handle(nonAsyncIterable); // IterableIterator * handle(asyncIterable); // AsyncIterableIterator * ``` * @param iterator Function to be used with non async iterables. * @returns Curried function with iterator in context. */ export declare const handleIsomorphicIterable: < Item = unknown, Output = unknown, >( iterator: Unary< Iterable, Function, Generator> >, ) => ( asyncIterator: Unary< IsomorphicIterable, Function, AsyncGenerator> >, ) => >( iterable: Iterable_1, ) => Iterable_1 extends { readonly [Symbol.asyncIterator]: () => AsyncIterator; } ? { 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; };