import { CancellationToken } from "./cancellation.js"; import { Event } from "./event.js"; /** * A Pager is a stateless abstraction over a paged collection. */ export interface IPager { firstPage: T[]; total: number; pageSize: number; getPage(pageIndex: number, cancellationToken: CancellationToken): Promise; } export interface IIterativePage { readonly items: T[]; readonly hasMore: boolean; } export interface IIterativePager { readonly firstPage: IIterativePage; getNextPage(cancellationToken: CancellationToken): Promise>; } export interface IPageIterator { elements: T[]; total: number; hasNextPage: boolean; getNextPage(cancellationToken: CancellationToken): Promise>; } /** * A PagedModel is a stateful model over an abstracted paged collection. */ export interface IPagedModel { readonly length: number; readonly onDidIncrementLength: Event; isResolved(index: number): boolean; get(index: number): T; resolve(index: number, cancellationToken: CancellationToken): Promise; } export declare function singlePagePager(elements: T[]): IPager; export declare class PagedModel implements IPagedModel { private pager; private pages; get length(): number; readonly onDidIncrementLength: Event; constructor(arg: IPager | T[]); isResolved(index: number): boolean; get(index: number): T; resolve(index: number, cancellationToken: CancellationToken): Promise; } export declare class DelayedPagedModel implements IPagedModel { private readonly model; private timeout; get length(): number; get onDidIncrementLength(): Event; constructor(model: IPagedModel, timeout?: number); isResolved(index: number): boolean; get(index: number): T; resolve(index: number, cancellationToken: CancellationToken): Promise; } /** * A PageIteratorPager wraps an IPageIterator to provide IPager functionality. * It caches pages as they are accessed and supports random page access by * sequentially loading pages until the requested page is reached. */ export declare class PageIteratorPager implements IPager { private cachedPages; private currentIterator; private isComplete; private pendingRequests; readonly firstPage: T[]; readonly pageSize: number; readonly total: number; constructor(initialIterator: IPageIterator); getPage(pageIndex: number, cancellationToken: CancellationToken): Promise; private loadPagesUntil; } export declare class IterativePagedModel implements IPagedModel { private items; private _hasNextPage; private readonly _onDidIncrementLength; private loadingPromise; private readonly pager; constructor(pager: IIterativePager); get onDidIncrementLength(): Event; /** * Returns actual length + 1 if there are more pages (sentinel approach) */ get length(): number; /** * Sentinel item is never resolved - it triggers loading */ isResolved(index: number): boolean; get(index: number): T; /** * When sentinel item is accessed, load next page */ resolve(index: number, cancellationToken: CancellationToken): Promise; private loadNextPage; dispose(): void; } /** * Similar to array.map, `mapPager` lets you map the elements of an * abstract paged collection to another type. */ export declare function mapPager(pager: IPager, fn: (t: T) => R): IPager;