import { OperatorFunction } from '../../interfaces'; import { IterableX } from '../../iterable/iterablex'; import { ZipIterable } from '../zip'; import { identity } from '../../internal/identity'; export function zip( source: Iterable, source2: Iterable ): OperatorFunction; export function zip( source2: Iterable, source3: Iterable ): OperatorFunction; export function zip( source2: Iterable, source3: Iterable, source4: Iterable ): OperatorFunction; export function zip( source2: Iterable, source3: Iterable, source4: Iterable, source5: Iterable ): OperatorFunction; export function zip( source2: Iterable, source3: Iterable, source4: Iterable, source5: Iterable, source6: Iterable ): OperatorFunction; export function zip( project: (values: [T, T2]) => R, source2: Iterable ): OperatorFunction; export function zip( project: (values: [T, T2, T3]) => R, source2: Iterable, source3: Iterable ): OperatorFunction; export function zip( project: (values: [T, T2, T3, T4]) => R, source2: Iterable, source3: Iterable, source4: Iterable ): OperatorFunction; export function zip( project: (values: [T, T2, T3, T4, T5]) => R, source2: Iterable, source3: Iterable, source4: Iterable, source5: Iterable ): OperatorFunction; export function zip( project: (values: [T, T2, T3, T4, T5, T6]) => R, source2: Iterable, source3: Iterable, source4: Iterable, source5: Iterable, source6: Iterable ): OperatorFunction; export function zip(...sources: Iterable[]): OperatorFunction; export function zip( project: (values: T[]) => R, ...sources: Iterable[] ): OperatorFunction; /* tslint:enable:max-line-length */ export function zip(...sources: any[]): OperatorFunction { return function zipOperatorFunction(source: Iterable): IterableX { let fn = sources.shift() as (values: any[]) => R; if (typeof fn !== 'function') { sources.unshift(fn); fn = identity; } return new ZipIterable([source, ...sources] as Iterable[], fn); }; }