import { Observable } from '../Observable'; 
 | 
import { Subscriber } from '../Subscriber'; 
 | 
import { SchedulerLike } from '../types'; 
 | 
import { isFunction } from '../util/isFunction'; 
 | 
  
 | 
/** 
 | 
 * Creates an observable that will create an error instance and push it to the consumer as an error 
 | 
 * immediately upon subscription. 
 | 
 * 
 | 
 * <span class="informal">Just errors and does nothing else</span> 
 | 
 * 
 | 
 *  
 | 
 * 
 | 
 * This creation function is useful for creating an observable that will create an error and error every 
 | 
 * time it is subscribed to. Generally, inside of most operators when you might want to return an errored 
 | 
 * observable, this is unnecessary. In most cases, such as in the inner return of {@link concatMap}, 
 | 
 * {@link mergeMap}, {@link defer}, and many others, you can simply throw the error, and RxJS will pick 
 | 
 * that up and notify the consumer of the error. 
 | 
 * 
 | 
 * ## Example 
 | 
 * 
 | 
 * Create a simple observable that will create a new error with a timestamp and log it 
 | 
 * and the message every time you subscribe to it 
 | 
 * 
 | 
 * ```ts 
 | 
 * import { throwError } from 'rxjs'; 
 | 
 * 
 | 
 * let errorCount = 0; 
 | 
 * 
 | 
 * const errorWithTimestamp$ = throwError(() => { 
 | 
 *   const error: any = new Error(`This is error number ${ ++errorCount }`); 
 | 
 *   error.timestamp = Date.now(); 
 | 
 *   return error; 
 | 
 * }); 
 | 
 * 
 | 
 * errorWithTimestamp$.subscribe({ 
 | 
 *   error: err => console.log(err.timestamp, err.message) 
 | 
 * }); 
 | 
 * 
 | 
 * errorWithTimestamp$.subscribe({ 
 | 
 *   error: err => console.log(err.timestamp, err.message) 
 | 
 * }); 
 | 
 * 
 | 
 * // Logs the timestamp and a new error message for each subscription 
 | 
 * ``` 
 | 
 * 
 | 
 * ### Unnecessary usage 
 | 
 * 
 | 
 * Using `throwError` inside of an operator or creation function 
 | 
 * with a callback, is usually not necessary 
 | 
 * 
 | 
 * ```ts 
 | 
 * import { of, concatMap, timer, throwError } from 'rxjs'; 
 | 
 * 
 | 
 * const delays$ = of(1000, 2000, Infinity, 3000); 
 | 
 * 
 | 
 * delays$.pipe( 
 | 
 *   concatMap(ms => { 
 | 
 *     if (ms < 10000) { 
 | 
 *       return timer(ms); 
 | 
 *     } else { 
 | 
 *       // This is probably overkill. 
 | 
 *       return throwError(() => new Error(`Invalid time ${ ms }`)); 
 | 
 *     } 
 | 
 *   }) 
 | 
 * ) 
 | 
 * .subscribe({ 
 | 
 *   next: console.log, 
 | 
 *   error: console.error 
 | 
 * }); 
 | 
 * ``` 
 | 
 * 
 | 
 * You can just throw the error instead 
 | 
 * 
 | 
 * ```ts 
 | 
 * import { of, concatMap, timer } from 'rxjs'; 
 | 
 * 
 | 
 * const delays$ = of(1000, 2000, Infinity, 3000); 
 | 
 * 
 | 
 * delays$.pipe( 
 | 
 *   concatMap(ms => { 
 | 
 *     if (ms < 10000) { 
 | 
 *       return timer(ms); 
 | 
 *     } else { 
 | 
 *       // Cleaner and easier to read for most folks. 
 | 
 *       throw new Error(`Invalid time ${ ms }`); 
 | 
 *     } 
 | 
 *   }) 
 | 
 * ) 
 | 
 * .subscribe({ 
 | 
 *   next: console.log, 
 | 
 *   error: console.error 
 | 
 * }); 
 | 
 * ``` 
 | 
 * 
 | 
 * @param errorFactory A factory function that will create the error instance that is pushed. 
 | 
 */ 
 | 
export function throwError(errorFactory: () => any): Observable<never>; 
 | 
  
 | 
/** 
 | 
 * Returns an observable that will error with the specified error immediately upon subscription. 
 | 
 * 
 | 
 * @param error The error instance to emit 
 | 
 * @deprecated Support for passing an error value will be removed in v8. Instead, pass a factory function to `throwError(() => new Error('test'))`. This is 
 | 
 * because it will create the error at the moment it should be created and capture a more appropriate stack trace. If 
 | 
 * for some reason you need to create the error ahead of time, you can still do that: `const err = new Error('test'); throwError(() => err);`. 
 | 
 */ 
 | 
export function throwError(error: any): Observable<never>; 
 | 
  
 | 
/** 
 | 
 * Notifies the consumer of an error using a given scheduler by scheduling it at delay `0` upon subscription. 
 | 
 * 
 | 
 * @param errorOrErrorFactory An error instance or error factory 
 | 
 * @param scheduler A scheduler to use to schedule the error notification 
 | 
 * @deprecated The `scheduler` parameter will be removed in v8. 
 | 
 * Use `throwError` in combination with {@link observeOn}: `throwError(() => new Error('test')).pipe(observeOn(scheduler));`. 
 | 
 * Details: https://rxjs.dev/deprecations/scheduler-argument 
 | 
 */ 
 | 
export function throwError(errorOrErrorFactory: any, scheduler: SchedulerLike): Observable<never>; 
 | 
  
 | 
export function throwError(errorOrErrorFactory: any, scheduler?: SchedulerLike): Observable<never> { 
 | 
  const errorFactory = isFunction(errorOrErrorFactory) ? errorOrErrorFactory : () => errorOrErrorFactory; 
 | 
  const init = (subscriber: Subscriber<never>) => subscriber.error(errorFactory()); 
 | 
  return new Observable(scheduler ? (subscriber) => scheduler.schedule(init as any, 0, subscriber) : init); 
 | 
} 
 |