UNPKG

iter-tools-es

Version:
59 lines (46 loc) 1.22 kB
const { asyncIterableCurry } = require('../../internal/async-iterable.js'); const { CircularBuffer, ReadOnlyCircularBuffer } = require('../../internal/circular-buffer.js'); async function* __asyncWindowAhead(source, size, { filler = undefined, useFiller = true } = {}) { const buffer = new CircularBuffer(size); const bufferReadProxy = new ReadOnlyCircularBuffer(buffer); let len = 0; for await (const value of source) { buffer.push(value); if (buffer.isFull()) { yield bufferReadProxy; } len++; } if (useFiller) { for (let i = len; i < size; i++) { buffer.push(filler); } } if (len > 0 && len < size) yield bufferReadProxy; for (let i = 0; i < Math.min(size, len) - 1; i++) { buffer.shift(); if (useFiller) { buffer.push(filler); } yield bufferReadProxy; } } exports.__asyncWindowAhead = __asyncWindowAhead; const asyncWindowAhead = /*#__PURE__*/asyncIterableCurry(__asyncWindowAhead, { minArgs: 1, maxArgs: 2, validateArgs(args) { if (typeof args[1] !== 'number') { throw new Error(`${'asyncWindowAhead'} must be passed a numeric size`); } } }); exports.asyncWindowAhead = asyncWindowAhead;