@reactivex/ix-es5-esm
Version:
The Interactive Extensions for JavaScript
49 lines (47 loc) • 1.98 kB
JavaScript
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