hunk.code_window:  * @see {@link concatAll}
    * @see {@link concatMap}
    * @see {@link concatMapTo}
    *
    * @param {ObservableInput} input1 An input Observable to concatenate with others.
    * @param {ObservableInput} input2 An input Observable to concatenate with others.
    * More than one input Observables may be given as argument.
  
hunk.labels: keep keep keep keep replace replace keep
hunk.after_edit:  * @param input1 An input Observable to concatenate with others.
    * @param input2 An input Observable to concatenate with others.
  
hunk.file_path: src/internal/observable/concat.ts
hunk.type: replace
file: import { ErrorHandler, Inject, Injectable } from '@angular/core';
  import { WindowToken } from './window';
  
  /**
   * Extend the default error handling to report errors to an external service - e.g Google Analytics.
   *
   * Errors outside the Angular application may also be handled by `window.onerror`.
   */
  @Injectable()
  export class ReportingErrorHandler extends ErrorHandler {
  
    constructor(@Inject(WindowToken) private window: Window) {
      super();
    }
  
    /**
     * Send error info to Google Analytics, in addition to the default handling.
     * @param error Information about the error.
     */
    handleError(error: string | Error) {
  
      try {
        super.handleError(error);
      } catch (e) {
        this.reportError(e);
      }
      this.reportError(error);
    }
  
    private reportError(error: string | Error) {
      if (this.window !== null && this.window.onerror !== null) {
        if (typeof error === 'string') {
            this.window.onerror(error);
        } else {
          this.window.onerror(error.message, undefined, undefined, undefined, error);
        }
      }
    }
  }
  