UNPKG

@reactivex/ix-esnext-esm

Version:

The Interactive Extensions for JavaScript

1 lines 5.19 kB
{"version":3,"sources":["asynciterable/operators/groupby.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,OAAO,oBAAmC,SAAQ,cAAsB;IAI5E,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,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,MAAoB;QAChD,cAAc,CAAC,MAAM,CAAC,CAAC;QACvB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE;YAC/B,MAAM,IAAI,CAAC;SACZ;IACH,CAAC;CACF;AAED,MAAM,OAAO,oBAA4C,SAAQ,cAEhE;IAKC,YACE,MAA8B,EAC9B,WAA2E,EAC3E,eAAmF;QAEnF,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,MAAoB;QAChD,cAAc,CAAC,MAAM,CAAC,CAAC;QACvB,MAAM,GAAG,GAAG,MAAM,cAAc,CAC9B,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,gBAAgB,EACrB,MAAM,CACP,CAAC;QACF,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,GAAG,EAAE;YAC/B,MAAM,IAAI,oBAAoB,CAAe,GAAG,EAAE,MAAM,CAAC,CAAC;SAC3D;IACH,CAAC;CACF;AASD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,OAAO,CACrB,WAA2E,EAC3E,kBAGgC,aAAa;IAE7C,OAAO,SAAS,uBAAuB,CACrC,MAA8B;QAE9B,OAAO,IAAI,oBAAoB,CAAwB,MAAM,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;IAC/F,CAAC,CAAC;AACJ,CAAC","file":"groupby.js","sourcesContent":["import { AsyncIterableX } from '../asynciterablex';\nimport { identityAsync } from '../../util/identity';\nimport { createGrouping } from './_grouping';\nimport { OperatorAsyncFunction } from '../../interfaces';\nimport { throwIfAborted } from '../../aborterror';\n\nexport class GroupedAsyncIterable<TKey, TValue> extends AsyncIterableX<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 async *[Symbol.asyncIterator](signal?: AbortSignal) {\n throwIfAborted(signal);\n for (const item of this._source) {\n yield item;\n }\n }\n}\n\nexport class GroupByAsyncIterable<TSource, TKey, TValue> extends AsyncIterableX<\nGroupedAsyncIterable<TKey, TValue>\n> {\n private _source: AsyncIterable<TSource>;\n private _keySelector: (value: TSource, signal?: AbortSignal) => TKey | Promise<TKey>;\n private _elementSelector: (value: TSource, signal?: AbortSignal) => TValue | Promise<TValue>;\n\n constructor(\n source: AsyncIterable<TSource>,\n keySelector: (value: TSource, signal?: AbortSignal) => TKey | Promise<TKey>,\n elementSelector: (value: TSource, signal?: AbortSignal) => TValue | Promise<TValue>\n ) {\n super();\n this._source = source;\n this._keySelector = keySelector;\n this._elementSelector = elementSelector;\n }\n\n async *[Symbol.asyncIterator](signal?: AbortSignal) {\n throwIfAborted(signal);\n const map = await createGrouping(\n this._source,\n this._keySelector,\n this._elementSelector,\n signal\n );\n for (const [key, values] of map) {\n yield new GroupedAsyncIterable<TKey, TValue>(key, values);\n }\n }\n}\n\nexport function groupBy<TSource, TKey>(\n keySelector: (value: TSource, signal?: AbortSignal) => TKey | Promise<TKey>\n): OperatorAsyncFunction<TSource, GroupedAsyncIterable<TKey, TSource>>;\nexport function groupBy<TSource, TKey, TValue>(\n keySelector: (value: TSource, signal?: AbortSignal) => TKey | Promise<TKey>,\n elementSelector?: (value: TSource, signal?: AbortSignal) => TValue | Promise<TValue>\n): OperatorAsyncFunction<TSource, GroupedAsyncIterable<TKey, TValue>>;\n/**\n * Groups the elements of an async-iterable sequence and selects the resulting elements by using a specified function.\n *\n * @export\n * @template TSource The type of the elements in the source sequence.\n * @template TKey The type of the grouping key computed for each element in the source sequence.\n * @template TValue The type of the elements within the groups computed for each element in the source sequence.\n * @param {((value: TSource, signal?: AbortSignal) => TKey | Promise<TKey>)} keySelector A function to extract the key for each element.\n * @param {((\n * value: TSource,\n * signal?: AbortSignal\n * ) => TValue | Promise<TValue>)} [elementSelector=identityAsync] A function to map each source element to an element in an async-enumerable group.\n * @returns {OperatorAsyncFunction<TSource, TResult>} A sequence of async-iterable groups, each of which corresponds to a unique key value,\n * containing all elements that share that same key value.\n */\nexport function groupBy<TSource, TKey, TValue>(\n keySelector: (value: TSource, signal?: AbortSignal) => TKey | Promise<TKey>,\n elementSelector: (\n value: TSource,\n signal?: AbortSignal\n ) => TValue | Promise<TValue> = identityAsync\n): OperatorAsyncFunction<TSource, GroupedAsyncIterable<TKey, TValue>> {\n return function groupByOperatorFunction(\n source: AsyncIterable<TSource>\n ): AsyncIterableX<GroupedAsyncIterable<TKey, TValue>> {\n return new GroupByAsyncIterable<TSource, TKey, TValue>(source, keySelector, elementSelector);\n };\n}\n"]}