@reactivex/ix-es5-esm
Version:
The Interactive Extensions for JavaScript
65 lines (63 loc) • 2.48 kB
JavaScript
import { __asyncValues, __awaiter, __generator } from "tslib";
import { wrapWithAbort } from './withabort.js';
/**
* @ignore
*/
export function createGrouping(source, keySelector, elementSelector, signal) {
var _a, e_1, _b, _c;
return __awaiter(this, void 0, void 0, function () {
var map, _d, _e, _f, item, key, grouping, element, e_1_1;
return __generator(this, function (_g) {
switch (_g.label) {
case 0:
map = new Map();
_g.label = 1;
case 1:
_g.trys.push([1, 8, 9, 14]);
_d = true, _e = __asyncValues(wrapWithAbort(source, signal));
_g.label = 2;
case 2: return [4 /*yield*/, _e.next()];
case 3:
if (!(_f = _g.sent(), _a = _f.done, !_a)) return [3 /*break*/, 7];
_c = _f.value;
_d = false;
item = _c;
return [4 /*yield*/, keySelector(item, signal)];
case 4:
key = _g.sent();
grouping = map.get(key);
if (!map.has(key)) {
grouping = [];
map.set(key, grouping);
}
return [4 /*yield*/, elementSelector(item, signal)];
case 5:
element = _g.sent();
grouping.push(element);
_g.label = 6;
case 6:
_d = true;
return [3 /*break*/, 2];
case 7: return [3 /*break*/, 14];
case 8:
e_1_1 = _g.sent();
e_1 = { error: e_1_1 };
return [3 /*break*/, 14];
case 9:
_g.trys.push([9, , 12, 13]);
if (!(!_d && !_a && (_b = _e.return))) return [3 /*break*/, 11];
return [4 /*yield*/, _b.call(_e)];
case 10:
_g.sent();
_g.label = 11;
case 11: return [3 /*break*/, 13];
case 12:
if (e_1) throw e_1.error;
return [7 /*endfinally*/];
case 13: return [7 /*endfinally*/];
case 14: return [2 /*return*/, map];
}
});
});
}
//# sourceMappingURL=_grouping.js.map