UNPKG

@reactivex/ix-es5-esm

Version:

The Interactive Extensions for JavaScript

49 lines (47 loc) 1.98 kB
import { __awaiter, __generator } from "tslib"; import { throwIfAborted } from '../aborterror.js'; import { wrapWithAbort } from './operators/withabort.js'; export function extremaBy(source, selector, comparer, signal) { return __awaiter(this, void 0, void 0, function () { var result, it, _a, value, done, resKey, next, current, key, cmp; return __generator(this, function (_b) { switch (_b.label) { case 0: throwIfAborted(signal); result = []; it = wrapWithAbort(source, signal)[Symbol.asyncIterator](); return [4 /*yield*/, it.next()]; case 1: _a = _b.sent(), value = _a.value, done = _a.done; if (done) { throw new Error('Sequence contains no elements'); } return [4 /*yield*/, selector(value, signal)]; case 2: resKey = _b.sent(); result.push(value); _b.label = 3; case 3: return [4 /*yield*/, it.next()]; case 4: if (!!(next = _b.sent()).done) return [3 /*break*/, 7]; current = next.value; return [4 /*yield*/, selector(current, signal)]; case 5: key = _b.sent(); return [4 /*yield*/, comparer(key, resKey, signal)]; case 6: cmp = _b.sent(); if (cmp === 0) { result.push(current); } else if (cmp > 0) { result = [current]; resKey = key; } return [3 /*break*/, 3]; case 7: return [2 /*return*/, result]; } }); }); } //# sourceMappingURL=_extremaby.js.map