Buckets:
| import { Subscription } from '../Subscription'; | |
| import { operate } from '../util/lift'; | |
| import { createOperatorSubscriber } from './OperatorSubscriber'; | |
| import { arrRemove } from '../util/arrRemove'; | |
| import { asyncScheduler } from '../scheduler/async'; | |
| import { popScheduler } from '../util/args'; | |
| import { executeSchedule } from '../util/executeSchedule'; | |
| export function bufferTime(bufferTimeSpan, ...otherArgs) { | |
| var _a, _b; | |
| const scheduler = (_a = popScheduler(otherArgs)) !== null && _a !== void 0 ? _a : asyncScheduler; | |
| const bufferCreationInterval = (_b = otherArgs[0]) !== null && _b !== void 0 ? _b : null; | |
| const maxBufferSize = otherArgs[1] || Infinity; | |
| return operate((source, subscriber) => { | |
| let bufferRecords = []; | |
| let restartOnEmit = false; | |
| const emit = (record) => { | |
| const { buffer, subs } = record; | |
| subs.unsubscribe(); | |
| arrRemove(bufferRecords, record); | |
| subscriber.next(buffer); | |
| restartOnEmit && startBuffer(); | |
| }; | |
| const startBuffer = () => { | |
| if (bufferRecords) { | |
| const subs = new Subscription(); | |
| subscriber.add(subs); | |
| const buffer = []; | |
| const record = { | |
| buffer, | |
| subs, | |
| }; | |
| bufferRecords.push(record); | |
| executeSchedule(subs, scheduler, () => emit(record), bufferTimeSpan); | |
| } | |
| }; | |
| if (bufferCreationInterval !== null && bufferCreationInterval >= 0) { | |
| executeSchedule(subscriber, scheduler, startBuffer, bufferCreationInterval, true); | |
| } | |
| else { | |
| restartOnEmit = true; | |
| } | |
| startBuffer(); | |
| const bufferTimeSubscriber = createOperatorSubscriber(subscriber, (value) => { | |
| const recordsCopy = bufferRecords.slice(); | |
| for (const record of recordsCopy) { | |
| const { buffer } = record; | |
| buffer.push(value); | |
| maxBufferSize <= buffer.length && emit(record); | |
| } | |
| }, () => { | |
| while (bufferRecords === null || bufferRecords === void 0 ? void 0 : bufferRecords.length) { | |
| subscriber.next(bufferRecords.shift().buffer); | |
| } | |
| bufferTimeSubscriber === null || bufferTimeSubscriber === void 0 ? void 0 : bufferTimeSubscriber.unsubscribe(); | |
| subscriber.complete(); | |
| subscriber.unsubscribe(); | |
| }, undefined, () => (bufferRecords = null)); | |
| source.subscribe(bufferTimeSubscriber); | |
| }); | |
| } | |
| //# sourceMappingURL=bufferTime.js.map |
Xet Storage Details
- Size:
- 2.65 kB
- Xet hash:
- d50607c3c5b0e5b634ef33cf7911dbd94697b137510a9c4fdad8d16ab14aca75
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.