UNPKG

@reactivex/ix-esnext-esm

Version:

The Interactive Extensions for JavaScript

1 lines 4.12 kB
{"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"]}