UNPKG

@reactivex/ix-es5-esm

Version:

The Interactive Extensions for JavaScript

124 lines (122 loc) 5.55 kB
import { __asyncGenerator, __asyncValues, __await, __extends, __generator, __values } from "tslib"; import { AsyncIterableX } from '../asynciterablex.js'; import { wrapWithAbort } from './withabort.js'; import { throwIfAborted } from '../../aborterror.js'; /** @ignore */ var BufferAsyncIterable = /** @class */ (function (_super) { __extends(BufferAsyncIterable, _super); function BufferAsyncIterable(source, count, skip) { var _this = _super.call(this) || this; _this._source = source; _this._count = count; _this._skip = skip; return _this; } BufferAsyncIterable.prototype[Symbol.asyncIterator] = function (signal) { return __asyncGenerator(this, arguments, function _a() { var buffers, i, _b, _c, _d, item, buffers_1, buffers_1_1, buff, e_1_1; var e_2, _e; var _f, e_1, _g, _h; return __generator(this, function (_j) { switch (_j.label) { case 0: throwIfAborted(signal); buffers = []; i = 0; _j.label = 1; case 1: _j.trys.push([1, 9, 10, 15]); _b = true, _c = __asyncValues(wrapWithAbort(this._source, signal)); _j.label = 2; case 2: return [4 /*yield*/, __await(_c.next())]; case 3: if (!(_d = _j.sent(), _f = _d.done, !_f)) return [3 /*break*/, 8]; _h = _d.value; _b = false; item = _h; if (i % this._skip === 0) { buffers.push([]); } try { for (buffers_1 = (e_2 = void 0, __values(buffers)), buffers_1_1 = buffers_1.next(); !buffers_1_1.done; buffers_1_1 = buffers_1.next()) { buff = buffers_1_1.value; buff.push(item); } } catch (e_2_1) { e_2 = { error: e_2_1 }; } finally { try { if (buffers_1_1 && !buffers_1_1.done && (_e = buffers_1.return)) _e.call(buffers_1); } finally { if (e_2) throw e_2.error; } } if (!(buffers.length > 0 && buffers[0].length === this._count)) return [3 /*break*/, 6]; return [4 /*yield*/, __await(buffers.shift())]; case 4: return [4 /*yield*/, _j.sent()]; case 5: _j.sent(); _j.label = 6; case 6: i++; _j.label = 7; case 7: _b = true; return [3 /*break*/, 2]; case 8: return [3 /*break*/, 15]; case 9: e_1_1 = _j.sent(); e_1 = { error: e_1_1 }; return [3 /*break*/, 15]; case 10: _j.trys.push([10, , 13, 14]); if (!(!_b && !_f && (_g = _c.return))) return [3 /*break*/, 12]; return [4 /*yield*/, __await(_g.call(_c))]; case 11: _j.sent(); _j.label = 12; case 12: return [3 /*break*/, 14]; case 13: if (e_1) throw e_1.error; return [7 /*endfinally*/]; case 14: return [7 /*endfinally*/]; case 15: if (!(buffers.length > 0)) return [3 /*break*/, 18]; return [4 /*yield*/, __await(buffers.shift())]; case 16: return [4 /*yield*/, _j.sent()]; case 17: _j.sent(); return [3 /*break*/, 15]; case 18: return [2 /*return*/]; } }); }); }; return BufferAsyncIterable; }(AsyncIterableX)); export { BufferAsyncIterable }; /** * Projects each element of an async-iterable sequence into consecutive non-overlapping * buffers which are produced based on element count information. * * @template TSource The type of elements in the source sequence. * @param {number} count The length of each buffer. * @param {number} [skip] An optional number of elements to skip between creation of consecutive buffers. * @returns {OperatorAsyncFunction<TSource, TSource[]>} An operator which returns anm async-iterable sequence with * consecutive non-overlapping buffers based upon element count information. */ export function buffer(count, skip) { var s = skip; if (s == null) { s = count; } return function bufferOperatorFunction(source) { return new BufferAsyncIterable(source, count, s); }; } /** * Projects each element of an async-iterable sequence into consecutive non-overlapping * buffers which are produced based on element count information. * @param count Length of each buffer. * @param skip Number of elements to skip between creation of consecutive buffers. */ //# sourceMappingURL=buffer.js.map