{"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"]}