import type { IsomorphicIterable } 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 two iterables or asynchronous iterable and returns a new iterable or * asynchronous iterable with the length of the shortest iterable with tuples * containing the items from both. * * @category Generators * @example * ``` * const zipNumbers = zip([0, 1, 2]); * zipNumbers([3, 4, 5]); // [[0, 3], [1, 4], [2, 5]] * ``` * @param iterableFirst One of the iterables to be zipped. * @returns Curried function with `iterableFirst` in context. */ export declare const zip: ( iterableFirst: FirstIterable, ) => ( iterableSecond: SecondIterable, ) => FirstIterable extends IsomorphicIterable ? SecondIterable extends IsomorphicIterable ? FirstIterable extends { readonly [Symbol.asyncIterator]: () => AsyncIterator< FirstItem, any, undefined >; } ? { readonly [Symbol.asyncIterator]: () => AsyncIterableIterator< readonly [FirstItem, SecondItem] >; readonly next: ( ...args: [] | [undefined] ) => Promise< IteratorResult >; readonly return?: | (( value?: any, ) => Promise< IteratorResult< readonly [FirstItem, SecondItem], any > >) | undefined; readonly throw?: | (( e?: any, ) => Promise< IteratorResult< readonly [FirstItem, SecondItem], any > >) | undefined; } : SecondIterable extends { readonly [Symbol.asyncIterator]: () => AsyncIterator< SecondItem, any, undefined >; } ? { readonly [Symbol.asyncIterator]: () => AsyncIterableIterator< readonly [FirstItem, SecondItem] >; readonly next: ( ...args: [] | [undefined] ) => Promise< IteratorResult >; readonly return?: | (( value?: any, ) => Promise< IteratorResult< readonly [FirstItem, SecondItem], any > >) | undefined; readonly throw?: | (( e?: any, ) => Promise< IteratorResult< readonly [FirstItem, SecondItem], any > >) | undefined; } : { readonly [Symbol.iterator]: () => IterableIterator< readonly [FirstItem, SecondItem] >; readonly next: ( ...args: [] | [undefined] ) => IteratorResult; readonly return?: | (( value?: any, ) => IteratorResult< readonly [FirstItem, SecondItem], any >) | undefined; readonly throw?: | (( e?: any, ) => IteratorResult< readonly [FirstItem, SecondItem], any >) | undefined; } : never : never;