diff --git a/compat/operators/combineLatest.ts b/compat/operators/combineLatest.ts new file mode 100644 index 0000000000..c8839cc956 --- /dev/null +++ b/compat/operators/combineLatest.ts @@ -0,0 +1,41 @@ + +import { isArray } from 'rxjs/util/isArray'; +import { subscribeToResult } from 'rxjs/util/subscribeToResult'; +import { Observable, ObservableInput, Operator, OperatorFunction, from } from 'rxjs'; +import { CombineLatestOperator } from 'rxjs/internal/observable/combineLatest'; + +const none = {}; + +/* tslint:disable:max-line-length */ +export function combineLatest(project: (v1: T) => R): OperatorFunction; +export function combineLatest(v2: ObservableInput, project: (v1: T, v2: T2) => R): OperatorFunction; +export function combineLatest(v2: ObservableInput, v3: ObservableInput, project: (v1: T, v2: T2, v3: T3) => R): OperatorFunction; +export function combineLatest(v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, project: (v1: T, v2: T2, v3: T3, v4: T4) => R): OperatorFunction; +export function combineLatest(v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, v5: ObservableInput, project: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => R): OperatorFunction; +export function combineLatest(v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, v5: ObservableInput, v6: ObservableInput, project: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => R): OperatorFunction ; +export function combineLatest(v2: ObservableInput): OperatorFunction; +export function combineLatest(v2: ObservableInput, v3: ObservableInput): OperatorFunction; +export function combineLatest(v2: ObservableInput, v3: ObservableInput, v4: ObservableInput): OperatorFunction; +export function combineLatest(v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, v5: ObservableInput): OperatorFunction; +export function combineLatest(v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, v5: ObservableInput, v6: ObservableInput): OperatorFunction ; +export function combineLatest(...observables: Array | ((...values: Array) => R)>): OperatorFunction; +export function combineLatest(array: ObservableInput[]): OperatorFunction>; +export function combineLatest(array: ObservableInput[], project: (v1: T, ...values: Array) => R): OperatorFunction; +/* tslint:enable:max-line-length */ + +export function combineLatest(...observables: Array | + Array> | + ((...values: Array) => R)>): OperatorFunction { + let project: (...values: Array) => R = null; + if (typeof observables[observables.length - 1] === 'function') { + project = <(...values: Array) => R>observables.pop(); + } + + // if the first and only other argument besides the resultSelector is an array + // assume it's been called with `combineLatest([obs1, obs2, obs3], project)` + if (observables.length === 1 && isArray(observables[0])) { + observables = (observables[0]).slice(); + } + + return (source: Observable) => source.lift.call(from([source, ...observables]), new CombineLatestOperator(project)); +} diff --git a/legacy-reexport/operators/combineLatest.ts b/legacy-reexport/operators/combineLatest.ts new file mode 100644 index 0000000000..cefd4d0756 --- /dev/null +++ b/legacy-reexport/operators/combineLatest.ts @@ -0,0 +1 @@ +export * from 'rxjs-compat/operators/combineLatest';