Function handleIsomorphicIterable

  • Takes a generator for iterables, then a generator for async iterables and last an iterable, using the proper generator automatically.

    Example

    const handle = handleIsomorphicIterable(
    iterable => function* () {
    yield* iterable;
    }
    )(
    iterable => async function* () {
    yield* iterable;
    }
    );

    handle(nonAsyncIterable); // IterableIterator
    handle(asyncIterable); // AsyncIterableIterator

    Type Parameters

    • Item = unknown

    • Output = unknown

    Parameters

    • iterator: Unary<Iterable<Item>, Function<ReadOnlyArray<never>, Generator<Output, void, void>>>

      Function to be used with non async iterables.

    Returns ((asyncIterator) => (<Iterable>(iterable) => Iterable extends {
            [asyncIterator]() => AsyncIterator<Item, any, undefined>;
        }
        ? {
            [asyncIterator]() => AsyncIterableIterator<Output>;
            next(...args) => Promise<IteratorResult<Output, any>>;
            return?(value?) => Promise<IteratorResult<Output, any>>;
            throw?(e?) => Promise<IteratorResult<Output, any>>;
        }
        : {
            [iterator]() => IterableIterator<Output>;
            next(...args) => IteratorResult<Output, any>;
            return?(value?) => IteratorResult<Output, any>;
            throw?(e?) => IteratorResult<Output, any>;
        }))

    Curried function with iterator in context.

      • (asyncIterator): (<Iterable>(iterable) => Iterable extends {
                [asyncIterator]() => AsyncIterator<Item, any, undefined>;
            }
            ? {
                [asyncIterator]() => AsyncIterableIterator<Output>;
                next(...args) => Promise<IteratorResult<Output, any>>;
                return?(value?) => Promise<IteratorResult<Output, any>>;
                throw?(e?) => Promise<IteratorResult<Output, any>>;
            }
            : {
                [iterator]() => IterableIterator<Output>;
                next(...args) => IteratorResult<Output, any>;
                return?(value?) => IteratorResult<Output, any>;
                throw?(e?) => IteratorResult<Output, any>;
            })
      • Parameters

        • asyncIterator: Unary<IsomorphicIterable<Item>, Function<ReadOnlyArray<never>, AsyncGenerator<Output, void, void>>>

        Returns (<Iterable>(iterable) => Iterable extends {
                [asyncIterator]() => AsyncIterator<Item, any, undefined>;
            }
            ? {
                [asyncIterator]() => AsyncIterableIterator<Output>;
                next(...args) => Promise<IteratorResult<Output, any>>;
                return?(value?) => Promise<IteratorResult<Output, any>>;
                throw?(e?) => Promise<IteratorResult<Output, any>>;
            }
            : {
                [iterator]() => IterableIterator<Output>;
                next(...args) => IteratorResult<Output, any>;
                return?(value?) => IteratorResult<Output, any>;
                throw?(e?) => IteratorResult<Output, any>;
            })

          • <Iterable>(iterable): Iterable extends {
                    [asyncIterator]() => AsyncIterator<Item, any, undefined>;
                }
                ? {
                    [asyncIterator]() => AsyncIterableIterator<Output>;
                    next(...args) => Promise<IteratorResult<Output, any>>;
                    return?(value?) => Promise<IteratorResult<Output, any>>;
                    throw?(e?) => Promise<IteratorResult<Output, any>>;
                }
                : {
                    [iterator]() => IterableIterator<Output>;
                    next(...args) => IteratorResult<Output, any>;
                    return?(value?) => IteratorResult<Output, any>;
                    throw?(e?) => IteratorResult<Output, any>;
                }
          • Type Parameters

            • Iterable extends IsomorphicIterable<Item>

            Parameters

            • iterable: Iterable

            Returns Iterable extends {
                    [asyncIterator]() => AsyncIterator<Item, any, undefined>;
                }
                ? {
                    [asyncIterator]() => AsyncIterableIterator<Output>;
                    next(...args) => Promise<IteratorResult<Output, any>>;
                    return?(value?) => Promise<IteratorResult<Output, any>>;
                    throw?(e?) => Promise<IteratorResult<Output, any>>;
                }
                : {
                    [iterator]() => IterableIterator<Output>;
                    next(...args) => IteratorResult<Output, any>;
                    return?(value?) => IteratorResult<Output, any>;
                    throw?(e?) => IteratorResult<Output, any>;
                }