@actyx/sdk
Version:
Actyx SDK
51 lines • 1.49 kB
JavaScript
;
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