interface Result { headers: Headers; buffer: Uint8Array; } interface Req { start: number; end: number; reject: (arg: unknown) => void; resolve: (arg: Result) => void; requestOptions: { signal?: AbortSignal; }; } interface ReqGroup { requests: Req[]; url: string; start: number; end: number; } /** * takes fetch requests and aggregates them at a certain time frequency */ export default class AggregatingFetcher { timeout: unknown; requestQueues: Record; fetchCallback: (url: string, start: number, end: number, arg: { signal?: AbortSignal; }) => Promise; frequency: number; maxExtraSize: number; maxFetchSize: number; /** * * @param params * @param [params.frequency] number of milliseconds to wait for requests to aggregate */ constructor({ fetch, frequency, maxExtraSize, maxFetchSize, }: { fetch: (url: string, start: number, end: number) => Promise; frequency?: number; maxExtraSize?: number; maxFetchSize?: number; }); _canAggregate(requestGroup: ReqGroup, request: Req): boolean; _allSignalsFired(signals: AbortSignal[]): Promise; _dispatch({ url, start, end, requests }: ReqGroup): void; _aggregateAndDispatch(): void; _enQueue(url: string, request: Req): void; /** * * @param url * @param start 0-based half-open * @param end 0-based half-open * @param [requestOptions] options passed to the underlying fetch call */ fetch(url: string, start: number, end: number, requestOptions?: {}): Promise; } export {};