import { type IStream, type ITime } from '../../stream/index.js'; interface IBufferEvents { interval: ITime; maxSize?: number; prune?: boolean; } /** * Buffer events from a stream into arrays based on time period and/or max size * * Two core behaviors: * 1. **Time-based buffering**: Collects events during each period interval * 2. **Overflow handling**: if prune is false, buffer exceeds maxSize, excess events carry over to next period * * stream: 12345678-9------AB--C----D---> * bufferEvents({period: 10, maxSize: 4}): * output: ---------a------b---c----d--e-> * | | | | | * | | | | +-- e=[D] (t30) * | | | +-- d=[C] (t20) * | | +-- c=[9,A,B] (t20) * | +-- b=[5,6,7,8] (t10), kept [9] * +-- a=[1,2,3,4] (t10), kept [5,6,7,8,9] * * With prune=true: Discards old events to keep only maxSize newest per period * stream: 12345678-9------AB--C----D---> * output: ---------a------b---c----d--e-> * | | | | | * | | | | +-- e=[D] (t30) * | | | +-- d=[C] (t20) * | | +-- c=[A,B] (t20) * | +-- b=[9] (t10) * +-- a=[5,6,7,8] (t10), discarded [1,2,3,4] * * Load spreading: Ensures consistent batch sizes of ≤maxSize per period */ export declare const bufferEvents: IBufferEventsCurry; export interface IBufferEventsCurry { (options: IBufferEvents, source: IStream): IStream; (options: IBufferEvents): (source: IStream) => IStream; } export {};