import type { SegmentEvent } from '../types'; import { FlushPolicyBase } from './types'; /** * A Timer based flush policy. * * Flushes events on an interval. */ export class TimerFlushPolicy extends FlushPolicyBase { private flushTimeout!: ReturnType; private interval: number; private startTimer() { clearTimeout(this.flushTimeout); this.flushTimeout = setTimeout(() => { this.shouldFlush.value = true; }, this.interval); } /** * @param interval interval to flush in milliseconds */ constructor(interval: number) { super(); this.interval = interval; } start(): void { this.startTimer(); } end(): void { clearTimeout(this.flushTimeout); } onEvent(_event: SegmentEvent): void { // Reset interval this.startTimer(); } reset(): void { super.reset(); this.startTimer(); } }