UNPKG

@actyx/sdk

Version:
51 lines 1.49 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.bufferOp = void 0; const rxjs_1 = require("../../node_modules/rxjs"); const bufferOp = (bufferTimeSpan, maxBufferSize) => (source) => new rxjs_1.Observable((subscriber) => { let buffer = null; let timer = null; const maxBuf = maxBufferSize || Infinity; const startBuffer = (_b) => { if (buffer === null) { buffer = []; const sub = rxjs_1.asyncScheduler.schedule(emit, bufferTimeSpan); subscriber.add(sub); timer = sub; } return true; }; const cancelTimer = () => { if (timer !== null) { timer.unsubscribe(); subscriber.remove(timer); timer = null; } }; const emit = () => { const b = buffer; buffer = null; if (b != null) { cancelTimer(); subscriber.next(b); } }; const sub = source.subscribe({ next: (value) => { if (!startBuffer(buffer)) return; buffer.push(value); if (buffer.length >= maxBuf) emit(); }, error: (err) => subscriber.error(err), complete: () => { emit(); subscriber.complete(); }, }); sub.add(() => subscriber.error(new Error('cancelled'))); return sub; }); exports.bufferOp = bufferOp; //# sourceMappingURL=bufferOp.js.map