import { Observable } from '../Observable'; 
 | 
import { SchedulerLike } from '../types'; 
 | 
import { Subscriber } from '../Subscriber'; 
 | 
  
 | 
/** 
 | 
 * Creates an Observable that emits no items to the Observer and immediately 
 | 
 * emits an error notification. 
 | 
 * 
 | 
 * <span class="informal">Just emits 'error', and nothing else. 
 | 
 * </span> 
 | 
 * 
 | 
 *  
 | 
 * 
 | 
 * This static operator is useful for creating a simple Observable that only 
 | 
 * emits the error notification. It can be used for composing with other 
 | 
 * Observables, such as in a {@link mergeMap}. 
 | 
 * 
 | 
 * ## Examples 
 | 
 * ### Emit the number 7, then emit an error 
 | 
 * ```ts 
 | 
 * import { throwError, concat, of } from 'rxjs'; 
 | 
 * 
 | 
 * const result = concat(of(7), throwError(new Error('oops!'))); 
 | 
 * result.subscribe(x => console.log(x), e => console.error(e)); 
 | 
 * 
 | 
 * // Logs: 
 | 
 * // 7 
 | 
 * // Error: oops! 
 | 
 * ``` 
 | 
 * 
 | 
 * --- 
 | 
 * 
 | 
 * ### Map and flatten numbers to the sequence 'a', 'b', 'c', but throw an error for 2 
 | 
 * ```ts 
 | 
 * import { throwError, interval, of } from 'rxjs'; 
 | 
 * import { mergeMap } from 'rxjs/operators'; 
 | 
 * 
 | 
 * interval(1000).pipe( 
 | 
 *   mergeMap(x => x === 2 
 | 
 *     ? throwError('Twos are bad') 
 | 
 *     : of('a', 'b', 'c') 
 | 
 *   ), 
 | 
 * ).subscribe(x => console.log(x), e => console.error(e)); 
 | 
 * 
 | 
 * // Logs: 
 | 
 * // a 
 | 
 * // b 
 | 
 * // c 
 | 
 * // a 
 | 
 * // b 
 | 
 * // c 
 | 
 * // Twos are bad 
 | 
 * ``` 
 | 
 * 
 | 
 * @see {@link Observable} 
 | 
 * @see {@link empty} 
 | 
 * @see {@link never} 
 | 
 * @see {@link of} 
 | 
 * 
 | 
 * @param {any} error The particular Error to pass to the error notification. 
 | 
 * @param {SchedulerLike} [scheduler] A {@link SchedulerLike} to use for scheduling 
 | 
 * the emission of the error notification. 
 | 
 * @return {Observable} An error Observable: emits only the error notification 
 | 
 * using the given error argument. 
 | 
 * @static true 
 | 
 * @name throwError 
 | 
 * @owner Observable 
 | 
 */ 
 | 
export function throwError(error: any, scheduler?: SchedulerLike): Observable<never> { 
 | 
  if (!scheduler) { 
 | 
    return new Observable(subscriber => subscriber.error(error)); 
 | 
  } else { 
 | 
    return new Observable(subscriber => scheduler.schedule(dispatch, 0, { error, subscriber })); 
 | 
  } 
 | 
} 
 | 
  
 | 
interface DispatchArg { 
 | 
  error: any; 
 | 
  subscriber: Subscriber<any>; 
 | 
} 
 | 
  
 | 
function dispatch({ error, subscriber }: DispatchArg) { 
 | 
  subscriber.error(error); 
 | 
} 
 |