@reactivex/ix-esnext-esm
Version:
The Interactive Extensions for JavaScript
1 lines • 3.47 kB
Source Map (JSON)
{"version":3,"sources":["asynciterable/operators/_extremaby.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAI,GAAM,EAAE,QAAW;IAC9D,6CAA6C;IAC7C,OAAO,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,MAAM,sBAAsC,SAAQ,cAAuB;IAKzE,YACE,MAA8B,EAC9B,KAA2C,EAC3C,GAAmD;QAEnD,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;QAC3B,IAAI,MAAM,GAAc,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC;QACT,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;QAChD,IAAI,CAAC,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;YACjC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;SAClD;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;QAC3B,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAErB,OAAO,CAAC,CAAC,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;YACrC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;YACxB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACpC,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YACvC,IAAI,CAAC,KAAK,CAAC,EAAE;gBACX,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACnB;iBAAM,IAAI,CAAC,GAAG,CAAC,EAAE;gBAChB,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;gBAChB,MAAM,GAAG,GAAG,CAAC;aACd;SACF;QAED,KAAK,CAAC,CAAC,MAAM,CAAC;IAChB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CACvB,MAA8B,EAC9B,KAA2C,EAC3C,GAAmD;IAEnD,OAAO,IAAI,sBAAsB,CAAgB,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;AACvE,CAAC","file":"_extremaby.js","sourcesContent":["import { AsyncIterableX } from '../asynciterablex';\n\n/**\n * @ignore\n */\nexport async function defaultCompareAsync<T>(key: T, minValue: T): Promise<number> {\n // eslint-disable-next-line no-nested-ternary\n return key > minValue ? 1 : key < minValue ? -1 : 0;\n}\n\n/**\n * @ignore\n */\nclass ExtremaByAsyncIterator<TSource, TKey> extends AsyncIterableX<TSource> {\n private _source: AsyncIterable<TSource>;\n private _keyFn: (x: TSource) => TKey | Promise<TKey>;\n private _cmp: (x: TKey, y: TKey) => number | Promise<number>;\n\n constructor(\n source: AsyncIterable<TSource>,\n keyFn: (x: TSource) => TKey | Promise<TKey>,\n cmp: (x: TKey, y: TKey) => number | Promise<number>\n ) {\n super();\n this._source = source;\n this._keyFn = keyFn;\n this._cmp = cmp;\n }\n\n async *[Symbol.asyncIterator]() {\n let result: TSource[] = [];\n let next;\n const it = this._source[Symbol.asyncIterator]();\n if ((next = await it.next()).done) {\n throw new Error('Sequence contains no elements');\n }\n\n const current = next.value;\n let resKey = await this._keyFn(current);\n result.push(current);\n\n while (!(next = await it.next()).done) {\n const curr = next.value;\n const key = await this._keyFn(curr);\n const c = await this._cmp(key, resKey);\n if (c === 0) {\n result.push(curr);\n } else if (c > 0) {\n result = [curr];\n resKey = key;\n }\n }\n\n yield* result;\n }\n}\n\n/**\n * @ignore\n */\nexport function extremaBy<TSource, TKey>(\n source: AsyncIterable<TSource>,\n keyFn: (x: TSource) => TKey | Promise<TKey>,\n cmp: (x: TKey, y: TKey) => number | Promise<number>\n): AsyncIterableX<TSource> {\n return new ExtremaByAsyncIterator<TSource, TKey>(source, keyFn, cmp);\n}\n"]}