text: /** PURE_IMPORTS_START .._operators_groupBy PURE_IMPORTS_END */
  import { groupBy as higherOrder, GroupedObservable } from '../operators/groupBy';
  export { GroupedObservable };
  /* tslint:enable:max-line-length */
  /**
   * Groups the items emitted by an Observable according to a specified criterion,
   * and emits these grouped items as `GroupedObservables`, one
   * {@link GroupedObservable} per group.
   *
   * <img src="./img/groupBy.png" width="100%">
   *
   * @example <caption>Group objects by id and return as array</caption>
   * Observable.of<Obj>({id: 1, name: 'aze1'},
   *                    {id: 2, name: 'sf2'},
   *                    {id: 2, name: 'dg2'},
   *                    {id: 1, name: 'erg1'},
   *                    {id: 1, name: 'df1'},
   *                    {id: 2, name: 'sfqfb2'},
   *                    {id: 3, name: 'qfs3'},
   *                    {id: 2, name: 'qsgqsfg2'}
   *     )
   *     .groupBy(p => p.id)
   *     .flatMap( (group$) => group$.reduce((acc, cur) => [...acc, cur], []))
   *     .subscribe(p => console.log(p));
   *
   * // displays:
   * // [ { id: 1, name: 'aze1' },
   * //   { id: 1, name: 'erg1' },
   * //   { id: 1, name: 'df1' } ]
   * //
   * // [ { id: 2, name: 'sf2' },
   * //   { id: 2, name: 'dg2' },
   * //   { id: 2, name: 'sfqfb2' },
   * //   { id: 2, name: 'qsgqsfg2' } ]
   * //
   * // [ { id: 3, name: 'qfs3' } ]
   *
   * @example <caption>Pivot data on the id field</caption>
   * Observable.of<Obj>({id: 1, name: 'aze1'},
   *                    {id: 2, name: 'sf2'},
   *                    {id: 2, name: 'dg2'},
   *                    {id: 1, name: 'erg1'},
   *                    {id: 1, name: 'df1'},
   *                    {id: 2, name: 'sfqfb2'},
   *                    {id: 3, name: 'qfs1'},
   *                    {id: 2, name: 'qsgqsfg2'}
   *                   )
   *     .groupBy(p => p.id, p => p.name)
   *     .flatMap( (group$) => group$.reduce((acc, cur) => [...acc, cur], ["" + group$.key]))
   *     .map(arr => ({'id': parseInt(arr[0]), 'values': arr.slice(1)}))
   *     .subscribe(p => console.log(p));
   *
   * // displays:
   * // { id: 1, values: [ 'aze1', 'erg1', 'df1' ] }
   * // { id: 2, values: [ 'sf2', 'dg2', 'sfqfb2', 'qsgqsfg2' ] }
   * // { id: 3, values: [ 'qfs1' ] }
   *
   * @param {function(value: T): K} keySelector A function that extracts the key
   * for each item.
   * @param {function(value: T): R} [elementSelector] A function that extracts the
   * return element for each item.
   * @param {function(grouped: GroupedObservable<K,R>): Observable<any>} [durationSelector]
   * A function that returns an Observable to determine how long each group should
   * exist.
   * @return {Observable<GroupedObservable<K,R>>} An Observable that emits
   * GroupedObservables, each of which corresponds to a unique key value and each
   * of which emits those items from the source Observable that share that key
   * value.
   * @method groupBy
   * @owner Observable
   */
  export function groupBy(keySelector, elementSelector, durationSelector, subjectSelector) {
      return higherOrder(keySelector, elementSelector, durationSelector, subjectSelector)(this);
  }
  //# sourceMappingURL=groupBy.js.map
  