@@ -7,6 +7,8 @@ import { toSubscriber } from './util/toSubscriber';
7
7
import { IfObservable } from './observable/IfObservable' ;
8
8
import { ErrorObservable } from './observable/ErrorObservable' ;
9
9
import { observable as Symbol_observable } from './symbol/observable' ;
10
+ import { OperatorFunction } from './interfaces' ;
11
+ import { compose } from './util/compose' ;
10
12
11
13
export interface Subscribable < T > {
12
14
subscribe ( observerOrNext ?: PartialObserver < T > | ( ( value : T ) => void ) ,
@@ -286,4 +288,43 @@ export class Observable<T> implements Subscribable<T> {
286
288
[ Symbol_observable ] ( ) {
287
289
return this ;
288
290
}
291
+
292
+ /* tslint:disable:max-line-length */
293
+ pipe ( ) : Observable < T >
294
+ pipe < A > ( op1 : OperatorFunction < T , A > ) : Observable < A >
295
+ pipe < A , B > ( op1 : OperatorFunction < T , A > , op2 : OperatorFunction < A , B > ) : Observable < B >
296
+ pipe < A , B , C > ( op1 : OperatorFunction < T , A > , op2 : OperatorFunction < A , B > , op3 : OperatorFunction < B , C > ) : Observable < C >
297
+ pipe < A , B , C , D > ( op1 : OperatorFunction < T , A > , op2 : OperatorFunction < A , B > , op3 : OperatorFunction < B , C > , op4 : OperatorFunction < C , D > ) : Observable < D >
298
+ pipe < A , B , C , D , E > ( op1 : OperatorFunction < T , A > , op2 : OperatorFunction < A , B > , op3 : OperatorFunction < B , C > , op4 : OperatorFunction < C , D > , op5 : OperatorFunction < D , E > ) : Observable < E >
299
+ pipe < A , B , C , D , E , F > ( op1 : OperatorFunction < T , A > , op2 : OperatorFunction < A , B > , op3 : OperatorFunction < B , C > , op4 : OperatorFunction < C , D > , op5 : OperatorFunction < D , E > , op6 : OperatorFunction < E , F > ) : Observable < F >
300
+ pipe < A , B , C , D , E , F , G > ( op1 : OperatorFunction < T , A > , op2 : OperatorFunction < A , B > , op3 : OperatorFunction < B , C > , op4 : OperatorFunction < C , D > , op5 : OperatorFunction < D , E > , op6 : OperatorFunction < E , F > , op7 : OperatorFunction < F , G > ) : Observable < G >
301
+ pipe < A , B , C , D , E , F , G , H > ( op1 : OperatorFunction < T , A > , op2 : OperatorFunction < A , B > , op3 : OperatorFunction < B , C > , op4 : OperatorFunction < C , D > , op5 : OperatorFunction < D , E > , op6 : OperatorFunction < E , F > , op7 : OperatorFunction < F , G > , op8 : OperatorFunction < G , H > ) : Observable < H >
302
+ pipe < A , B , C , D , E , F , G , H , I > ( op1 : OperatorFunction < T , A > , op2 : OperatorFunction < A , B > , op3 : OperatorFunction < B , C > , op4 : OperatorFunction < C , D > , op5 : OperatorFunction < D , E > , op6 : OperatorFunction < E , F > , op7 : OperatorFunction < F , G > , op8 : OperatorFunction < G , H > , op9 : OperatorFunction < H , I > ) : Observable < I >
303
+ /* tslint:enable:max-line-length */
304
+
305
+ /**
306
+ * Used to stitch together functional operators into a chain.
307
+ * @method pipe
308
+ * @return {Observable } the Observable result of all of the operators having
309
+ * been called in the order they were passed in.
310
+ *
311
+ * @example
312
+ *
313
+ * import { map, filter, scan } from 'rxjs/operators';
314
+ *
315
+ * Rx.Observable.interval(1000)
316
+ * .pipe(
317
+ * filter(x => x % 2 === 0),
318
+ * map(x => x + x),
319
+ * scan((acc, x) => acc + x)
320
+ * )
321
+ * .subscribe(x => console.log(x))
322
+ */
323
+ pipe < R > ( ...operations : OperatorFunction < T , R > [ ] ) : Observable < R > {
324
+ if ( operations . length === 0 ) {
325
+ return this as any ;
326
+ }
327
+
328
+ return compose . apply ( this , operations ) ( this ) ;
329
+ }
289
330
}
0 commit comments