{"version":3,"sources":["iterable/operators/groupby.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,MAAM,OAAO,eAA8B,SAAQ,SAAiB;IAIlE,YAAY,GAAS,EAAE,MAAwB;QAC7C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAED,CAAC,MAAM,CAAC,QAAQ,CAAC;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;IACzC,CAAC;CACF;AAED,MAAM,OAAO,eAAgD,SAAQ,SAAkB;IAMrF,YACE,MAAyB,EACzB,WAAqC,EACrC,eAA2C,EAC3C,cAAgE;QAEhE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;QACxC,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;IACxC,CAAC;IAED,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;QAChB,MAAM,GAAG,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACnF,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,GAAG,EAAE;YAC/B,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;SACzC;IACH,CAAC;CACF;AAED,MAAM,UAAU,qBAAqB,CAAe,GAAS,EAAE,MAAwB;IACrF,OAAO,IAAI,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAC1C,CAAC;AAcD,MAAM,UAAU,OAAO,CACrB,WAAqC,EACrC,kBAA8C,QAAQ,EACtD,iBAAmE,qBAAqB;IAExF,OAAO,SAAS,uBAAuB,CAAC,MAAyB;QAC/D,OAAO,IAAI,eAAe,CACxB,MAAM,EACN,WAAW,EACX,eAAe,EACf,cAAc,CACf,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC","file":"groupby.js","sourcesContent":["import { IterableX } from '../iterablex';\nimport { identity } from '../../util/identity';\nimport { createGrouping } from './_grouping';\nimport { OperatorFunction } from '../../interfaces';\n\nexport class GroupedIterable<TKey, TValue> extends IterableX<TValue> {\n  public readonly key: TKey;\n  private _source: Iterable<TValue>;\n\n  constructor(key: TKey, source: Iterable<TValue>) {\n    super();\n    this.key = key;\n    this._source = source;\n  }\n\n  [Symbol.iterator]() {\n    return this._source[Symbol.iterator]();\n  }\n}\n\nexport class GroupByIterable<TSource, TKey, TValue, TResult> extends IterableX<TResult> {\n  private _source: Iterable<TSource>;\n  private _keySelector: (value: TSource) => TKey;\n  private _elementSelector: (value: TSource) => TValue;\n  private _resultSelector: (key: TKey, values: Iterable<TValue>) => TResult;\n\n  constructor(\n    source: Iterable<TSource>,\n    keySelector: (value: TSource) => TKey,\n    elementSelector: (value: TSource) => TValue,\n    resultSelector: (key: TKey, values: Iterable<TValue>) => TResult\n  ) {\n    super();\n    this._source = source;\n    this._keySelector = keySelector;\n    this._elementSelector = elementSelector;\n    this._resultSelector = resultSelector;\n  }\n\n  *[Symbol.iterator]() {\n    const map = createGrouping(this._source, this._keySelector, this._elementSelector);\n    for (const [key, values] of map) {\n      yield this._resultSelector(key, values);\n    }\n  }\n}\n\nexport function groupByResultIdentity<TKey, TValue>(key: TKey, values: Iterable<TValue>): any {\n  return new GroupedIterable(key, values);\n}\n\nexport function groupBy<TSource, TKey>(\n  keySelector: (value: TSource) => TKey\n): OperatorFunction<TSource, GroupedIterable<TKey, TSource>>;\nexport function groupBy<TSource, TKey, TValue>(\n  keySelector: (value: TSource) => TKey,\n  elementSelector?: (value: TSource) => TValue\n): OperatorFunction<TSource, GroupedIterable<TKey, TValue>>;\nexport function groupBy<TSource, TKey, TValue, TResult>(\n  keySelector: (value: TSource) => TKey,\n  elementSelector?: (value: TSource) => TValue,\n  resultSelector?: (key: TKey, values: Iterable<TValue>) => TResult\n): OperatorFunction<TSource, TResult>;\nexport function groupBy<TSource, TKey, TValue, TResult>(\n  keySelector: (value: TSource) => TKey,\n  elementSelector: (value: TSource) => TValue = identity,\n  resultSelector: (key: TKey, values: Iterable<TValue>) => TResult = groupByResultIdentity\n): OperatorFunction<TSource, TResult> {\n  return function groupByOperatorFunction(source: Iterable<TSource>): IterableX<TResult> {\n    return new GroupByIterable<TSource, TKey, TValue, TResult>(\n      source,\n      keySelector,\n      elementSelector,\n      resultSelector\n    );\n  };\n}\n"]}