import { mergeMap } from './mergeMap'; 
 | 
import { ObservableInput, OperatorFunction, ObservedValueOf } from '../types'; 
 | 
  
 | 
/* tslint:disable:max-line-length */ 
 | 
export function concatMap<T, O extends ObservableInput<any>>(project: (value: T, index: number) =>  O): OperatorFunction<T, ObservedValueOf<O>>; 
 | 
/** @deprecated resultSelector no longer supported, use inner map instead */ 
 | 
export function concatMap<T, O extends ObservableInput<any>>(project: (value: T, index: number) => O, resultSelector: undefined): OperatorFunction<T, ObservedValueOf<O>>; 
 | 
/** @deprecated resultSelector no longer supported, use inner map instead */ 
 | 
export function concatMap<T, R, O extends ObservableInput<any>>(project: (value: T, index: number) =>  O, resultSelector: (outerValue: T, innerValue: ObservedValueOf<O>, outerIndex: number, innerIndex: number) => R): OperatorFunction<T, R>; 
 | 
/* tslint:enable:max-line-length */ 
 | 
  
 | 
/** 
 | 
 * Projects each source value to an Observable which is merged in the output 
 | 
 * Observable, in a serialized fashion waiting for each one to complete before 
 | 
 * merging the next. 
 | 
 * 
 | 
 * <span class="informal">Maps each value to an Observable, then flattens all of 
 | 
 * these inner Observables using {@link concatAll}.</span> 
 | 
 * 
 | 
 *  
 | 
 * 
 | 
 * Returns an Observable that emits items based on applying a function that you 
 | 
 * supply to each item emitted by the source Observable, where that function 
 | 
 * returns an (so-called "inner") Observable. Each new inner Observable is 
 | 
 * concatenated with the previous inner Observable. 
 | 
 * 
 | 
 * __Warning:__ if source values arrive endlessly and faster than their 
 | 
 * corresponding inner Observables can complete, it will result in memory issues 
 | 
 * as inner Observables amass in an unbounded buffer waiting for their turn to 
 | 
 * be subscribed to. 
 | 
 * 
 | 
 * Note: `concatMap` is equivalent to `mergeMap` with concurrency parameter set 
 | 
 * to `1`. 
 | 
 * 
 | 
 * ## Example 
 | 
 * For each click event, tick every second from 0 to 3, with no concurrency 
 | 
 * 
 | 
 * ```ts 
 | 
 * import { fromEvent, interval } from 'rxjs'; 
 | 
 * import { concatMap, take } from 'rxjs/operators'; 
 | 
 * 
 | 
 * const clicks = fromEvent(document, 'click'); 
 | 
 * const result = clicks.pipe( 
 | 
 *   concatMap(ev => interval(1000).pipe(take(4))) 
 | 
 * ); 
 | 
 * result.subscribe(x => console.log(x)); 
 | 
 * 
 | 
 * // Results in the following: 
 | 
 * // (results are not concurrent) 
 | 
 * // For every click on the "document" it will emit values 0 to 3 spaced 
 | 
 * // on a 1000ms interval 
 | 
 * // one click = 1000ms-> 0 -1000ms-> 1 -1000ms-> 2 -1000ms-> 3 
 | 
 * ``` 
 | 
 * 
 | 
 * @see {@link concat} 
 | 
 * @see {@link concatAll} 
 | 
 * @see {@link concatMapTo} 
 | 
 * @see {@link exhaustMap} 
 | 
 * @see {@link mergeMap} 
 | 
 * @see {@link switchMap} 
 | 
 * 
 | 
 * @param {function(value: T, ?index: number): ObservableInput} project A function 
 | 
 * that, when applied to an item emitted by the source Observable, returns an 
 | 
 * Observable. 
 | 
 * @return {Observable} An Observable that emits the result of applying the 
 | 
 * projection function (and the optional deprecated `resultSelector`) to each item emitted 
 | 
 * by the source Observable and taking values from each projected inner 
 | 
 * Observable sequentially. 
 | 
 * @method concatMap 
 | 
 * @owner Observable 
 | 
 */ 
 | 
export function concatMap<T, R, O extends ObservableInput<any>>( 
 | 
  project: (value: T, index: number) => O, 
 | 
  resultSelector?: (outerValue: T, innerValue: ObservedValueOf<O>, outerIndex: number, innerIndex: number) => R 
 | 
): OperatorFunction<T, ObservedValueOf<O>|R> { 
 | 
  return mergeMap(project, resultSelector, 1); 
 | 
} 
 |