Skip to content

Commit 21fab73

Browse files
committed
fix(combineLatest): rxjs/observable/combineLatest is now properly exported
fixes #1722
1 parent b7ca78a commit 21fab73

File tree

3 files changed

+92
-88
lines changed

3 files changed

+92
-88
lines changed

src/add/observable/combineLatest.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import {Observable} from '../../Observable';
2-
import {combineLatestStatic} from '../../operator/combineLatest';
2+
import {combineLatest as combineLatestStatic} from '../../observable/combineLatest';
33

44
Observable.combineLatest = combineLatestStatic;
55

src/observable/combineLatest.ts

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
import { Observable, ObservableInput } from '../Observable';
2+
import { Scheduler } from '../Scheduler';
3+
import { isScheduler } from '../util/isScheduler';
4+
import { isArray } from '../util/isArray';
5+
import { ArrayObservable } from './ArrayObservable';
6+
import { CombineLatestOperator } from '../operator/combineLatest';
7+
8+
/* tslint:disable:max-line-length */
9+
export function combineLatest<T>(v1: ObservableInput<T>, scheduler?: Scheduler): Observable<[T]>;
10+
export function combineLatest<T, T2>(v1: ObservableInput<T>, v2: ObservableInput<T2>, scheduler?: Scheduler): Observable<[T, T2]>;
11+
export function combineLatest<T, T2, T3>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, scheduler?: Scheduler): Observable<[T, T2, T3]>;
12+
export function combineLatest<T, T2, T3, T4>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, scheduler?: Scheduler): Observable<[T, T2, T3, T4]>;
13+
export function combineLatest<T, T2, T3, T4, T5>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, scheduler?: Scheduler): Observable<[T, T2, T3, T4, T5]>;
14+
export function combineLatest<T, T2, T3, T4, T5, T6>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, v6: ObservableInput<T6>, scheduler?: Scheduler): Observable<[T, T2, T3, T4, T5, T6]>;
15+
export function combineLatest<T, R>(v1: ObservableInput<T>, project: (v1: T) => R, scheduler?: Scheduler): Observable<R>;
16+
export function combineLatest<T, T2, R>(v1: ObservableInput<T>, v2: ObservableInput<T2>, project: (v1: T, v2: T2) => R, scheduler?: Scheduler): Observable<R>;
17+
export function combineLatest<T, T2, T3, R>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, project: (v1: T, v2: T2, v3: T3) => R, scheduler?: Scheduler): Observable<R>;
18+
export function combineLatest<T, T2, T3, T4, R>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, project: (v1: T, v2: T2, v3: T3, v4: T4) => R, scheduler?: Scheduler): Observable<R>;
19+
export function combineLatest<T, T2, T3, T4, T5, R>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, project: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => R, scheduler?: Scheduler): Observable<R>;
20+
export function combineLatest<T, T2, T3, T4, T5, T6, R>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, v6: ObservableInput<T6>, project: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => R, scheduler?: Scheduler): Observable<R>;
21+
export function combineLatest<R>(...observables: Array<ObservableInput<any> | ((...values: Array<any>) => R) | Scheduler>): Observable<R>;
22+
export function combineLatest<R>(array: ObservableInput<any>[], scheduler?: Scheduler): Observable<R>;
23+
export function combineLatest<R>(array: ObservableInput<any>[], project: (...values: Array<any>) => R, scheduler?: Scheduler): Observable<R>;
24+
/* tslint:enable:max-line-length */
25+
26+
/**
27+
* Combines multiple Observables to create an Observable whose values are
28+
* calculated from the latest values of each of its input Observables.
29+
*
30+
* <span class="informal">Whenever any input Observable emits a value, it
31+
* computes a formula using the latest values from all the inputs, then emits
32+
* the output of that formula.</span>
33+
*
34+
* <img src="./img/combineLatest.png" width="100%">
35+
*
36+
* `combineLatest` combines the values from all the Observables passed as
37+
* arguments. This is done by subscribing to each Observable, in order, and
38+
* collecting an array of each of the most recent values any time any of the
39+
* input Observables emits, then either taking that array and passing it as
40+
* arguments to an optional `project` function and emitting the return value of
41+
* that, or just emitting the array of recent values directly if there is no
42+
* `project` function.
43+
*
44+
* @example <caption>Dynamically calculate the Body-Mass Index from an Observable of weight and one for height</caption>
45+
* var weight = Rx.Observable.of(70, 72, 76, 79, 75);
46+
* var height = Rx.Observable.of(1.76, 1.77, 1.78);
47+
* var bmi = Rx.Observable.combineLatest(weight, height, (w, h) => w / (h * h));
48+
* bmi.subscribe(x => console.log('BMI is ' + x));
49+
*
50+
* @see {@link combineAll}
51+
* @see {@link merge}
52+
* @see {@link withLatestFrom}
53+
*
54+
* @param {Observable} observable1 An input Observable to combine with the
55+
* source Observable.
56+
* @param {Observable} observable2 An input Observable to combine with the
57+
* source Observable. More than one input Observables may be given as argument.
58+
* @param {function} [project] An optional function to project the values from
59+
* the combined latest values into a new value on the output Observable.
60+
* @param {Scheduler} [scheduler=null] The Scheduler to use for subscribing to
61+
* each input Observable.
62+
* @return {Observable} An Observable of projected values from the most recent
63+
* values from each input Observable, or an array of the most recent values from
64+
* each input Observable.
65+
* @static true
66+
* @name combineLatest
67+
* @owner Observable
68+
*/
69+
export function combineLatest<T, R>(...observables: Array<any | ObservableInput<any> |
70+
Array<ObservableInput<any>> |
71+
(((...values: Array<any>) => R)) |
72+
Scheduler>): Observable<R> {
73+
let project: (...values: Array<any>) => R = null;
74+
let scheduler: Scheduler = null;
75+
76+
if (isScheduler(observables[observables.length - 1])) {
77+
scheduler = <Scheduler>observables.pop();
78+
}
79+
80+
if (typeof observables[observables.length - 1] === 'function') {
81+
project = <(...values: Array<any>) => R>observables.pop();
82+
}
83+
84+
// if the first and only other argument besides the resultSelector is an array
85+
// assume it's been called with `combineLatest([obs1, obs2, obs3], project)`
86+
if (observables.length === 1 && isArray(observables[0])) {
87+
observables = <Array<Observable<any>>>observables[0];
88+
}
89+
90+
return new ArrayObservable(observables, scheduler).lift(new CombineLatestOperator<T, R>(project));
91+
}

src/operator/combineLatest.ts

Lines changed: 0 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
import {Observable, ObservableInput} from '../Observable';
22
import {ArrayObservable} from '../observable/ArrayObservable';
33
import {isArray} from '../util/isArray';
4-
import {Scheduler} from '../Scheduler';
5-
import {isScheduler} from '../util/isScheduler';
64
import {Operator} from '../Operator';
75
import {Subscriber} from '../Subscriber';
86
import {OuterSubscriber} from '../OuterSubscriber';
@@ -88,91 +86,6 @@ export interface CombineLatestSignature<T> {
8886
}
8987
/* tslint:enable:max-line-length */
9088

91-
/* tslint:disable:max-line-length */
92-
export function combineLatestStatic<T>(v1: ObservableInput<T>, scheduler?: Scheduler): Observable<[T]>;
93-
export function combineLatestStatic<T, T2>(v1: ObservableInput<T>, v2: ObservableInput<T2>, scheduler?: Scheduler): Observable<[T, T2]>;
94-
export function combineLatestStatic<T, T2, T3>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, scheduler?: Scheduler): Observable<[T, T2, T3]>;
95-
export function combineLatestStatic<T, T2, T3, T4>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, scheduler?: Scheduler): Observable<[T, T2, T3, T4]>;
96-
export function combineLatestStatic<T, T2, T3, T4, T5>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, scheduler?: Scheduler): Observable<[T, T2, T3, T4, T5]>;
97-
export function combineLatestStatic<T, T2, T3, T4, T5, T6>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, v6: ObservableInput<T6>, scheduler?: Scheduler): Observable<[T, T2, T3, T4, T5, T6]>;
98-
export function combineLatestStatic<T, R>(v1: ObservableInput<T>, project: (v1: T) => R, scheduler?: Scheduler): Observable<R>;
99-
export function combineLatestStatic<T, T2, R>(v1: ObservableInput<T>, v2: ObservableInput<T2>, project: (v1: T, v2: T2) => R, scheduler?: Scheduler): Observable<R>;
100-
export function combineLatestStatic<T, T2, T3, R>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, project: (v1: T, v2: T2, v3: T3) => R, scheduler?: Scheduler): Observable<R>;
101-
export function combineLatestStatic<T, T2, T3, T4, R>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, project: (v1: T, v2: T2, v3: T3, v4: T4) => R, scheduler?: Scheduler): Observable<R>;
102-
export function combineLatestStatic<T, T2, T3, T4, T5, R>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, project: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => R, scheduler?: Scheduler): Observable<R>;
103-
export function combineLatestStatic<T, T2, T3, T4, T5, T6, R>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, v6: ObservableInput<T6>, project: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => R, scheduler?: Scheduler): Observable<R>;
104-
export function combineLatestStatic<R>(...observables: Array<ObservableInput<any> | ((...values: Array<any>) => R) | Scheduler>): Observable<R>;
105-
export function combineLatestStatic<R>(array: ObservableInput<any>[], scheduler?: Scheduler): Observable<R>;
106-
export function combineLatestStatic<R>(array: ObservableInput<any>[], project: (...values: Array<any>) => R, scheduler?: Scheduler): Observable<R>;
107-
/* tslint:enable:max-line-length */
108-
109-
/**
110-
* Combines multiple Observables to create an Observable whose values are
111-
* calculated from the latest values of each of its input Observables.
112-
*
113-
* <span class="informal">Whenever any input Observable emits a value, it
114-
* computes a formula using the latest values from all the inputs, then emits
115-
* the output of that formula.</span>
116-
*
117-
* <img src="./img/combineLatest.png" width="100%">
118-
*
119-
* `combineLatest` combines the values from all the Observables passed as
120-
* arguments. This is done by subscribing to each Observable, in order, and
121-
* collecting an array of each of the most recent values any time any of the
122-
* input Observables emits, then either taking that array and passing it as
123-
* arguments to an optional `project` function and emitting the return value of
124-
* that, or just emitting the array of recent values directly if there is no
125-
* `project` function.
126-
*
127-
* @example <caption>Dynamically calculate the Body-Mass Index from an Observable of weight and one for height</caption>
128-
* var weight = Rx.Observable.of(70, 72, 76, 79, 75);
129-
* var height = Rx.Observable.of(1.76, 1.77, 1.78);
130-
* var bmi = Rx.Observable.combineLatest(weight, height, (w, h) => w / (h * h));
131-
* bmi.subscribe(x => console.log('BMI is ' + x));
132-
*
133-
* @see {@link combineAll}
134-
* @see {@link merge}
135-
* @see {@link withLatestFrom}
136-
*
137-
* @param {Observable} observable1 An input Observable to combine with the
138-
* source Observable.
139-
* @param {Observable} observable2 An input Observable to combine with the
140-
* source Observable. More than one input Observables may be given as argument.
141-
* @param {function} [project] An optional function to project the values from
142-
* the combined latest values into a new value on the output Observable.
143-
* @param {Scheduler} [scheduler=null] The Scheduler to use for subscribing to
144-
* each input Observable.
145-
* @return {Observable} An Observable of projected values from the most recent
146-
* values from each input Observable, or an array of the most recent values from
147-
* each input Observable.
148-
* @static true
149-
* @name combineLatest
150-
* @owner Observable
151-
*/
152-
export function combineLatestStatic<T, R>(...observables: Array<any | ObservableInput<any> |
153-
Array<ObservableInput<any>> |
154-
(((...values: Array<any>) => R)) |
155-
Scheduler>): Observable<R> {
156-
let project: (...values: Array<any>) => R = null;
157-
let scheduler: Scheduler = null;
158-
159-
if (isScheduler(observables[observables.length - 1])) {
160-
scheduler = <Scheduler>observables.pop();
161-
}
162-
163-
if (typeof observables[observables.length - 1] === 'function') {
164-
project = <(...values: Array<any>) => R>observables.pop();
165-
}
166-
167-
// if the first and only other argument besides the resultSelector is an array
168-
// assume it's been called with `combineLatest([obs1, obs2, obs3], project)`
169-
if (observables.length === 1 && isArray(observables[0])) {
170-
observables = <Array<Observable<any>>>observables[0];
171-
}
172-
173-
return new ArrayObservable(observables, scheduler).lift(new CombineLatestOperator<T, R>(project));
174-
}
175-
17689
export class CombineLatestOperator<T, R> implements Operator<T, R> {
17790
constructor(private project?: (...values: Array<any>) => R) {
17891
}

0 commit comments

Comments
 (0)