hunk.code_window: export function concat<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, O5 extends ObservableInput<any>, O6 extends ObservableInput<any>>(v1: O1, v2: O2, v3: O3, v4: O4, v5: O5, v6: O6, scheduler: SchedulerLike): Observable<ObservedValueOf<O1> | ObservedValueOf<O2> | ObservedValueOf<O3> | ObservedValueOf<O4> | ObservedValueOf<O5> | ObservedValueOf<O6>>;
   export function concat<O1 extends ObservableInput<any>>(v1: O1): Observable<ObservedValueOf<O1>>;
   export function concat<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>>(v1: O1, v2: O2): Observable<ObservedValueOf<O1> | ObservedValueOf<O2>>;
   export function concat<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>>(v1: O1, v2: O2, v3: O3): Observable<ObservedValueOf<O1> | ObservedValueOf<O2> | ObservedValueOf<O3>>;
   export function concat<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>>(v1: O1, v2: O2, v3: O3, v4: O4): Observable<ObservedValueOf<O1> | ObservedValueOf<O2> | ObservedValueOf<O3> | ObservedValueOf<O4>>;
   export function concat<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, O5 extends ObservableInput<any>>(v1: O1, v2: O2, v3: O3, v4: O4, v5: O5): Observable<ObservedValueOf<O1> | ObservedValueOf<O2> | ObservedValueOf<O3> | ObservedValueOf<O4> | ObservedValueOf<O5>>;
   export function concat<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, O5 extends ObservableInput<any>, O6 extends ObservableInput<any>>(v1: O1, v2: O2, v3: O3, v4: O4, v5: O5, v6: O6): Observable<ObservedValueOf<O1> | ObservedValueOf<O2> | ObservedValueOf<O3> | ObservedValueOf<O4> | ObservedValueOf<O5> | ObservedValueOf<O6>>;
   export function concat<O extends ObservableInput<any>>(...observables: O[]): Observable<ObservedValueOf<O>>;
   /** @deprecated Use {@link scheduled} and {@link concatAll} (e.g. `scheduled([o1, o2, o3], scheduler).pipe(concatAll())`) */
   export function concat<O extends ObservableInput<any>>(...observables: (O | SchedulerLike)[]): Observable<ObservedValueOf<O>>;
   export function concat<R>(...observables: ObservableInput<any>[]): Observable<R>;
   /** @deprecated Use {@link scheduled} and {@link concatAll} (e.g. `scheduled([o1, o2, o3], scheduler).pipe(concatAll())`) */
   export function concat<R>(...observables: (ObservableInput<any> | SchedulerLike)[]): Observable<R>;
   /* tslint:enable:max-line-length */
   /**
    * Creates an output Observable which sequentially emits all values from given
  
hunk.labels: keep keep replace replace replace replace replace replace replace replace replace replace replace replace keep keep keep
hunk.after_edit: export function concat<A extends ObservableInput<any>[]>(...observables: A): Observable<ObservedValuesFromArray<A>>;
  
hunk.file_path: src/internal/observable/concat.ts
hunk.type: replace
file: import { browser, element, by, promise, ElementFinder, ExpectedConditions } from 'protractor';
  
  const githubRegex = /https:\/\/github.com\/angular\/angular\//;
  
  export class SitePage {
  
    links = element.all(by.css('md-toolbar a'));
    homeLink = element(by.css('a.home'));
    docsMenuLink = element(by.cssContainingText('aio-top-menu a', 'Docs'));
    sidenav = element(by.css('mat-sidenav'));
    docViewer = element(by.css('aio-doc-viewer'));
    codeExample = element.all(by.css('aio-doc-viewer pre > code'));
    ghLinks = this.docViewer
      .all(by.css('a'))
      .filter((a: ElementFinder) => a.getAttribute('href').then(href => githubRegex.test(href)));
  
    static setWindowWidth(newWidth: number) {
      const win = browser.driver.manage().window();
      return win.getSize().then(oldSize => win.setSize(newWidth, oldSize.height));
    }
  
    getNavItem(pattern: RegExp) {
      return element.all(by.css('aio-nav-item .vertical-menu-item'))
                    .filter(element => element.getText().then(text => pattern.test(text)))
                    .first();
    }
    getNavItemHeadings(parent: ElementFinder, level: number) {
      const targetSelector = `aio-nav-item .vertical-menu-item.heading.level-${level}`;
      return parent.all(by.css(targetSelector));
    }
    getNavItemHeadingChildren(heading: ElementFinder, level: number) {
      const targetSelector = `.heading-children.level-${level}`;
      const script = `return arguments[0].parentNode.querySelector('${targetSelector}');`;
      return element(() => browser.executeScript(script, heading));
    }
    getTopMenuLink(path) { return element(by.css(`aio-top-menu a[href="${path}"]`)); }
  
    ga() { return browser.executeScript('return window["ga"].q') as promise.Promise<any[][]>; }
    locationPath() { return browser.executeScript('return document.location.pathname') as promise.Promise<string>; }
  
    navigateTo(pageUrl) {
      // Navigate to the page, disable animations, and wait for Angular.
      return browser.get('/' + pageUrl)
          .then(() => browser.executeScript('document.body.classList.add(\'no-animations\')'))
          .then(() => browser.waitForAngular());
    }
  
    getDocViewerText() {
      return this.docViewer.getText();
    }
  
    getInnerHtml(element) {
      // `getInnerHtml` was removed from webDriver and this is the workaround.
      // See https://github.com/angular/protractor/blob/master/CHANGELOG.md#breaking-changes
      return browser.executeScript('return arguments[0].innerHTML;', element);
    }
  
    getScrollTop() {
      return browser.executeScript('return window.pageYOffset');
    }
  
    scrollToBottom() {
      return browser.executeScript('window.scrollTo(0, document.body.scrollHeight)');
    }
  
    click(element: ElementFinder) {
      return element.click().then(() => browser.waitForAngular());
    }
  
    enterSearch(query: string) {
      const input = element(by.css('.search-container input[type=search]'));
      input.clear();
      input.sendKeys(query);
    }
  
    getSearchResults() {
      const results = element.all(by.css('.search-results li'));
      browser.wait(ExpectedConditions.presenceOf(results.first()), 8000);
      return results.map(link => link && link.getText());
    }
  }
  