UNPKG

@reactivex/ix-esnext-esm

Version:

The Interactive Extensions for JavaScript

1 lines 7.75 kB
{"version":3,"sources":["asynciterable/operators/orderby.ts"],"names":[],"mappings":"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","file":"orderby.js","sourcesContent":["import { AsyncIterableX } from '../asynciterablex';\nimport { toArray } from '../toarray';\nimport { sorter as defaultSorter } from '../../util/sorter';\nimport { UnaryFunction } from '../../interfaces';\n\nexport abstract class OrderedAsyncIterableBaseX<TSource> extends AsyncIterableX<TSource> {\n _source: AsyncIterable<TSource>;\n\n constructor(source: AsyncIterable<TSource>) {\n super();\n this._source = source;\n }\n\n async *[Symbol.asyncIterator]() {\n const array = await toArray(this._source);\n const len = array.length;\n const indices = new Array<number>(len);\n for (let i = 0; i < len; i++) {\n indices[i] = i;\n }\n\n indices.sort(this._getSorter(array));\n for (const index of indices) {\n yield array[index];\n }\n }\n\n thenBy<TKey>(\n keySelector: (item: TSource) => TKey,\n comparer: (fst: TKey, snd: TKey) => number = defaultSorter\n ): OrderedAsyncIterableBaseX<TSource> {\n return new OrderedAsyncIterableX<TKey, TSource>(\n this._source,\n keySelector,\n comparer,\n false,\n this\n );\n }\n\n thenByDescending<TKey>(\n keySelector: (item: TSource) => TKey,\n comparer: (fst: TKey, snd: TKey) => number = defaultSorter\n ): OrderedAsyncIterableBaseX<TSource> {\n return new OrderedAsyncIterableX<TKey, TSource>(\n this._source,\n keySelector,\n comparer,\n true,\n this\n );\n }\n\n abstract _getSorter(\n elements: TSource[],\n next?: (x: number, y: number) => number\n ): (x: number, y: number) => number;\n}\n\nexport class OrderedAsyncIterableX<TKey, TSource> extends OrderedAsyncIterableBaseX<TSource> {\n private _keySelector: (item: TSource) => TKey;\n private _comparer: (fst: TKey, snd: TKey) => number;\n private _descending: boolean;\n private _parent?: OrderedAsyncIterableBaseX<TSource>;\n\n constructor(\n source: AsyncIterable<TSource>,\n keySelector: (item: TSource) => TKey,\n comparer: (fst: TKey, snd: TKey) => number,\n descending: boolean,\n parent?: OrderedAsyncIterableBaseX<TSource>\n ) {\n super(source);\n this._keySelector = keySelector;\n this._comparer = comparer;\n this._descending = descending;\n this._parent = parent;\n }\n\n _getSorter(\n elements: TSource[],\n next?: (x: number, y: number) => number\n ): (x: number, y: number) => number {\n const keys = elements.map(this._keySelector);\n const comparer = this._comparer;\n const parent = this._parent;\n const descending = this._descending;\n const sorter = (x: number, y: number): number => {\n const result = comparer(keys[x], keys[y]);\n if (result === 0) {\n return next ? next(x, y) : x - y;\n }\n\n return descending ? -result : result;\n };\n\n return parent ? parent._getSorter(elements, sorter) : sorter;\n }\n}\n\nexport function orderBy<TKey, TSource>(\n keySelector: (item: TSource) => TKey,\n comparer: (fst: TKey, snd: TKey) => number = defaultSorter\n): UnaryFunction<AsyncIterable<TSource>, OrderedAsyncIterableX<TKey, TSource>> {\n return function orderByOperatorFunction(source: AsyncIterable<TSource>) {\n return new OrderedAsyncIterableX<TKey, TSource>(source, keySelector, comparer, false);\n };\n}\n\nexport function orderByDescending<TKey, TSource>(\n keySelector: (item: TSource) => TKey,\n comparer: (fst: TKey, snd: TKey) => number = defaultSorter\n): UnaryFunction<AsyncIterable<TSource>, OrderedAsyncIterableX<TKey, TSource>> {\n return function orderByDescendingOperatorFunction(source: AsyncIterable<TSource>) {\n return new OrderedAsyncIterableX<TKey, TSource>(source, keySelector, comparer, true);\n };\n}\n\nexport function thenBy<TKey, TSource>(\n keySelector: (item: TSource) => TKey,\n comparer: (fst: TKey, snd: TKey) => number = defaultSorter\n): UnaryFunction<AsyncIterable<TSource>, OrderedAsyncIterableX<TKey, TSource>> {\n return function thenByOperatorFunction(source: AsyncIterable<TSource>) {\n const orderSource = <OrderedAsyncIterableBaseX<TSource>>source;\n return new OrderedAsyncIterableX<TKey, TSource>(\n orderSource._source,\n keySelector,\n comparer,\n false,\n orderSource\n );\n };\n}\n\nexport function thenByDescending<TKey, TSource>(\n keySelector: (item: TSource) => TKey,\n comparer: (fst: TKey, snd: TKey) => number = defaultSorter\n): UnaryFunction<AsyncIterable<TSource>, OrderedAsyncIterableX<TKey, TSource>> {\n return function thenByDescendingOperatorFunction(source: AsyncIterable<TSource>) {\n const orderSource = <OrderedAsyncIterableBaseX<TSource>>source;\n return new OrderedAsyncIterableX<TKey, TSource>(\n orderSource._source,\n keySelector,\n comparer,\n true,\n orderSource\n );\n };\n}\n"]}